微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloudformation 将字符串转换为具有条件

如何解决Cloudformation 将字符串转换为具有条件

下面是我的 cloudformation 模板。我想将 aws:SourceVpc 转换为资源策略文档中的列表。我尝试使用溢出但 cft 低于错误

无效的政策文件。请检查策略语法并确保 Principals 有效。 (服务:AmazonApiGateway;状态代码:400;错误代码:BadRequestException;请求 ID:xxxxx;代理:null)

devl 和 sdbx 也有 1 个值,而其他的 acnt 和 acpt 在映射中有两个值,如何做到这一点。请提出建议。

输出应如下所示。 aws:SourceVpc: ["vpc-7830jkd","vpc-a1236"]

Mappings:
 vpcid:
us-east-1:
  sdbx: "vpc-1234"
  devl: "vpc-2345"
  acpt: "vpc-7830jkd,vpc-a1236"
us-east-2:
  acnt: "vpc-a1236,vpc-7830jkd"

Parameters:
  Env:
   Type: String

Resources:
apigateway:
  Type: "AWS::ApiGateway::RestApi"
    Properties:
   Name: mygateway
  EndpointConfiguration:
    Types:
      - "PRIVATE"
  Policy: !Sub
    - |-
      {
        "Version": "2012-10-17","Statement": [
          {
            "Effect": "Allow","Principal": "*","Action": "execute-api:Invoke","Resource": [
              "execute-api:/*"
            ]
          },{
            "Effect": "Deny","Resource": [
              "execute-api:/*"
            ],"Condition": {
              "StringNotEquals": {
                "aws:SourceVpc": !Split [",","${myappid}"]
              }
            }
          }
        ]
      }
    - { myappid: !FindInMap [ vpcid,!Ref "AWS::Region",!Ref "Env" ] }

解决方法

输出应如下所示。 aws:SourceVpc: ["vpc-7830jkd","vpc-a1236"]

遗憾的是,您不能这样做。 CFN 能做的事情非常有限,你想要的东西用普通的 CFN 根本无法实现。您必须修改您的地图并单独提供所有 vpc id,而不是将列表与单个值混合在一起。

另一种方式是通过开发 CFN macrocustom resource

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。