首页 > 解决方案 > Cloudformation 模板中的嵌套映射

问题描述

我在我的 cloudformation 模板中有一个 VPC 设置的映射,如果我喜欢它就可以正常工作

SubnetConfig:
    VPC:
      CIDR: '10.1.0.0/16'
    PublicOne:
      CIDR: '10.1.0.0/22'
    PublicTwo:
      CIDR: '10.1.4.0/22'
    PrivateOne:
      CIDR: '10.1.8.0/22'
    PrivateTwo:
      CIDR: '10.1.12.0/22'

我可以使用!FindInMap ['SubnetConfig', 'VPC', 'CIDR'] OR !FindInMap ['SubnetConfig', 'PublicOne', 'CIDR'].

但是,我希望根据PRODNON-PROD环境有不同的 CIDR 范围。在这种情况下,我的映射将是:

SubnetConfig:
    PROD:
      VPC:
        CIDR: '10.1.0.0/16'
      PublicOne:
        CIDR: '10.1.0.0/24'
      PublicTwo:
        CIDR: '10.1.1.0/24'
      PrivateOne:
        CIDR: '10.1.2.0/24'
      PrivateTwo:
        CIDR: '10.1.3.0/24'
    NON-PROD:
      VPC:
        CIDR: '10.2.0.0/16'
      PublicOne:
        CIDR: '10.2.0.0/22'
      PublicTwo:
        CIDR: '10.2.4.0/22'
      PrivateOne:
        CIDR: '10.2.8.0/22'
      PrivateTwo:
        CIDR: '10.2.12.0/22'

当然,cloudformation 不允许这种映射。有没有办法定义这个映射?我已经提到了这篇文章,但它没有帮助

标签: amazon-web-servicesamazon-cloudformation

解决方案


一种替代方法可能是将映射展平一层,例如

Mappings:
  SubnetConfig:
    PROD:
      VPCCIDR: '10.1.0.0/16'
      PublicOneCIDR: '10.1.0.0/24'
      PublicTwoCIDR: '10.1.1.0/24'
      PrivateOneCIDR: '10.1.2.0/24'
      PrivateTwoCIDR: '10.1.3.0/24'
    NON-PROD:
      VPCCIDR: '10.2.0.0/16'
      PublicOneCIDR: '10.2.0.0/22'
      PublicTwoCIDR: '10.2.4.0/22'
      PrivateOneCIDR: '10.2.8.0/22'
      PrivateTwoCIDR: '10.2.12.0/22'

推荐阅读