connecting-to-data-source

connecting-to-data-source

热门

创建并排查针对 JDBC 数据库(Oracle、SQL Server、PostgreSQL、MySQL、RDS)、Redshift、Snowflake 和 BigQuery 的 AWS Glue 连接。收集用户的连接提示信息,自动发现已有连接及候选 RDS/Redshift 资源,在 Secrets Manager 或通过 IAM 数据库身份认证注册凭据,配置 VPC 并进行连接测试。触发场景:连接数据库、配置 Glue 连接、注册数据源、连接 Snowflake/BigQuery/RDS、连接超时、测试连接、排查连接故障。切勿用于:数据搬运/迁移(请使用 ingesting-into-data-lake)、创建数据表(请使用 creating-data-lake-table)、查询数据(请使用 querying-data-lake)、目录检索/探索(请使用 exploring-data-catalog)或 SaaS 应用(Salesforce、ServiceNow、SAP、MongoDB、Kafka)。

2147Star
202Fork
更新于 2026/7/27
SKILL.md
只读
名称
connecting-to-data-source
描述

创建并排查针对 JDBC 数据库(Oracle、SQL Server、PostgreSQL、MySQL、RDS)、Redshift、Snowflake 和 BigQuery 的 AWS Glue 连接。收集用户的连接提示信息,自动发现已有连接及候选 RDS/Redshift 资源,在 Secrets Manager 或通过 IAM 数据库身份认证注册凭据,配置 VPC 并进行连接测试。触发场景:连接数据库、配置 Glue 连接、注册数据源、连接 Snowflake/BigQuery/RDS、连接超时、测试连接、排查连接故障。切勿用于:数据搬运/迁移(请使用 ingesting-into-data-lake)、创建数据表(请使用 creating-data-lake-table)、查询数据(请使用 querying-data-lake)、目录检索/探索(请使用 exploring-data-catalog)或 SaaS 应用(Salesforce、ServiceNow、SAP、MongoDB、Kafka)。

版本
1

连接到数据源

将外部数据源注册到 AWS Glue 中,以便下游 Skill(ingesting-into-data-lake)可以从中搬运数据。AWS Glue Connection 会存储单一数据源的网络配置、驱动程序及凭据引用。每个数据源仅需创建一次,即可跨多个任务复用。

核心理念

连接(Connection)是具名管道,而非数据流水线(Pipeline)。 本 Skill 旨在生成经过测试且可复用的 Glue 连接,本身并不负责搬运数据。

常用任务

连接建立后,你必须优先使用 AWS MCP 服务端工具执行命令 —— MCP 能提供参数校验、沙箱化执行以及审计日志。仅在 MCP 不可用时方可降级使用 AWS CLI。执行每一步前,你必须向用户解释当前操作。

工作流

1. 验证依赖项与上下文

  • 必须检查 AWS MCP 工具或 AWS CLI 是否可用;若缺失,需及时告知用户
  • 必须确认目标 AWS Region(区域),并运行 aws sts get-caller-identity 验证当前身份凭据

2. 分类数据源

询问用户要连接的数据源类型,或根据提示信息自行推断:

用户输入 / 表达... 数据源类型 连接类型 (Connection type) 参考文档
"Oracle", "SQL Server", "Postgres", "MySQL", "RDS <引擎>" JDBC 数据库 JDBC jdbc-setup.md
"Redshift", "我的集群", "我在 AWS 上的数据仓库" Redshift JDBC jdbc-setup.md (Redshift 章节)
"Snowflake" Snowflake SNOWFLAKE snowflake-setup.md
"BigQuery", "Google 分析数据仓库" BigQuery BIGQUERY bigquery-setup.md

如果用户提及 DynamoDB 或本地文件,请直接提示用户:AWS Glue 可以直接读取 DynamoDB,无需创建连接;而本地文件处理属于 ingesting-into-data-lake Skill 的本地上传(local-upload)工作流。

3. 收集连接提示信息

必须向用户询问可提供的提示信息 —— 绝不能盲目凭空猜测。

适用于所有数据源:

  • 期望的连接名称(小写字母,横线分隔,例如:oracle-prod-salessnowflake-analytics
  • 现有 Secrets Manager 密钥的名称/ARN,或是否需要新建密钥
  • 数据源是否可从 Glue VPC 连通(同 VPC、VPC 对等连接、VPN 或 Direct Connect)

JDBC: 主机名/Endpoint(端点)、端口、数据库名称、是否为 RDS/Aurora/自建数据库、是否开启 IAM 数据库认证(Aurora/RDS MySQL/Postgres)、是否需要 SSL。

Snowflake: 账号标识符(Account identifier)、Warehouse、Role(角色)、默认数据库、认证方式(密码、密钥对 key-pair 或 OAuth)。

BigQuery: GCP Project ID、区域位置(Location)、是否已提供 Service Account JSON 密钥文件。

4. 自动发现已有连接与候选数据源

在新建之前,先排查系统中已有的资源。

已有的 Glue Connection:

aws glue get-connections --filter ConnectionType=<TYPE> --region <REGION>

如果已存在匹配的连接,向用户确认后直接跳至步骤 7。

当前账号下的候选数据源(仅限 JDBC/Redshift):

  • RDS: aws rds describe-db-instances
  • Aurora: aws rds describe-db-clusters
  • Redshift: aws redshift describe-clusters

将搜索到的候选资源列出供用户选择。详见 discovery.md

5. 注册凭据

必须优先推荐使用 AWS Secrets Manager,而非明文密码。在支持的场景下(Aurora/RDS MySQL、PostgreSQL 以及 Redshift),你应当首选 IAM 数据库身份认证。详见 credential-security.md

  • 在新建 Secrets Manager 密钥前,你必须获得用户的明确确认
  • 绝对不能在对话框或日志中写入明文凭据
  • 如果使用 IAM 数据库认证,则无需存储 Secret 密钥

6. 创建 Glue 连接

参考对应数据源的文档来配置连接属性:

aws glue create-connection --connection-input '<JSON>' --region <REGION>

私网数据源必须包含 PhysicalConnectionRequirements(包括 SubnetId、SecurityGroupIdList、AvailabilityZone)。详见 network-setup.md

7. 测试连接

交付前你必须完成测试。测试分为两个阶段:快速 API 校验,以及引擎级验证。

阶段 A:Glue TestConnection(网络与凭据基础校验)
aws glue test-connection --connection-name <NAME> --region <REGION>

该步骤验证 Glue 是否能够正常连通数据源并完成身份认证。但它不能保证连接能在用户后续打算使用的查询引擎中实现端到端跑通。

阶段 B:引擎级深度验证

TestConnection 通过后,通过该连接运行一条极简查询,验证其与目标引擎的兼容性:

  • Glue ETL(默认): 运行一个冒烟测试 Glue Job,通过该连接读取 1 行数据。详见 troubleshooting.md
  • Athena: 如果用户计划通过 Athena 联邦连接器(Federated connector)查询,通过 Athena 连接运行一条 SELECT 1,确认基于 Lambda 的连接器能够连通数据源。
  • Glue Crawler(爬虫): 如果用户计划爬取数据源元数据,针对单张表运行一次测试爬取。

阶段 B 能捕获 TestConnection 容易遗漏的潜在隐患:任务运行时驱动兼容性、Catalog 配置、Spark 层面的序列化问题,以及引擎特定的认证流程(例如:Snowflake 的 SNOWFLAKE 连接类型适用于 ETL 任务,但无法通过 JDBC 爬虫工作)。

两阶段测试均成功后,告知用户该连接已就绪,可在 ingesting-into-data-lake 中使用。若任一阶段失败,进入步骤 8。

8. 故障排查(仅在测试失败时触发)

按以下顺序依次诊断:网络、凭据、驱动程序。详见 troubleshooting.md

约束条件:

  • 在排查凭据问题前,你必须先检查 VPC 路由、安全组(Security Group)和 S3 VPC Endpoint
  • 必须确认 Glue 角色(IAM Role)具备读取 Secrets Manager 密钥的权限
  • 未经用户确认,你绝对不能擅自更换/轮换凭据

参数路由规则

  • 未传参数:按步骤 1 至 7 交互式推进
  • 传入数据源类型关键字(例如 snowflakeoracle):自动填入类型并直接跳至步骤 2
  • 传入已有连接名称:直接跳至步骤 7(测试),测试失败则进入步骤 8
  • 传入主机名(Hostname)或 RDS Endpoint:自动填入候选资源并跳至步骤 4

踩坑指南

  • AWS Glue 的 SNOWFLAKE 连接类型与针对 Snowflake 配置的 JDBC 类型不同。对 Spark ETL 任务,你必须使用 SNOWFLAKE 类型,切勿使用 JDBC。
  • 连接名称一旦创建即无法修改,请谨慎命名。
  • PhysicalConnectionRequirements.AvailabilityZone 必须与子网所在的可用区(AZ)严格匹配,否则连接将在任务运行时(而非创建时)报错。
  • IAM 数据库身份认证 Token 会在 15 分钟内过期。Glue Job 会在每次建立连接时自动生成新 Token,切勿缓存。
  • 私网数据源连接所使用的 VPC 中必须存在 S3 VPC Gateway Endpoint(网关终端节点)。若缺失,Glue Job 将无法读取脚本或将结果写入 S3。

常见错误排查

错误信息 可能原因 解决办法
Connect timed out VPC 路由缺失、安全组(SG)规则未放行或缺少 NAT 网关 参见 troubleshooting.md
Access denied for user / ORA-01017 凭据错误、缺少 Secrets Manager 访问权限或 IAM 数据库认证配置有误 参见 troubleshooting.md
No suitable driver found 未设置自定义驱动 JAR 包或驱动类名(Class Name)填写错误 参见 troubleshooting.md
SSL handshake failed Glue 与数据源之间的 JDBC_ENFORCE_SSL 参数不匹配 参见 troubleshooting.md
UnableToFindVpcEndpoint 缺少 S3 VPC 终端节点 在该连接所属的 VPC 内创建 S3 Gateway Endpoint

参考文档