AWS PrivateLink 和 Snowflake Open Catalog¶
本主题介绍 AWS PrivateLink 如何配置为使用入站专用连接将 Snowflake Open Catalog 账户直接连接到查询引擎。
先决条件¶
您的 Snowflake Open Catalog 账户托管在 AWS 上。
您拥有必要的权限,可以通过 Open Catalog 账户的专用连接 URL 来配置您的 AWS DNS 服务。有关指导,请参阅 Snowflake 社区中的 如何将 AWS DNS 服务 (Route 53) 配置为通过 PrivateLink 访问 Snowflake (https://community.snowflake.com/s/article/How-to-configure-the-AWS-DNS-service-Route-53-to-access-Snowflake-via-a-PrivateLink)。
第 1 步:启用 AWS PrivateLink。¶
在此过程中,您可以为 Open Catalog 账户启用 AWS PrivateLink。此配置允许查询引擎通过专用连接连接到 Open Catalog。您将需要 Amazon Web Services (AWS) 账户的 12 位数标识符和包含联合用户访问凭据的联合令牌值。
要获取联合令牌值,请使用 AWS CLI 执行以下命令并将该值复制到文本编辑器中:
aws sts get-federation-token --name sam
登录 Snowflake Open Catalog。
在导航菜单中,选择 Settings。
选择 *Authorize。
在 Authorize Private Link 对话框中,为账户启用专用连接:
在 ID 字段中,输入 Amazon Web Services (AWS) 账户的 12 位数标识符。
对于 Federated token,输入您复制到文本编辑器的联合令牌值。
选择 Save。
第 3 步:检索 Open Catalog 账户设置¶
检索这些设置,您稍后需要这些设置来创建和配置 VPC 端点和 VPC 网络。
登录 Snowflake Open Catalog。
在导航菜单中,选择 Settings。
在“Settings”页面上,将以下设置的值复制到文本编辑器中:
PrivateLink 账户 URL
无区域 PrivateLink 账户 URL
PrivateLink OCSP URL
无区域 PrivateLink OCSP URL
VPCE 服务 ID
在 创建和配置 VPC 端点 (VPCE)、配置 VPC 网络 和 通过 AWS PrivateLink 连接到 Open Catalog 时,可以粘贴这些值。
有关每项设置的描述,请参阅 Snowflake 文档中的 SYSTEM$GET_PRIVATELINK_CONFIG 系统函数的返回值。在本主题中,账户设置的名称采用 JSON 格式。
备注
请记住,在适用的情况下,描述指的是 Snowflake 账户,但您的值实际上是针对 Snowflake Open Catalog 账户的。例如,privatelink-account-url
是 Snowflake Open Catalog 账户的 URL。
可选:要检索采用 JSON 格式的值,请 为 Open Catalog 创建 Snowflake CLI 连接,然后调用 SYSTEM$GET_PRIVATELINK_CONFIG 系统函数。
在 Snowflake 文档中,
privatelink-vpce-id
对应的是 Open Catalog 中的 VPCE 服务 ID。
第 4 步:创建和配置 VPC 端点¶
在此过程中,您在 AWS VPC 环境中创建和配置相应的 VPC 端点 (VPCE)。
备注
如果您已经为 Snowflake 账户创建了 VPC 端点,并且该账户与 Open Catalog 账户处于同一个部署状态,则无需为 Open Catalog 账户创建新的 VPC 端点。您可以选择跳过此步骤。
有关说明,请参阅 Snowflake 文档中的 创建和配置 VPC 端点 (VPCE),从第 2 步开始。
第 5 步:配置 VPC 网络¶
要配置 VPC 网络,请在 DNS 服务中创建 CNAME 记录,以将相应的端点值从 专用连接的 Open Catalog 账户设置 解析为 VPC 端点的 DNS 名称。
有关说明,请参阅 Snowflake 文档中的 配置 VPC 网络。请记住,这些说明适用于 Snowflake,因此其中提到的某些功能不适用于 Open Catalog。例如,regionless-snowsight-privatelink-url
适用于 Snowsight,Open Catalog 不支持该功能。
如需 DNS 配置方面的其他帮助,请与内部 AWS 管理员联系。
第 6 步:通过 AWS PrivateLink 连接到 Open Catalog¶
要注册服务连接并将查询引擎通过 AWS PrivateLink 连接到 Snowflake Open Catalog,请使用以下代码:
import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('iceberg_lab') \ .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'opencatalog') \ .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \ .config('spark.sql.catalog.opencatalog.type', 'rest') \ .config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_privatelink_account_url>/polaris/api/catalog') \ .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \ .config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \ .config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \ .getOrCreate()
参数¶
备注
确保将 DNS 服务设置为与您为 <open_catalog_account_identifier>
指定的值相匹配。
参数 |
描述 |
---|---|
|
指定要连接的目录的名称。 |
|
指定外部云存储提供商的 Maven 坐标:
|
|
指定服务主体要使用的客户端 ID。 |
|
指定服务主体要使用的客户密钥。 |
|
指定 URL,以使用 AWS PrivateLink 或 Azure 专用链接连接到 Snowflake 账户。
|
|
指定授予服务主体的主体角色。 |
第 7 步(可选):为 Snowflake 创建目录集成¶
如果您使用 Snowflake 查询 Open Catalog 管理的表,请使用专用 IP 地址为 Snowflake 创建目录。要创建此目录集成,Snowflake 账户必须与 Open Catalog 账户处于相同的部署状态。
有关示例,请参阅 Snowflake 文档中的 示例:使用专用 IP 地址的目录集成 <https://docs.snowflake.com/en/user-guide/tables-iceberg-open-catalog-query#example-catalog-integration-that-uses-a-private-ip-address>
_。
备注
您还可以为 Snowflake Open Catalog UI 配置专用连接。此配置与为 Open Catalog 账户配置专用连接相结合,允许您通过专用连接(而不是通过公共互联网)访问 Open Catalog UI。
要配置此访问权限,请参阅 为 Snowflake Open Catalog UI 配置专用连接。