资讯详情

资讯详情

DataHub Glue 连接器:跨账号访问、平台实例对齐与资源链接(Resource Link)摄入实战指南

DataHub Glue 连接器跨账号访问、平台实例对齐与资源链接Resource Link摄入实战指南【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本篇围绕 DataHub 的glue摄入源AWS Glue Data Catalog 连接器展开完整覆盖其官方文档metadata-ingestion/docs/sources/glue/glue_pre.md中的核心内容Glue 元数据摄入范围、IAM 权限清单、基于 STS AssumeRole 的跨账号访问、catalog_id跨账号目录访问、catalog_to_platform_instance目录到平台实例的映射以及 Lake Formation 资源链接的 schema 解析。读完本文你将能够正确配置 Glue 摄入配方recipe、为摄入角色规划最小权限集、在多账号场景下保证同一张表的 URN 唯一且一致并能理解每个配置项在源码中的落地位置。1. Glue 连接器摄入什么glue模块将 AWS Glue Data Catalog 的元数据摄入 DataHub面向生产级摄入流程。根据官方文档该插件提取以下内容Glue catalog 中的表Tables每张表关联的列类型Column types表元数据如 owner、描述与 parametersGlue 作业Jobs及其组件转换transformations、数据源data sources和数据汇data sinks由 Glue 作业引用的 JDBC 数据源如 PostgreSQL、MySQL、Redshift的上游血缘。连接器在源码中由 GlueSource 实现其声明的能力与文档描述一一对应见 glue.py 能力声明能力说明摘自源码 capability 注解PLATFORM_INSTANCE默认启用DOMAINS通过domain配置字段支持DELETION_DETECTION通过有状态摄入stateful ingestion默认启用LINEAGE_COARSE默认启用LINEAGE_FINE通过emit_storage_lineage配置字段支持OPERATION_CAPTURE默认启用来自 Glue 表的创建/最后修改时间戳CONTAINERS默认启用子类型为Database概念映射上Glue Database 对应 DataHub Container子类型DatabaseGlue Table 对应 Dataset子类型TableGlue Job 对应 DataFlow作业内的转换/数据源/数据汇对应 DataJob 与 Dataset概念映射表见 README。最简配方如 glue_recipe.yml 所示source: type: glue config: # Coordinates aws_region: my-aws-region sink: # sink configs2. IAM 权限清单运行摄入前需确保网络可达、凭据有效、且拥有文档要求的读取权限。文档给出了三组最小权限策略2.1 数据集摄入所需权限{ Effect: Allow, Action: [ glue:GetDatabases, glue:GetTables ], Resource: [ arn:aws:glue:$region-id:$account-id:catalog, arn:aws:glue:$region-id:$account-id:database/*, arn:aws:glue:$region-id:$account-id:table/* ] }2.2 作业摄入extract_transforms: True额外所需权限{ Effect: Allow, Action: [ glue:GetDataflowGraph, glue:GetJobs, glue:GetConnection, s3:GetObject ], Resource: * }文档特别指出glue:GetConnection仅在 Glue 作业引用了命名连接named connections即在 Glue 控制台配置的 JDBC 连接时才需要如果作业只使用内联inline连接参数可以不需要该权限。从源码可以印证这一说法GlueSource._resolve_glue_connection 中调用glue_client.get_connection(...)而s3:GetObject则对应作业脚本的下载逻辑 get_dataflow_script。2.3 数据集 Profiling 额外所需权限{ Effect: Allow, Action: [ glue:GetPartitions ], Resource: * }3. 跨账号访问Cross-Account AccessGlue 连接器通过 AWS STS AssumeRole 支持跨账号访问允许运行在一个 AWS 账号中的 DataHub 摄入另一个 AWS 账号里 Glue catalog 的元数据。3.1 目标账号创建可被 Assume 的 IAM 角色在目标账号Glue catalog 所在账号创建一个 IAM 角色附加第 2 节中的 Glue 权限策略并配置信任策略允许源账号 assume 该角色{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: { AWS: arn:aws:iam::SOURCE-ACCOUNT-ID:role/DataHubExecutionRole }, Action: sts:AssumeRole, Condition: { StringEquals: { sts:ExternalId: your-unique-external-id } } } ] }3.2 摄入配方配置aws_config.aws_role简单 ARN 格式source: type: glue config: aws_config: aws_role: arn:aws:iam::TARGET-ACCOUNT-ID:role/DataHubGlueReadRole带 External ID出于安全考虑推荐source: type: glue config: aws_config: aws_role: RoleArn: arn:aws:iam::TARGET-ACCOUNT-ID:role/DataHubGlueReadRole ExternalId: your-unique-external-id角色链Role chaining按顺序 assume 多个角色source: type: glue config: aws_config: aws_role: - arn:aws:iam::INTERMEDIARY-ACCOUNT-ID:role/IntermediateRole - RoleArn: arn:aws:iam::TARGET-ACCOUNT-ID:role/DataHubGlueReadRole ExternalId: your-unique-external-id源码印证aws_role定义在 AwsConnectionConfig类型为Optional[Union[str, List[Union[str, AwsAssumeRoleConfig]]]]即支持字符串或字符串/对象混合列表对象格式对应 AwsAssumeRoleConfigRoleArn 可选ExternalId且作为PermissiveConfigModel允许透传 boto3 STS 的额外参数如文档所述的RoleSessionName、DurationSeconds、Policy。实际执行时assume_role() 构造 STS 客户端并发起assume_role默认注入RoleSessionNameDatahubIngestionSource再叠加角色对象中的字段AwsConnectionConfig.get_session() 会先检测当前运行环境ECS/EKS/Lambda/App Runner/Beanstalk/EC2 等见 detect_aws_environment仅当目标角色与当前身份不同时才真正执行 assume并按列表顺序循环串联assume角色链循环这与文档中“assume multiple roles in sequence”的语义一致临时凭据会被缓存并在到期前不足 5 分钟时自动刷新_should_refresh_credentials避免长摄入任务中途凭据失效。3.3 跨账号 Catalog 访问不 assume 角色catalog_id对于访问另一个账号中的特定 Glue catalog无需 assume 角色可使用catalog_id参数source: type: glue config: catalog_id: 123456789012 # Target accounts AWS account ID这适用于“账号 A 已将 Glue catalog 共享给账号 B而摄入运行在账号 B、需要访问账号 A 的 catalog”的场景。catalog_id字段定义在 GlueSourceConfig描述为“The aws account id where the target glue catalog lives. If None, datahub will ingest glue in aws callers account.”从源码看catalog_id会作为CatalogId参数透传给分页 APIget_all_databases 与 get_tables_from_database 中的paginator.paginate(DatabaseName..., CatalogIdself.source_config.catalog_id)作业脚本读取则不受其影响——get_all_jobs 的注释明确说明 boto3 的get_jobs不支持跨账号因此跨账号场景下作业摄入仍发生在运行账号内。3.4 平台实例platform instance注意事项文档区分了两种情形不使用 platform instance如果从不同账号摄入同一个 Glue catalog 而不设置platform_instanceDataHub 会将它们识别为相同实体只产生一个 dataset使用 platform instance使用不同的platform_instance值会创建具有不同 URN 的独立 dataset 实体适用于追踪同一数据经由不同访问路径的流转。4.catalog_to_platform_instance将目录映射到平台实例单个platform_instance会把同一摄入运行中的所有表打上同一个 instance 戳。当一次摄入看到了不同账号拥有的表时例如跨账号catalog_id摄入或共享进你 catalog 的 Lake Formation 表就会出现问题这些表被打上的是摄入账号的 instance其 URN 与属主账号自己的 Glue 摄入产生的 URN 不一致同一张表在 DataHub 中出现两次。catalog_to_platform_instance用于将每个拥有方 catalog 映射到属主所使用的platform_instance以及可选的env每张表按其所属 catalog 打上戳。键是该 catalog 的 ARN authorityarn:aws:glue:{region}:{account-id}——账号 区域因为同一账号在两个区域是两个不同的 catalogsource: type: glue config: aws_region: us-east-1 platform_instance: ingestion_acct # fallback for tables with no catalog mapping catalog_to_platform_instance: arn:aws:glue:us-east-1:111122223333: platform_instance: domain_a env: PROD arn:aws:glue:us-east-1:444455556666: platform_instance: domain_b未在映射中列出的表回退到 source 自身的platform_instance/env。对于 Lake Formation 资源链接连接器还会额外产出一条指向属主表 URN 的表级上游血缘边经同一映射解析使共享表“接回”其来源而不是像重复实体一样出现。源码印证字段定义与文档语义一致catalog_to_platform_instance其 description 额外说明了键格式中 partition 的取值商业区aws、GovCloudaws-us-gov、中国区aws-cn、隔离区aws-iso*并指出该键与 Spark/OpenLineage 的connections映射使用相同键键的校验在 check_catalog_arn_keys 中完成先用正则 GLUE_CATALOG_ARN_PATTERN 校验arn:{partition}:glue:{region}:{12位账号}形状再通过 _aws_partition_for_region委托 botocore 的get_partition_for_region而非手写区域前缀表校验 partition 与 region 是否匹配——两者任一不满足都会抛出带非法键列表的ValueError运行时解析在 _resolve_platform_instance按表返回的CatalogId拼出 ARN authority 查映射表命中则覆盖platform_instance/env映射值为None的字段保留 source 默认值未命中则回退。表实体_gen_table_wu与作业 DAG 中的 Glue 表节点process_dataflow_node支持作业通过from_catalog(catalog_id...)携带的catalog_id都走同一条解析路径保证两侧 URN 一致。5. 资源链接Resource Link的 Schema 解析resolve_resource_link_schema资源链接只是一个指针因此在 catalog 中不携带自身 schema。默认resolve_resource_link_schema: true下连接器会用属主表的 schema 填充链接的 schema使列信息在摄入的 dataset 上可见。解析顺序是先读 DataHub属主账号已摄入时不产生额外 AWS 调用否则对目标做跨账号glue:GetTable要求对共享表有glue:GetTable权限。两个来源都不可用时链接保持无 schema其列仍可通过上游血缘边触达。设置resolve_resource_link_schema: false可使资源链接始终无 schema。源码印证均在 glue.py配置字段 resolve_resource_link_schema 默认Truedescription 与文档完全对应解析主流程 _resource_link_schema 会深拷贝属主 schema避免污染从 DataHub 读回的 aspect 对象并改写schemaName为链接本地表名两级回退在 _resolve_owner_schema先 _resource_link_schema_from_datahubctx.graph.get_schema_metadata(owner_urn)GMS/网络错误不中断运行再 _resource_link_schema_from_glueglue_client.get_table(CatalogId..., ...)权限不足时降级为无 schema 并告警摄入报告 GlueSourceReport 设有三个计数器num_resource_link_schema_from_datahub、num_resource_link_schema_from_glue、num_resource_link_schema_unresolved用于观测上述回退的实际命中分布表级上游边COPY 类型由 _resource_link_owner_upstreams 生成与存储血缘合并进同一个UpstreamLineageaspectget_lineage_if_enabled 是数据集UpstreamLineage的唯一出口避免两个全量替换型 aspect 相互覆盖。6. 验证依据单元测试与黄金文件跨账号与平台实例行为有专门的测试与期望输出可作为本文配置说明的可验证依据测试主文件test_glue_source.py测试桩见 test_glue_source_stubs.py跨账号摄入的黄金输出glue_mces_cross_account_golden.json平台实例相关的黄金输出glue_mces_platform_instance_golden.json其余黄金文件表/列血缘、视图、profiling、Lake Formation 标签、Delta schema 等位于 tests/unit/glue/可用于对照各配置项的完整 MCE 输出形态。7. 小结与配置速查配置项默认值作用源码位置aws_config.aws_roleNoneSTS assume 角色支持字符串/对象/列表角色链aws_common.py#L287-L291catalog_idNone跨账号 catalog 访问不 assume 角色glue.py#L303-L306platform_instance/env—全局平台实例/环境戳GlueSourceConfigcatalog_to_platform_instance{}按 catalog ARN authority 映射 instance/env未命中回退 source 值glue.py#L398-L411resolve_resource_link_schematrue资源链接 schema 的“DataHub 优先、跨账号 GetTable 回退”解析glue.py#L354-L366适用前提与限制以上均以当前仓库中metadata-ingestion的实现为准跨账号 catalog 访问要求目标账号已按 AWS 侧要求完成 catalog 共享且 boto3get_jobs不支持跨账号作业相关能力仍运行在摄入账号内catalog_to_platform_instance的键必须严格为arn:{partition}:glue:{region}:{account}形式且 partition 与 region 匹配否则在配方加载阶段即报错。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →