【问题标题】:aws cloudformation how can I use conditions in the mapping block?aws cloudformation 如何在映射块中使用条件?
【发布时间】:2020-03-30 16:35:01
【问题描述】:

您好,我想在以下映射中使用条件语句:

Conditions:
  IsChinaSite:
    !Equals [!Ref SiteType, 'ChinaSite']


Mappings:
  Environment2Env:
    Develop:
      ENV: Dev
      ApiRegion: us-east-1  # There is no test CN data so we are going to keep using test US data in test envs
    Test:
      ENV: Qual
      ApiRegion: us-east-1
    Staging:
      ENV: Test
      ApiRegion: us-east-1
    Production:
      ENV: Prod
      FleetApiRegion: !If[IsChinaSite, ap-northeast-1, us-east-1]

如您所见,我正在尝试 sigv4 登录到不同的区域,具体取决于我网站 prod 版本中输入参数的值。但是after reading the docs 似乎您不能在模板的 Mappings 块中使用条件语句。我应该如何/在哪里检查IsChinaSite 条件?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    我想你可以混合使用 If 和 FindInMap 来获得你想要的结果

    Conditions:
      IsChinaSite:
        !Equals [!Ref SiteType, 'ChinaSite']
    
    
    Mappings:
      Environment2Env:
        Develop:
          ENV: Dev
          ApiRegion: us-east-1
        Test:
          ENV: Qual
          ApiRegion: us-east-1
        Staging:
          ENV: Test
          ApiRegion: us-east-1
        USProduction:
          Env: Prod
          ApiRegion: us-east-1
        ChinaProduction:
          ENV: Prod
          ApiRegion: ap-northeast-1
    
    Resources:
      Ec2Instance:
        Type: AWS::EC2::Instance
        Properties:
          AvailabilityZone:
            !If
              - IsChainSite
              - !FindInMap [Environment2Env, ChinaProduction, ApiRegion]
              - !FindInMap [Environment2Env, USProduction, ApiRegion]
    

    【讨论】:

    • 我也想过这样做,但它要求我为每个环境都有一个“env”和“CNenv”条目。如果我开始添加欧洲、非洲或亚洲地区,条目将会成倍增加。试图避免这种情况。
    • 在这种情况下,参数值SiteType 似乎本质上决定了区域。那么,也许这种抽象并没有增加价值?也许只是传递所需的区域。还是您每次都进入所需的区域?你总是可以使用!Ref AWS::Region
    • 不,如果是这样的话,我会使用 AWS::Region。有时“中国”站点部署在中国区域,但并非总是如此。
    【解决方案2】:

    最终不得不将区域拆分为每个环境下的自己的映射。结束了这个:

    Mappings:
      Environment2Env:
        Develop:
          ENV: Dev
        Test:
          ENV: Qual
        Staging:
          ENV: Test
        USProduction:
          Env: Prod
        ChinaProduction:
          ENV: Prod
    
      Develop:
        ROW: us-east-1
        ChinaSite: us-east-1
      Test:
        ROW: us-east-1
        ChinaSite: us-east-1
      Staging:
        ROW: us-east-1
        ChinaSite: us-east-1
      Production:
        ROW: us-east-1
        ChinaSite: ap-northeast-1
    

    这个解决方案对我有用,因为谢天谢地,我只使用 2 个维度(进行云形成映射所需的最大/最小维度)进行参数化,但那是一种愚蠢的运气。如果我需要在多个环境中部署多种类型的站点,并且每种类型的站点都有某种子类型,那么我会是 scr---d。我仍然认为这里的正确答案是可以支持 x^n 个维度的东西,所以我认为我不会接受自己的答案,但我想分享我对问题的解决方案。

    【讨论】:

      猜你喜欢
      • 2018-01-24
      • 2021-04-30
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多