【发布时间】:2021-02-02 13:55:51
【问题描述】:
我正在使用 CDK 设置 CI/CD 管道。我目前有一个从 git 构建到管道中的代码。然后有两个构建 - 一个为 lambda 提取代码并为其构建一个工件,另一个发出 cdk 合成器以构建 lambda 框架(包括嵌套桶和发电机)。
然后它进入部署阶段,但由于找不到 lambda 代码位置的参数而失败
我一直在使用这个例子:https://docs.aws.amazon.com/cdk/latest/guide/codepipeline_example.html
与此示例的唯一区别是我对所有这些都使用 python,并且由于已知的未来需求,lamdba 位于堆栈代码的并行目录中
|-Lambdas
|--Lambda1
|---Lambda1Code
|--Lambda2
|---Lambda2Code
|-CDKStacks
|--LambdaCreationStack
|--PipelineCreationStack
|--app.py
一切都运行,直到部署失败并出现错误“以下 CloudFormation 参数缺少值:”,然后列出 BucketName 和 ObjectKey
我根据上面的链接将它们指定为覆盖:
admin_permissions=True,
parameter_overrides=dict(
lambda_code.assign(
bucket_name=lambda_location.bucket_name,
object_key=lambda_location.object_key,
object_version=lambda_location.object_version
)
),
作为管道操作 CloudFormationCreateUpdateStackAction 的一部分,并像示例中一样将代码从 lambda 堆栈传递到管道堆栈。但是每次 lambda 堆栈尝试部署代码的位置的参数'不存在'
我尝试过覆盖参数,但在管道中并动态创建我犹豫是否要进一步跟进(而且我的尝试无论如何都没有奏效)。我尝试了一堆不同的堆栈/嵌套堆栈/单堆栈配置,但还没有成功。
想法?
【问题讨论】:
-
更多信息:参数覆盖位于 PipelineStack 但不在 LambdaDeploymentStack - 我可以看到 Pipeline 堆栈的构建规范适当的 s3 存储桶和密钥作为替代。如何从 PipelineStack 到 LambdaStack?
-
嗨。这有什么好运气吗?我正在处理非常相似的事情
-
是和否(因为我刚刚在处理类似问题时再次发现这一点)将在 cloudformation 合成阶段使用来自源的输出工件确定正在传递的代码位置 - 工件成为输入对于下一阶段,云形成模板会自动更新 codeuri 以附加 s3 url。因此,使用 'code=aws_lambda.AssetCode(os.path.join(base_directory, code)' 会将其指向本地位置,但会在传入管道时附加 s3 工件
标签: amazon-web-services aws-lambda aws-codepipeline aws-cdk aws-codebuild