首页 > 解决方案 > 使用 api 调用结果作为 CloudFormation 资源的参数

问题描述

反正有没有使 CloudFormation 参数动态化?我知道系统管理器参数,但我必须再次手动更改它的值。我想以某种方式在我的 CloudFormation 资源中使用 API 调用或脚本(Bash,python)的结果

例如,作为参数的一部分,运行 API 调用以取回一些数据(任何数据),然后将结果使用/引用到资源中,所有这些都在一个模板中。

标签: amazon-web-servicesamazon-ec2amazon-cloudformation

解决方案


您可以使用 Cloudformation 自定义资源来实现类似的效果,但有一些注意事项。

作为示例,我们可以使用 AWS CDK,它提供了一个模块来创建自定义资源,甚至还有一个专门设计用于调用 AWS API 并返回结果的包装器:https ://docs.aws.amazon.com/cdk/api/最新的/docs/@aws-cdk_custom-resources.AwsSdkCall.html

一些要记住的事情:

  1. 自定义资源需要在表单中返回值,{'PhysicalResourceId': ..., Data: {"MyAttribute": ...}}以支持使用!GetAtt MyResource.MyAttribute引用样式
  2. 与任何其他 CF 资源一样,自定义资源不会在每次更新时触发,只有在资源的参数之一发生更改时才会触发。因此,如果您在创建堆栈时为 API 调用提供了一些参数,除非您更改值,否则不会发生更新,也不会触发 API 调用。

推荐阅读