如何从 aws cloudformation 模板为特定资源类型创建堆栈
Posted
技术标签:
【中文标题】如何从 aws cloudformation 模板为特定资源类型创建堆栈【英文标题】:How to create stack for specific resource types from aws cloudformation template 【发布时间】:2018-03-20 11:42:36 【问题描述】:我有用于配置 EC2、VPC、S3 资源的 cloudformation 模板,但我想从该模板为特定资源类型(例如,仅限 EC2)创建堆栈。 我使用了 aws cli 并提到了 --resource-types "AWS::EC2::Instance" 但我收到错误 "在调用 CreateStack 操作时发生错误 (ValidationError):资源类型 AWS::S3::参数 ResourceTypes [AWS::EC2::Instance]" 不允许存储桶。 您能否告诉我如何明智地创建堆栈资源?
【问题讨论】:
【参考方案1】:方法一:
添加一个名为 ResourceType 的 Input 参数,如下所示。将您要创建的资源类型作为输入传递给 CFN 模板。
Parameters:
ResourceType:
Description: Resource Types
Type: String
AllowedValues:
- EC2
- RDS
- VPC
- S3
添加相应条件:
Conditions:
CheckCreateEC2:
Fn::Equals: [ Ref: ResourceType, "EC2" ]
CheckCreateRDS:
Fn::Equals: [ Ref: ResourceType, "RDS" ]
CheckCreateVPC:
Fn::Equals: [ Ref: ResourceType, "VPC" ]
CheckCreateS3:
Fn::Equals: [ Ref: ResourceType, "S3" ]
然后相应地创建资源类型,并检查相应的条件。
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Condition: CheckCreateEC
Properties:
.
.
.
MyRDSInstance:
Type: AWS::RDS::DBInstance
Condition: CheckCreateRDS
Properties:
.
.
.
MyS3Bucket:
Type: AWS::S3::Bucket
Condition: CheckCreateS3
Properties:
.
.
.
这样只有 resources 对应于您作为 resource-type em>InputParameter 将被创建。
方法二:
您可以使用 AWS Nested Stacks。使用它,您可以为每种资源类型维护一个单独的通用模板,但仍保持它们之间的依赖关系,以便创建整个堆栈。
如果您可以为每种资源类型维护单独的模板,则此方法更合适。这提供了更大的灵活性和隔离性(如果您需要修改特定资源类型的条件/参数,您只需要更新该特定模板)并将减少其他部分的人为错误模板。
【讨论】:
感谢您的帮助。我明白了。以上是关于如何从 aws cloudformation 模板为特定资源类型创建堆栈的主要内容,如果未能解决你的问题,请参考以下文章
如何修复与 AWS::CloudFormation::Init 一起创建 EC2 的 cloudformation 模板
如何在 Cloudformation 模板/CDK 中添加 AWS IoT 配置模板
如何使用 CloudFormation 模板更新现有 AWS API Gateway
如何在 AWS CloudFormation YAML 模板中转义策略变量