以编程方式利用使用CloudFormation创建的资源

时间:2016-05-04 15:33:57

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

我正在使用AWS CloudFormation创建大量应用程序资源,并且在创建资源时,CloudFormation会在名称末尾添加一个哈希,以使其唯一。

即。如果您想创建Kinesis流名称MyStream,实际名称将类似于my-stack-MyStream-1F8ISNCLP0W4O

我希望能够以编程方式访问资源而无需知道哈希值,而无需查询AWS我的资源以自己匹配名称,也无需手动步骤。有没有人知道以编程方式和可预测的方式在您的应用程序中使用AWS资源的便捷方式?

以下是我能想到的不太理想的选择:

  1. 在资源上设置标记(即name -> MyStream)并查询AWS以获取实际资源名称。
  2. 在AWS中查询资源名称列表,并查找预期名称的部分匹配。
  3. 创建资源后,手动将实际名称复制到配置文件中(可能是这些选项的最佳选择)

1 个答案:

答案 0 :(得分:2)

您可以使用CloudFormation API获取堆栈中的资源列表。这将为您提供逻辑ID列表(即您的CloudFormation模板中没有哈希的名称)和匹配的物理ID(使用堆栈名称和哈希)。使用AWS CLI,这将显示两个ID之间的映射:

aws cloudformation describe-stack-resources
    --query StackResources[].[LogicalResourceId,PhysicalResourceId]
    --stack-name <my-stack>

Amazon提供的所有各种语言SDK都提供了执行相同查询的CloudFormation API。

通过在构建时查询CloudFormation并将结果嵌入到配置文件中,可以通过在运行时查询CloudFormation或#3来将此作为#1的替代方案。我没有看到使用您自己的标签而不仅仅是查询CF API的任何优势。如果您希望同一模板中的两个或多个堆栈共存,则#2将导致问题。

我已经使用了运行时和构建时方法。构建时方法允许您删除对CloudFormation的依赖或知识,但需要在配置文件中包含特定于堆栈的信息。我喜欢运行时方法,允许将相同的构建部署到多个堆栈,并且只需要堆栈名称即可找到所有相关资源。