【问题标题】:Using api call result as a parameter for CloudFormation resource使用 api 调用结果作为 CloudFormation 资源的参数
【发布时间】:2021-12-03 18:49:03
【问题描述】:

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

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

【问题讨论】:

  • 不,显然你不能直接使用参数来做到这一点。部署 cloudformation 模板的代码需要运行 API 调用并将结果传递给参数输入,或者您需要在 cloudformation 本身中创建一个自定义资源,该资源调用 api 并使用结果。
  • @luk2302 所说的 - 我会选择选项 1,因为它会更容易。
  • @luk2302 你能给我看一个例子,或者关于第一个解决方案的任何文档吗?
  • 我的问题的主要原因是根据某些标准接收所有 S3 存储桶,例如名称是否以开头或包含...然后将此列表作为资源选项提供,以便我可以选择一个部署我的堆栈。

标签: amazon-web-services amazon-ec2 amazon-cloudformation


【解决方案1】:

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

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

需要记住的一些事情:

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

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 2018-05-25
    • 2018-09-28
    • 2021-10-14
    • 2020-06-12
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多