我在一个现有基于Cloudformation的管道环境中工作。我想知道是否可以使用CDK描述我的基础架构,然后生成用于管道的Cloudformation,而无需对管道进行任何更改。我希望使用CDK是完全透明的。
我在一个现有基于Cloudformation的管道环境中工作。我想知道是否可以使用CDK描述我的基础架构,然后生成用于管道的Cloudformation,而无需对管道进行任何更改。我希望使用CDK是完全透明的。
一般情况下,我不建议使用 cdk synth
的输出通过 CloudFormation 进行部署,除非你非常了解它。
原因在于:CDK 在某些边缘情况下会预先进行引导和资产发布,例如所谓的 asset sources(docker 镜像、s3 文件等)。
这个主题与 CDK 存储库中的 CI/CD 集成问题有一些重叠。[1]
正在进行工作,以开发完全自动化的 CDK CI/CD 流程 [2]。所谓的 cloud assembly [3] 包含了所有必要的资源,可以通过 CloudFormation 部署,但正如 RFC 指出的那样:
云集成包括每个堆栈和资产源(docker 镜像、s3 文件等)的 CloudFormation 模板,必须将其打包并发布到每个使用它们的环境中的资产存储中。
如果您没有使用任何资产或者在使用 CloudFormation 之前有打包和部署它们的选项,那么在提供正确的 CFN 参数时,应该可以在 CloudFormation 中使用 cdk synth 输出(正如其他人已经在本主题中指出的那样)。
[1] https://github.com/aws/aws-cdk/issues/6894
[2] https://github.com/aws/aws-cdk-rfcs/blob/master/text/0049-continuous-delivery.md
[3] https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cloud-assembly-schema/README.md
cdk synth
“构建”CloudFormation模板的过程。然后将此模板上传到版本化路径上的S3存储桶中。create-stack
上的--template-url
选项从存储桶部署CloudFormation模板。cdk synth 的输出可以存储在 JSON 中。
build_spec=BuildSpec.from_object({
"version": "0.2",
"run-as": "root",
"phases": {
"install": {
"commands": [
'npm install -g aws-cdk',
'pip install -r requirements.txt',
]
},
"build": {
"commands": [
'cdk synth stack-dev --verbose --debug=true -o > output.json'
]
}
},
"artifacts": {
"files": "output.json"
},
})
cdk_build_action = CodeBuildAction(
action_name="CDKBuild",
project=cdk_build,
input=source_artifact,
outputs=[cdk_build_output]
)
这个 JSON 可以通过 CloudFormationCreateUpdateStackAction 转发到部署阶段。
CloudFormationCreateUpdateStackAction(template_path=cdk_build_output.at_path("output.json"))
cdk synth
命令,获取生成的 YAML 文件并将其用作模板? - Amit Baranescdk synth
,可能作为Git precommit hook。我没有改变管道的可能性,因此使用cdk而不是cloudformation的事实对管道来说应该是透明的。 - sumek