方法一:
添加一个名为 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。使用它,您可以为每种资源类型维护一个单独的通用模板,但仍保持它们之间的依赖关系,以便创建整个堆栈。
如果您可以为每种资源类型维护单独的模板,则此方法更合适。这提供了更大的灵活性和隔离性(如果您需要修改特定资源类型的条件/参数,您只需要更新该特定模板)并将减少其他部分的人为错误模板。