Cloudformation模板中的嵌套映射

时间:2019-06-11 13:28:56

标签: amazon-web-services amazon-cloudformation

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

texts_ = [[text_list[i-1] for i in l] for l in index_list]

我可以使用[['this', 'is', 'my', 'text', 'and'], ['it', 'should', 'be'], ['awesome', '.']] 来获取值。

但是,我想根据 PROD NON-PROD 环境使用不同的CIDR范围。在这种情况下,我的映射将是:

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'

当然,cloudformation不允许这种映射。有没有一种方法可以定义此映射?我已经提到了这个post,但没有帮助

2 个答案:

答案 0 :(得分:1)

一种选择可能是将映射平坦化一个级别,例如

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'

答案 1 :(得分:0)

一种方法是您可以创建2个JSON格式的属性文件,其中1个具有PROD范围,其他具有NON PROD范围。然后,可能可以让您的代码根据要部署的环境读取属性文件,选择合适的文件,读取值,然后在部署时将其传递给CF模板。因此,与其对模板中的IP范围进行硬编码,还可以对其进行参数化,然后从代码传递给模板的输入参数中读取它们。