问题描述
我需要我的 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