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

Cloudformation 的条件语句Glue 的子网

如何解决Cloudformation 的条件语句Glue 的子网

我需要我的 glue 作业根据它运行的环境使用特定的子网。下面的行 subnetId 抛出语法错误。我在 aws 的文档中读到,真/假评估可以用 !Ref 解决,问题似乎出在条件语法上。

subnetId: !If [!Ref UseProdCondition,!Ref PrivatesubnetAz2,!Ref PrivatesubnetAz3]

  glueJDBCConnection:
    Type: AWS::glue::Connection
    UseProdCondition: !Equals [!Ref "${AppEnv}","production"]
    Properties:
      CatalogId: !Ref AWS::AccountId
      ConnectionInput:
        ConnectionType: "JDBC"
        ConnectionProperties:
          USERNAME: !Ref Username
          PASSWORD: !Ref Password
          JDBC_CONNECTION_URL: !Ref glueJDBCStringTarget
          sslMode: 'required'
        PhysicalConnectionRequirements:
          AvailabilityZone:
            Ref: AvailabilityZone2
          SecurityGroupIdList:
            - Fn::GetAtt: glueJobSecurityGroup.GroupId
          subnetId: !If [!Ref UseProdCondition,!Ref PrivatesubnetAz3] 
        Name: !Ref JDBCConnectionName

解决方法

Condition 需要定义为一个单独的资源,稍后在特定资源中引用。

谢谢@MisterSmith!

AWSTemplateFormatVersion: 2010-09-09
Description: AWS Glue Spark Job

Conditions:
  UseProdCondition: !Equals [!Ref AppEnv,"production"]


 GlueJDBCConnection:
   Type: AWS::Glue::Connection
   Properties:
     CatalogId: !Ref AWS::AccountId
     ConnectionInput:
       ConnectionType: "JDBC"
       ConnectionProperties:
         USERNAME: !Ref Username
         PASSWORD: !Ref Password
         JDBC_CONNECTION_URL: !Ref GlueJDBCStringTarget
         sslMode: 'REQUIRED'
       PhysicalConnectionRequirements:
         AvailabilityZone:
           Ref: AvailabilityZone2
         SecurityGroupIdList:
           - Fn::GetAtt: GlueJobSecurityGroup.GroupId
         #SubnetId: !Ref PrivateSubnetAz2
         SubnetId: !If [UseProdCondition,!Ref PrivateSubnetAz2,!Ref PrivateSubnetAz3]
       Name: !Ref RTMIJDBCConnectionName

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