标签: aws-cdk

(@aws-cdk/pipelines) 应用程序源代码的构建阶段

我学习了CDK Pipelines:AWS CDK 应用程序的持续交付教程,该教程概述了如何使用新的CodePipeline API创建自变异 CDK 管道。

本教程创建一个 CodePipeline,每次将更改推送到 master 分支时,都会自动从 GitHub 存储库检索 CDK 源代码。CDK 代码定义了一个 lambda,其中包含与 CDK 一起定义的打字稿处理程序。

对于我的用例,我想定义一个自变异 CodePipeline,每当我推送到包含应用程序源代码的第二个存储库时也会触发该代码管道。第二个存储库还将包含一个构建规范,它使用我的应用程序生成 Docker 映像并将该映像上传到 ECR。然后,新映像将在我的管道的应用程序阶段部署到 Fargate 集群。

ApplicationBuild在 PublishAssets 阶段之后创建了一个阶段,其中包括一个 CodeBuild 项目。CodeBuild 项目从我的存储库中读取并构建/上传图像到 ECR;但是,我需要一种方法将此 CodeBuild 链接到管道的部署。我不清楚如何使用新的 cdk CodePipeline API 来执行此操作。

aws-codepipeline aws-cdk

1
推荐指数
1
解决办法
1794
查看次数

如何使用 Javascript AWS CDK 部署 Python AWS Lambda 及其依赖项?

我有一个使用 JavaScript 构建的 AWS CDK 堆栈。堆栈有多个 lambda。其中大部分是用 JavaScript 编写的。我想在 python 中添加一个 lambda 。当我不导入外部依赖项时,python lambda 工作正常,但在安装它们时不理解。我尝试将软件包安装在一个package文件夹或一个python文件夹中,并按照这些文章的建议进行压缩,但没有成功:

https://docs.aws.amazon.com/lambda/latest/dg/python-package.html https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/

我收到的错误是"Unable to import module 'py1': No module named 'x'" (x 指我尝试导入的任何包名称)

我的javascript CDK库代码是这样的:

// javascript lambda
new lambda.Function(this, 'lambda-js1', {
  functionName: `js1`,
  code: lambda.Code.fromAsset('assets/lambdajs'),
  handler: 'js1.handler',
  runtime: lambda.Runtime.NODEJS_14_X,
})

// python lambda
new lambda.Function(this, 'lambda-py1', {
  functionName: `py1`,
  code: lambda.Code.fromAsset('assets/lambdapy'),
  handler: 'py1.handler',
  runtime: lambda.Runtime.PYTHON_3_8,
})
Run Code Online (Sandbox Code Playgroud)

assets/lambdapy我在使用中安装了依赖项

pip install x
pip install --target ./package x
pip install -t …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda aws-cdk

1
推荐指数
1
解决办法
5031
查看次数

docker login --username AWS --password-stdin https://<accountNumber>.dkr.ecr.<region>.amazonaws.com 退出并显示错误代码 1:

我只是采用 Eventbridge ETL 设计模式,但在部署时它给了我这个错误:

\n

[100%] 失败: docker login --username AWS --password-stdin https://315997497220.dkr.ecr.us-west-2.amazonaws.com退出,错误代码 1:

\n
\n

\xe2\x9d\x8c the-eventbridge-etl 失败:错误:无法发布一个或多个\nassets。请参阅上面的错误消息以获取更多信息。在\nObject.publishAssets\n(/home/mubashir/.nvm/versions/node/v16.3.0/lib/node_modules/aws-cdk/lib/util/asset-publishing.ts:25:11)\nat processTicksAndRejections (节点:内部/进程/task_queues:96:5)\ nat Object.deployStack \ n(/home/mubashir/.nvm/versions/node/v16.3.0/lib/node_modules/aws-cdk/lib/api/deploy- stack.ts:237:3)\nat CdkToolkit.deploy\n(/home/mubashir/.nvm/versions/node/v16.3.0/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:194: 24)\nat initCommandLine\n(/home/mubashir/.nvm/versions/node/v16.3.0/lib/node_modules/aws-cdk/bin/cdk.ts:267:9)\n无法发布一项或多项资产。请参阅上面的错误消息以了解\n更多信息。

\n
\n

我采取的步骤。Github 仓库有一个我关注的视频

\n
npx cdkp init the-eventbridge-etl --lang=python\ncd the-eventbridge-etl\npython3 -m venv .env\nsource .env/bin/activate\npip install -r requirements.txt\ncdk synth\ncdk deploy\n
Run Code Online (Sandbox Code Playgroud)\n

我收到的第一个错误与引导有关。所以我引导。

\n
export CDK_NEW_BOOTSTRAP=1\nnpx cdk bootstrap aws://315997497220/us-east-2 --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess --trust 315997497220 aws://315997497220/us-east-2\n
Run Code Online (Sandbox Code Playgroud)\n

我自然地更新了 cdk.json 文件以使用上述引导技术。我已经尝试了所有引导技术,无论是否带有限定符,以及随后对 cdk.json 的更改。我不认为这是引导程序问题。

\n

我收到上述错误,但我不知道问题是什么。我没有对代码进行任何更改。

\n

python amazon-web-services node.js docker aws-cdk

1
推荐指数
1
解决办法
2095
查看次数

发送给 KMS_MANAGED 加密 SQS 队列(在 CDK 中)的 S3 事件通知不起作用

我有一个使用 CDK 开发的架构,其中包含 S3 存储桶和事件通知,该通知将针对每个上传到 S3 的文件向 SQS 发送一条消息。

效果很好。

现在我正在尝试激活加密,并且我有以下内容:

  • 对于 S3 -> 我已使用 S3_MANAGED 密钥激活加密,一切正常
  • 对于 SQS -> 我已使用 KMS_MANAGED 密钥激活加密,并且没有消息发送到 SQS

所以我假设缺少一些权限,但我不知道如何修复它。

我是否需要向 SQS 添加缺少的权限才能从 S3 读取数据?或者 S3 是否有权将消息发送到加密的 SQS?

amazon-s3 amazon-sqs amazon-web-services amazon-kms aws-cdk

1
推荐指数
1
解决办法
1372
查看次数

CDK部署Gatsby站点超过50条路由规则

尝试使用 AWS CDK 部署 Gatsby 站点,但 BucketDeployment 始终失败,并显示错误消息:

CREATE_FAILED | Custom::CDKBucketDeployment | DeploySiteCustomResourceE47C9748 Received response status [FAILED] from custom resource. Message returned: Command '['/opt/awscli/aws', 's3', 'cp', 's3://cdk-xxxXXXXX-assets-xxx/assets/xxxXXXXXXXX.zip', '/tmp/tmpXXX/XXXXX']' died with <Signals.SIGKILL: 9>
Run Code Online (Sandbox Code Playgroud)

文件大小仅为 163MB,因此不会超过 500MB 的限制。

使用 gatsby-plugin-s3 我得到一个错误,指出该站点有超过 50 条路由规则。

如何使用 CDK 解决这个问题?我尝试过使用网站重定向位置,但这也不起作用。

桶部署

CREATE_FAILED | Custom::CDKBucketDeployment | DeploySiteCustomResourceE47C9748 Received response status [FAILED] from custom resource. Message returned: Command '['/opt/awscli/aws', 's3', 'cp', 's3://cdk-xxxXXXXX-assets-xxx/assets/xxxXXXXXXXX.zip', '/tmp/tmpXXX/XXXXX']' died with <Signals.SIGKILL: 9>
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services gatsby aws-cdk

1
推荐指数
1
解决办法
856
查看次数

ECS 任务无法提取机密或注册表身份验证

我有一个 CDK 项目,它创建一个在 ECS 上部署应用程序的 CodePipeline。我之前一切都正常,但 VPC 使用 NAT 网关,这最终导致成本太高。所以现在我尝试在不需要 NAT 网关的情况下重新创建该项目。我快要完成了,但现在当 ECS 服务尝试启动任务时遇到了问题。所有任务都无法启动,并出现以下错误:

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret
Run Code Online (Sandbox Code Playgroud)

此时,我已经忘记了我尝试过的不同事情,但我将在这里发布相关内容以及我的一些尝试。

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret
Run Code Online (Sandbox Code Playgroud)

我在某处读到,它可能与 Fargate 版本 1.4.0 与 1.3.0 有关,但我不确定需要更改什么才能允许任务访问它们需要运行的内容。

amazon-web-services amazon-ecs amazon-vpc aws-cdk

1
推荐指数
1
解决办法
1206
查看次数

设置 GatewayResponse 时指定的映射表达式无效

默认 API 网关响应采用以下形式:{"message":$context.error.messageString}。通过控制台更改此模板,"error"例如将其包装在对象中,效果很好。但是,当我在 CDK 中尝试时,在部署过程中出现错误Invalid mapping expression specified

代码注意这实际上是默认模板):

webServiceApi.addGatewayResponse('4XX', {
   type: apigw.ResponseType.DEFAULT_4XX,
   responseHeaders: COMMON_HEADERS,
   templates: {
      'application/json': '{"message":$context.error.messageString}',
   },
});
Run Code Online (Sandbox Code Playgroud)

任何更改都会发生这种情况,包括我能找到的所有 AWS 编写的示例。AWS 中的各个地方都没有充分记录:CDK、SDK、API Gateway 和 CloudFormation,因此我很难找出那里出了什么问题?

云形成错误

Resource handler returned message: "Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression specified: *] (Service: ApiGateway, Status Code: 400, Request ID: [TRUNCATED], Extended Request ID: null)" (RequestToken: [TRUNCATED], HandlerErrorCode: InvalidRequest)
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-lambda aws-api-gateway aws-cdk

1
推荐指数
1
解决办法
1388
查看次数

如何使用 AWS CDK 将 EFS 连接并装载到我的 EC2 实例

我想自动安装EFS到我EC2 instance使用的 AWS CDK。

我创建了文件系统:

        self.file_system = efs.FileSystem(
            scope=self,
            id="Efs",
            vpc=self.vpc,
            file_system_name="EFS",
            removal_policy=RemovalPolicy.DESTROY,
        )
Run Code Online (Sandbox Code Playgroud)

和 EC2 实例:

        self.ec2_instance = ec2.Instance(
            scope=self,
            id="ec2Instance",
            instance_name="my_ec2_instance",
            instance_type=ec2.InstanceType.of(
                instance_class=ec2.InstanceClass.BURSTABLE2,
                instance_size=ec2.InstanceSize.MICRO,
            ),
            machine_image=ec2.AmazonLinuxImage(
                generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2
            ),
            vpc=self.vpc,
            vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),
            key_name="ec2-key-pair",
            security_group=ec2_security_group,
        )
Run Code Online (Sandbox Code Playgroud)

现在我需要做什么才能将它们连接起来?我看到很多在控制台上执行此操作的示例,但到目前为止我还没有找到在 AWS CDK 中执行此操作的方法。

amazon-ec2 amazon-web-services aws-cdk

1
推荐指数
1
解决办法
3342
查看次数

将跨账户委托添加到现有托管区域

我可以像这样创建一个具有跨帐户委托的新托管区域

const parentZone = new route53.PublicHostedZone(this, 'HostedZone', {
  zoneName: 'someexample.com',
  crossAccountZoneDelegationPrincipal: new iam.AccountPrincipal('12345678901'),
  crossAccountZoneDelegationRoleName: 'MyDelegationRole',
});
Run Code Online (Sandbox Code Playgroud)

这非常简单。但是如果托管区域已经存在怎么办

const parentHostedZone = route53.PublicHostedZone.fromLookup(this, 'HostedZone', {
    domainName: 'someexample.com',
})
Run Code Online (Sandbox Code Playgroud)

如何向该区域添加委托?

amazon-route53 aws-cdk

1
推荐指数
1
解决办法
1951
查看次数

cdk合成器:尝试从相对路径导入切换到绝对路径导入时找不到模块

我正在将 CDK 包的相对路径导入切换为绝对路径导入,并在运行时出现此错误cdk synth

$ cdk synth
Error: Cannot find module 'lib/CodePipelineStack'
Run Code Online (Sandbox Code Playgroud)

我按照此方法使用打字稿中的绝对路径进行导入以设置文件中的baseUrl和。pathstsconfig.json

不知道为什么它不起作用。

更多背景信息

我的项目结构如下所示:

在此输入图像描述

我的 tsconfig.json 是:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "bin/*": [ "./bin/*" ],
      "lib/*": [ "./lib/*" ],
      "test/*": [ "./test/*" ]
    },
    "target": "ES2018",
    "module": "commonjs",
    "lib": [
      "es2018"
    ],
    "declaration": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": false,
    "inlineSourceMap": true,
    "inlineSources": true,
    "experimentalDecorators": …
Run Code Online (Sandbox Code Playgroud)

typescript aws-cdk

1
推荐指数
1
解决办法
929
查看次数