【问题标题】:How to create stack for specific resource types from aws cloudformation template如何从 aws cloudformation 模板为特定资源类型创建堆栈
【发布时间】: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]" 不允许存储桶。 您能否告诉我如何明智地创建堆栈资源?

【问题讨论】:

    标签: amazon-web-services


    【解决方案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。使用它,您可以为每种资源类型维护一个单独的通用模板,但仍保持它们之间的依赖关系,以便创建整个堆栈。

    如果您可以为每种资源类型维护单独的模板,则此方法更合适。这提供了更大的灵活性和隔离性(如果您需要修改特定资源类型的条件/参数,您只需要更新该特定模板)并将减少其他部分的人为错误模板。

    【讨论】:

    • 感谢您的帮助。我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2019-06-13
    • 2020-06-12
    • 2020-11-09
    • 2017-01-31
    • 2018-11-24
    相关资源
    最近更新 更多