如何从 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 模板中转义策略变量

如何使用 aws cloudformation 模板在 aws cognito 用户池中设置所需属性?

如何将 AWS CloudWatch 仪表板转换为 CloudFormation 模板