AWS 外部存储卷的专用连接¶
本主题提供了设置与 AWS 外部卷的出站专用连接的配置详细信息。出站公共连接和出站专用连接的主要区别在于如何设置外部卷的 USE_PRIVATELINK_ENDPOINT
属性。
当外部卷配置为使用专用连接时,您与 AWS 云存储服务的连接将通过 AWS 内部网络进行。通过将外部卷配置为使用出站专用连接,可以阻止对存储账户的公共访问,从而为数据卸载操作增加额外的安全性。
有关使用外部卷为 Iceberg 表连接外部云存储的更多信息,请参阅 配置外部卷。
备注
您可以使用 AWS PrivateLink 访问 Snowflake 管理的 Iceberg 表,以及使用目录集成进行对象存储的 Iceberg 表。您当前无法使用专用连接访问使用其他目录集成的 Iceberg 表。
出站专用连接成本¶
您为每个专用连接端点以及处理的总数据量付费。有关这些项目的定价,请参阅 Snowflake 服务使用量表。
在 ACCOUNT_USAGE 和 ORGANIZATION_USAGE 架构中查询计费视图时,可以通过筛选以下服务类型来查看这些项目的成本:
OUTBOUND_PRIVATELINK_ENDPOINT
OUTBOUND_PRIVATELINK_DATA_PROCESSED
例如,您可以查询 USAGE_IN_CURRENCY_DAILY 视图并筛选这些服务类型。
注意事项¶
您可以为同一个云存储服务配置出站公共连接和出站专用连接。如果要这样做,请为出站公共连接创建专用外部卷,并指定 USE_PRIVATELINK_ENDPOINT = FALSE
。
语法更新¶
外部卷的 USE_PRIVATELINK_ENDPOINT
属性决定了是通过专用连接还是通过穿过公共网络来访问外部卷。要使用专用连接,请在创建或修改外部卷时设置 USE_PRIVATELINK_ENDPOINT = TRUE
。
CREATE EXTERNAL VOLUME 和 ALTER EXTERNAL VOLUME 的新语法如下:
CREATE OR REPLACE EXTERNAL VOLUME <ext_volume_name>
STORAGE_LOCATIONS =
(
(
NAME = 'my-s3-loc'
STORAGE_PROVIDER = 's3'
STORAGE_BASE_URL = 's3://<bucket>[/<path>/]'
STORAGE_AWS_ROLE_ARN = '<iam_role>'
USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
)
)
ALLOW_WRITES=true;
ALTER EXTERNAL VOLUME <ext_volume_name>
UPDATE STORAGE_LOCATION = '<storage_location_name>'
USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ];
DESCRIBE EXTERNAL VOLUME 命令包括 USE_PRIVATELINK_ENDPOINT
属性及其值。
配置外部卷访问¶
使用以下步骤使用出站专用连接将数据卸载到 AWS 上的外部卷:
调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数以在 Snowflake VNet 中配置专用端点,使 Snowflake 能够使用专用连接连接到外部 AWS 云存储。
如以下示例所示,您必须使用通配符 (
*
),而非指定单个 AWS S3 桶。使用通配符并不意味着所有 S3 桶都通过专用连接访问。只有由启用了 USE_PRIVATELINK_ENDPOINT 参数的外部卷引用的桶,才可以通过端点访问。USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( 'com.amazonaws.us-west-2.s3', '*.s3.us-west-2.amazonaws.com');
此函数将专用端点与主机名绑定,从而使外部卷可以使用专用端点连接到存储位置(只要对象上启用了 AWS PrivateLink)。
调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 函数。
当函数的输出包括
"status": "APPROVED
时,您从 Snowflake 到存储账户的连接将可以使用专用连接。在等待
"APPROVED"
状态时,您可以继续执行后续步骤。创建外部卷,确保将
USE_PRIVATELINK_ENDPOINT
属性设置为:code:TRUE
。例如:CREATE EXTERNAL VOLUME external_volume STORAGE_LOCATIONS = ( ( NAME = 'my-s3-loc' STORAGE_PROVIDER = 's3' STORAGE_BASE_URL = 's3://bucketinuswest2/' STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole' USE_PRIVATELINK_ENDPOINT = TRUE ) ) ALLOW_WRITES=TRUE;
使用 CREATE ICEBERG TABLE 命令创建引用外部卷的 Iceberg 表。例如:
CREATE ICEBERG TABLE rand_table (data string) BASE_LOCATION='table' EXTERNAL_VOLUME=external_volume CATALOG='snowflake';
专用端点具有
"APPROVED"
状态后,测试会将数据从 Snowflake 卸载到外部卷。
撤销端点¶
如果不再需要外部卷的专用连接端点,请取消设置外部卷的 USE_PRIVATELINK_ENDPOINT
属性,然后调用 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 系统函数。