如果我创建与 RDS Aurora 实例的 Glue JDBC 连接,该连接将不起作用并出现以下错误:
InvalidInputException: Unable to resolve any valid connection
。在AWS控制台中检查后,我发现CloudFormation没有设置Glue连接的密码。因此,连接不起作用。
这是用于创建 Glue 连接的 CloudFormation 脚本:
GlueConn:
Type: "AWS::Glue::Connection"
Properties:
CatalogId: 6256161516
ConnectionInput:
Name: test-glue-conn
ConnectionProperties:
JDBC_CONNECTION_URL: "jdbc:postgresql://..." # Hidden for security
JDBC_ENFORCE_SSL: "false"
PASSWORD: password
USERNAME: username
ConnectionType: JDBC
Description: "Glue Conn. for SO"
PhysicalConnectionRequirements:
AvailabilityZone: us-east-1
SubnetId: ahbnr9ow3qhjojngovbme # Hidden for security
SecurityGroupIdList:
- jhwgq9748jhognjmovjo # Hidden for security
遵循https://stackoverflow.com/a/69474820/8992678给出的SO答案后,我在
AvailabilityZone
下添加了PhysicalConnectionRequirements
。另外,我使用 AWS CLI 来获取工作连接的详细信息,如 SO 上的建议。
运行 AWS CLI 获取 Glue 连接的详细信息后,我发现 AWS 在
KAFKA_SSL_ENABLED: "false"
下添加了一个新密钥 ConnectionProperties
。虽然如果我编辑此连接,我还无法在 AWS 控制台中看到密码,但我能够将之前的错误解决为新的错误消息 Failed to test connection test-conn due to FAILED status.
,这在后来的一些测试中导致了 Network error
。
我猜 CloudFormation 无法正确创建 JDBC 的 Glue 连接;也许这是 AWS 团队需要解决的新或旧错误。我将针对此问题提出 AWS 支持票证;将在收到他们的消息后更新此答案。
临时解决方案:同时,如果我使用 AWS CLI 使用相同的详细信息(包括密码)创建或更新 Glue 连接,那么它就可以工作。因此,我将在 CI/CD 中添加一个额外步骤,以在 CloudFormation 脚本之后运行 AWS CLI,作为临时解决方法,直到 CloudFormation 更好地支持它。
实际上,罪魁祸首是“PhysicalConnectionRequirements”中缺少“AvailabilityZone”。文档将其显示为可选,但事实并非如此。 AWS 控制台只是自动从您的子网中查找并设置它,而使用 Cloudformation 您可以提供它。
亚马逊回应:
“深入研究验证错误后,我发现该错误是由于缺少“AvailabilityZone”[1] 参数而不是密码而弹出的。此外,有趣的发现是,当我们在控制台上编辑连接并保存它时,连接详细信息现在自动填充为“AvailabilityZone”。这似乎是内部 API 调用,当从控制台调用时,会添加可能很重要的其余字段,我可以理解文档 [1] 建议“AvailabilityZone”是可选的。字段,但我相信它是必需的,并且在通过控制台创建连接时会根据您的子网详细信息自动填充。”