我正在使用AWS CloudFormation创建大量应用程序资源,并且在创建资源时,CloudFormation会在名称末尾添加一个哈希,以使其唯一。
即。如果您想创建Kinesis流名称MyStream
,实际名称将类似于my-stack-MyStream-1F8ISNCLP0W4O
。
我希望能够以编程方式访问资源而无需知道哈希值,而无需查询AWS我的资源以自己匹配名称,也无需手动步骤。有没有人知道以编程方式和可预测的方式在您的应用程序中使用AWS资源的便捷方式?
以下是我能想到的不太理想的选择:
name -> MyStream
)并查询AWS以获取实际资源名称。答案 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的依赖或知识,但需要在配置文件中包含特定于堆栈的信息。我喜欢运行时方法,允许将相同的构建部署到多个堆栈,并且只需要堆栈名称即可找到所有相关资源。