amazon-web-services - 我们如何在AWS Cloudformation中编写If(条件)do(X和Y)else(do A和B)

标签 amazon-web-services aws-cloudformation

目前我有一个条件:

Conditions:
    IsBeta: !Equals [!Ref Stage, "beta"]

映射:

Mappings:
  ABCMap:
    beta:
      Role1: "arn:aws::iam::...",
      Role1-Test: "arn:aws::iam::...",
      Role2: ""arn:aws::iam::...",
      Role2-Test: "arn:aws::iam::..."
    prod:
      Role1: "arn:aws::iam::...",
      Role2: "arn:aws::iam::..."

以及资源策略的一部分:

ResourcePolicy:
    CustomStatements:
    - Action: ['execute-api:Invoke']
        Effect: Allow
        Principal:
        AWS:
            - !FindInMap [ IAMRoleMap, !Ref Stage, Role1 ]
            - !FindInMap [ IAMRoleMap, !Ref Stage, Role2 ]
            - Fn::If:
                - IsBeta
                - - !FindInMap [ ABCMap, !Ref Stage, Role1-Test ]
                - {Ref: 'AWS::NoValue'}
            - Fn::If:
                - IsBeta
                - - !FindInMap [ ABCMap, !Ref Stage, Role2-Test ]
                - {Ref: 'AWS::NoValue'}
        Resource: "arn::aws..."

如何将它们组合成一个“如果”?或者有没有更好的方式来表达,如果阶段是beta,我只需要在资源策略中拥有Role1-Test和Role2-Test?

最佳答案

您应该将所有原则放在一个大的 Fn::If 中:

ResourcePolicy:
    CustomStatements:
    - Action: ['execute-api:Invoke']
        Effect: Allow
        Principal:
          AWS:
            Fn::If:
                - IsBeta
                - - !FindInMap [ IAMRoleMap, !Ref Stage, Role1 ]
                  - !FindInMap [ IAMRoleMap, !Ref Stage, Role2 ]
                  - !FindInMap [ ABCMap, !Ref Stage, Role1-Test ]
                  - !FindInMap [ ABCMap, !Ref Stage, Role2-Test ]
                - - !FindInMap [ IAMRoleMap, !Ref Stage, Role1 ]
                  - !FindInMap [ IAMRoleMap, !Ref Stage, Role2 ]
            Resource: "arn::aws..."

关于amazon-web-services - 我们如何在AWS Cloudformation中编写If(条件)do(X和Y)else(do A和B),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66700714/

相关文章:

powershell - 如何访问 Get-EC2Instance 的 RunningInstance 方法中的列表值?

amazon-web-services - AWS服务器处于停止状态时显示的默认消息或图像

json - 亚马逊上嵌套堆栈中的参数

amazon-ec2 - 如何配置AWS云9环境?

amazon-web-services - 资源处理程序返回消息 : "Invalid request provided: Rules are unsupported for Network Load Balancer listeners

django - 如何在 AWS Beanstalk 上安装 cffi 包

java - 是否可以在 Amazon S3 上压缩目录,而不是下载 -> zip -> 上传

amazon-web-services - 在 API 网关部署上更新阶段变量时如何避免停机?

amazon-web-services - 如何在azure devops CI/CD管道中动态创建s3存储桶

amazon-dynamodb - CloudFormation 坚持认为我的 DynamoDB 创建 JSON 无效..但我不明白如何