- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在修改一个有效的 CDK 管道。我正在添加一个 lambda,并且在进行此代码修改时,管道失败并出现错误。
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';
import * as path from 'path';
import { Rule, Schedule } from '@aws-cdk/aws-events';
import { LambdaFunction } from '@aws-cdk/aws-events-targets';
import { Secret } from '@aws-cdk/aws-secretsmanager';
import { Effect, Policy, PolicyStatement } from '@aws-cdk/aws-iam';
interface LambdaStackProps extends cdk.StackProps {
logzioToken: string;
}
export class Lambda extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: LambdaStackProps) {
super(scope, id, props);
const logzioSecret = Secret.fromSecretAttributes(this, 'sv-logzioToken', {
secretPartialArn: props.logzioToken,
});
// Here is the func itself
const func = new lambda.Function(this, 'sv-http-cache-clear-lambda', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
// The "build" folder requires `yarn build` to have been run in the lambda folder
code: lambda.Code.fromAsset(path.join(__dirname, '../../lambdas/HttpCacheClear/build')),
environment: {
LOGZIO_TOKEN: logzioSecret.secretValueFromJson('logzioToken').toString(),
},
});
// Here are the Dynamo permissions I think we need
const policyStatement = new PolicyStatement({
actions: ['dynamodb:GetItem', 'dynamodb:Query', 'dynamodb:Scan', 'dynamodb:DeleteItem'],
effect: Effect.ALLOW,
resources: ['*'],
});
const policy = new Policy(this, 'sv-http-cache-clear-policy', {
statements: [policyStatement],
});
func.role?.attachInlinePolicy(policy);
new Rule(this, 'sv-http-cache-clear-schedule-rule', {
description: 'Schedule a Lambda that regularly clears the cache',
schedule: Schedule.cron({
year: '*',
month: '*',
day: '*',
hour: '1',
minute: '0',
}),
targets: [new LambdaFunction(func)],
});
}
}
这是从这里在 CDK 中实例化的:
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { AppStack } from '../lib/app-stack';
import { ECR } from '../lib/ecr';
import { Lambda } from '../lib/lambda';
import { getConfig } from '../lib/config';
const app = new cdk.App();
// Stateful infra
const { repository } = new ECR(app, 'sv-ecr-stack');
// Get app config
const environment = process.env.ENVIRONMENT || '';
const { certificateArn, domainName, sIdProgramId, logzioToken, optimizelyUrl } = getConfig(environment);
new AppStack(app, 'sv-stack', {
repository,
domainName,
certificateArn,
sIdProgramId,
logzioToken,
optimizelyUrl,
environment,
});
const lambda = new Lambda(app, 'sv-http-scheduled-cache-clear', {
logzioToken,
});
为简洁起见,我没有在这篇文章中添加 AppStack
。
最后我有了一组相当简单的 NPM 依赖:
{
"name": "cdk",
"version": "0.1.0",
"bin": {
"cdk": "bin/cdk.js"
},
"scripts": {
"build": "tsc",
"watch": "tsc -w",
"cdk": "cdk",
"synth": "cdk synth -q",
"deploy": "cdk deploy --all --progress=events --require-approval=never"
},
"devDependencies": {
"@aws-cdk/assert": "^1.100.0",
"@aws-cdk/aws-certificatemanager": "^1.100.0",
"@aws-cdk/aws-ec2": "^1.100.0",
"@aws-cdk/aws-ecr": "^1.100.0",
"@aws-cdk/aws-ecs": "^1.100.0",
"@aws-cdk/aws-ecs-patterns": "^1.100.0",
"@aws-cdk/aws-iam": "^1.100.0",
"@aws-cdk/aws-route53": "^1.100.0",
"@types/node": "10.17.27",
"aws-cdk": "^1.100.0",
"ts-node": "^9.0.0",
"typescript": "~3.9.7"
},
"dependencies": {
"@aws-cdk/core": "^1.100.0",
"source-map-support": "^0.5.16"
}
}
如果我在本地运行 npm run synth
那么它会运行 synth 命令并成功。我的编辑器中没有 TypeScript 错误。
这是 cdk deploy
错误:
export AWS_ACCESS_KEY_ID=$DEV_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$DEV_SECRET_ACCESS_KEY
export ENVIRONMENT=dev
cd cdk
npm install
npm run deploy
npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it!
npm WARN cdk@0.1.0 No repository field.
npm WARN cdk@0.1.0 No license field.
added 1363 packages from 232 contributors and audited 1366 packages in 19.228s
18 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
> cdk@0.1.0 deploy /home/circleci/project/cdk
> cdk deploy --all --progress=events --require-approval=never
sv-ecr-stack
sv-ecr-stack: deploying...
✅ sv-ecr-stack (no changes)
Outputs:
sv-ecr-stack.ExportsOutputFnGetAttsvrepositoryXXX = arn:aws:ecr:*********:067685711111:repository/student-validation-app
sv-ecr-stack.ExportsOutputRefsvrepositoryXXX = student-validation-app
Stack ARN:
arn:aws:cloudformation:*********:067685711111:stack/sv-ecr-stack/aabbccddeeffgghhiijjkk
sv-http-scheduled-cache-clear
sv-http-scheduled-cache-clear: deploying...
[0%] start: Publishing abcdefghijklmnop:current
[100%] fail: Bucket named 'cdktoolkit-stagingbucket-7k57fjeur592' exists, but not in account 067685711111. Wrong account?
❌ sv-http-scheduled-cache-clear failed: Error: Failed to publish one or more assets. See the error messages above for more information.
at Object.publishAssets (/home/circleci/project/cdk/node_modules/aws-cdk/lib/util/asset-publishing.ts:25:11)
at Object.deployStack (/home/circleci/project/cdk/node_modules/aws-cdk/lib/api/deploy-stack.ts:235:3)
at CdkToolkit.deploy (/home/circleci/project/cdk/node_modules/aws-cdk/lib/cdk-toolkit.ts:180:24)
at initCommandLine (/home/circleci/project/cdk/node_modules/aws-cdk/bin/cdk.ts:208:9)
***************************************************
*** Newer version of CDK is available [1.110.0] ***
*** Upgrade recommended ***
***************************************************
Failed to publish one or more assets. See the error messages above for more information.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! cdk@0.1.0 deploy: `cdk deploy --all --progress=events --require-approval=never`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the cdk@0.1.0 deploy script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/circleci/.npm/_logs/2021-06-25T13_34_37_706Z-debug.log
Exited with code exit status 1
一些研究表明 CDK 使用 S3 来创建一个“暂存桶”,我认为这就是 cdktoolkit-stagingbucket-*
是什么(它不是我创建的工件明确)。
我需要远程/显式或本地/手动创建此存储桶吗?
我找到了this bug report这表明错误消息很糟糕 - 它需要 S3 访问权限,但消息并没有说明清楚。我为 CI/CD 用户找到了这个策略文件,我想知道我是否需要确定添加什么策略以允许使用 S3。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StmtXXXYYYZZZ4501",
"Action": [
"cloudformation:*",
"ec2:*",
"ecs:*",
"ecr:*",
"application-autoscaling:*",
"elasticloadbalancing:*",
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:TagRole",
"iam:UpdateRole",
"iam:GetRolePolicy",
"iam:DeleteRolePolicy",
"iam:PutRolePolicy",
"iam:PassRole",
"logs:*",
"route53:*",
"secretsmanager:*",
"sts:*",
"dynamodb:*",
],
"Effect": "Allow",
"Resource": "*"
}
]
}
最佳答案
错误信息相当具有误导性。如果您可以访问多个帐户,则 S3 存储桶很可能存在于另一个帐户中 - 这是因为它是一个自动生成的存储桶,CDK 使用它来打包和部署 lambda。我假设它在所有 AWS 账户中都是相同的名称。
简单的解决方案是将 "s3:*"
添加到您对 "*"
资源的允许操作中。但是,我决定添加一个新策略,以便资源规范更严格一些。在我的情况下,这意味着添加一个具有不同资源规范的新子句:
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::cdktoolkit-stagingbucket-*"
}
您似乎不必显式创建此存储桶 - CDK 会为您完成。 “Sid”似乎也不是必填字段。
在我的情况下,添加此策略揭示了我缺少多少其他权限,但至少这些错误消息更明智!
关于typescript - CDK 部署结果 "Bucket named ' x' 存在,但不存在于帐户 067685711111 中。错误的帐户?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68134382/
我正在尝试引用几个子网来创建 ec2 实例,但我有点卡住了。 假设我有这个: const vpc = new Vpc(this, 'gwc-vpc', { cidr: "10.20.
我们正在使用 AWS CDK 来创建我们的无服务器 REST API。但是,有大量端点,有时我们必须销毁和重新部署我们的堆栈。为了防止 REST API URL 随每次部署而更改,我计划在一个堆栈中创
我看到了各种使用 AWS CDK 的示例,其中一些使用 aws-cdk-lib,另一些使用 @aws-cdk/core。这些之间有什么区别,什么时候应该使用一个或另一个? 最佳答案 aws-cdk-l
我看到了各种使用 AWS CDK 的示例,其中一些使用 aws-cdk-lib,另一些使用 @aws-cdk/core。这些之间有什么区别,什么时候应该使用一个或另一个? 最佳答案 aws-cdk-l
我是 CDK 的新手,需要了解高级构造与低级构造之间的区别。谁能用简单的话解释一下:) 热烈的问候。 最佳答案 CDK 旨在让任何人都能轻松创建具有预配置默认值的组件。这意味着您可以(使用更高级别的构
我不想使用我的默认 aws 配置文件和帐户进行 cdk 开发 所以我创建了一个新帐户和一个新的个人资料 cdkprof使用 aws configure --profile cdkprof . 我已经在
我有一个在 cdk.context.json 中存储一些键值的用例,但是如果 cdk.context.json 不存在或者它不包含我希望 CDK 回退到其他代码来发现的键值(value)。 例如,假设
我创建了一个将部署在多个区域的 CDK 堆栈。其中一种构造只能部署在一个地区。在 Cloudformation 中,我只是向资源添加一个条件,但我还没有找到一种方法来对 CDK 构造做类似的事情。 可
以下CDK代码 const queue = new sqs.Queue(this, 'my-sqs-queue', { visibilityTimeout: cdk.Duratio
Use an AWS CloudFormation Parameter AWS CDK 的部分提到了如何自定义您的 AWS CloudFormation 模板。指的是云形成模板 .我想将参数添加到我的
@aws-cdk/pipelines 的文档似乎表明可以使用 codePipeline Prop 将 CDK 管道添加到现有的@aws-cdk/aws-codepipeline/Pipeline:ht
我遇到了一个问题,我们想要确保在 CloudFormation 资源的命名中遵循一些约定。这个想法是我们使用 CDK Aspects来处理资源。一个简单的例子: export class Bucket
我正在寻找一种方法来指定我的项目中堆栈的部署顺序。 我知道我可以添加依赖项,但是这些堆栈不相互依赖,我可能想稍后删除一些。 我有一个服务框架,每个其他堆栈(例如 rds)都需要这些服务框架。这些都是在
是否可以使用 AWS CDK CLI 以某种方式获取另一个堆栈所依赖的堆栈列表?例如,给定一个类似于以下内容的堆栈列表: const app = new App(); const alphaStack
我正在使用 CDK Python API 定义 Glue 爬虫,但是,CDK 生成的模板在爬虫资源中包含空的“目标” block 。 我一直没能找到一个例子来模仿。我试过改变目标对象的定义,但对象定义
我们正在开发一个多账户 CDK 应用程序,并在 CodeBuild 上进行持续部署。我们知道 CDK authentication issues所以我们使用 $ aws sts assume-role
aws-cdk 允许您合成一个堆栈 - 这会产生许多文件 - 包括 .template.json 文件。 可以在没有 aws-cdk 工具的情况下部署这个 .template.json 文件吗?还是设
是否可以使用 aws-cdk 部署到 localstack? 想过从无服务器切换到 cdk,但除了 aws SAM 之外找不到任何其他本地测试选项。 最佳答案 我现在正在应对同样的挑战。我得到的方法是
我的 CDK 堆栈包含太多参数(子网 ID、API URL),无法在命令行中指定。所以我想将它们保存在单独的文件中,例如 dev.properties 或 prod.json。来自 cdk.json
我的 CDK 堆栈包含太多参数(子网 ID、API URL),无法在命令行中指定。所以我想将它们保存在单独的文件中,例如 dev.properties 或 prod.json。来自 cdk.json
我是一名优秀的程序员,十分优秀!