通过CloudFormation配置带JdbcTargets的Glue::Crawler遇报错问题
首先回答你的核心疑问:是的,必须使用JdbcTarget来配置Glue Crawler爬取RDS Postgres数据。Glue Crawler针对Postgres这类JDBC兼容的关系型数据库,只能通过JdbcTarget类型指定爬取目标,没有其他内置目标类型可以替代这个场景。
接下来解决你遇到的InvalidInputException: Connection name cannot be equal to null or empty报错,通常有这几个排查和修复方向:
确认CloudFormation模板中JdbcTarget的ConnectionName配置正确
你需要确保模板里的JdbcTarget块明确指定了已存在的Glue Connection名称,且引用方式正确。如果是在同一个堆栈中创建Glue Connection,一定要用!Ref引用资源,同时添加DependsOn确保Crawler在Connection创建完成后再部署,避免资源未就绪导致的找不到连接名称问题。示例模板片段如下:Resources: MyGlueRDSConnection: Type: AWS::Glue::Connection Properties: ConnectionInput: ConnectionType: JDBC ConnectionProperties: JDBC_CONNECTION_URL: "jdbc:postgresql://<your-rds-endpoint>:5432/<db-name>" USERNAME: "<db-username>" PASSWORD: "<db-password>" PhysicalConnectionRequirements: SecurityGroupIdList: - !Ref MyRDSSecurityGroup SubnetId: !Ref MySubnet MyGlueCrawler: Type: AWS::Glue::Crawler Properties: Name: RecordsCrawler Role: !Ref MyGlueCrawlerRole DatabaseName: !Ref MyGlueDatabase Targets: JdbcTargets: - ConnectionName: !Ref MyGlueRDSConnection Path: "<db-name>.<schema-name>%" # 例如:mydb.public% DependsOn: MyGlueRDSConnection验证Glue Connection的有效性
确保你指定的Glue Connection本身配置正确且可用:- ConnectionType必须设置为
JDBC - JDBC_CONNECTION_URL严格遵循Postgres格式:
jdbc:postgresql://<endpoint>:5432/<db-name> - 配置的用户名和密码拥有目标RDS数据库的访问权限
- 安全组规则允许Glue服务访问RDS实例(如果Glue部署在VPC内,需确保子网和安全组的网络连通性)
- ConnectionType必须设置为
检查JdbcTarget的Path格式
Path参数必须遵循数据库名.模式名%的格式,比如你的Postgres数据库是salesdb、模式是public,那Path就要写salesdb.public%,格式错误也可能间接引发连接相关的报错。确认Crawler执行角色的权限
你的Glue Crawler角色需要具备以下关键权限:- 访问Glue Connection的权限(如
glue:GetConnection) - 访问RDS实例的权限(VPC内的RDS需确保角色有对应VPC资源的访问权限,且RDS安全组允许角色的ENI访问)
- 写入Glue Data Catalog的权限(如
glue:CreateTable)
- 访问Glue Connection的权限(如
内容的提问来源于stack exchange,提问作者villasv

