Microsoft Azure 上での外部ネットワークアクセスとプライベート接続¶
このトピックでは、 外部ネットワークアクセス を使用して、外部サービスへのアウトバウンドプライベート接続を設定するための構成の詳細を説明します。アウトバウンド・パブリック接続とアウトバウンド・プライベート接続の設定の主な違いは、プライベート接続の場合、以下の操作を行う必要があることです。
プライベート接続エンドポイントを作成します。このステップでは、 ACCOUNTADMIN ロールが必要です。
PRIVATE_HOST_PORT
プロパティを使用するネットワーク・ルールを作成します。このプロパティには、Azure URL とポート番号が含まれます。これにより、Snowflake から Microsoft Azure への接続が、パブリックインターネットを避けて Microsoft Azure 内部ネットワークを経由するようになります。
請求と価格設定¶
各プライベート・コネクティビティ・エンドポイントの料金は、処理されるデータ総量に応じて支払われます。これらのアイテムの価格については、 Snowflake Service Consumption Table をご参照ください。
外部ネットワークアクセスの構成¶
これらの手順は、 Microsoft Azure の外部ネットワーク・アクセスでアウトバウンド・プライベート接続を使用する場合に固有のものです。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出して、Snowflake VNet にプライベート接続エンドポイントをプロビジョニングし、Snowflake がプライベート接続を使用して外部サービスに接続できるようにします。
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( '/subscriptions/1111-22-333-4444-55555/resourceGroups/external-access/providers/Microsoft.Sql/servers/externalaccessdemo', 'externalaccessdemo.database.windows.net', 'sqlServer' );
Azure Portal で、Azure API Management リソースの所有者として、プライベートエンドポイントを承認します。詳細については、 Microsoft Azure Private Link ドキュメント をご参照ください。
データベース と スキーマ を作成し、ネットワーク・ルール、シークレット、プロシージャーを格納します。
CREATE DATABASE ext_network_access_db; CREATE SCHEMA secrets; CREATE SCHEMA network_rules; CREATE SCHEMA procedures;
ネットワークルール を作成し、プライベート接続を有効にするために
PRIVATE_HOST_PORT
プロパティを指定します。CREATE OR REPLACE NETWORK RULE ext_network_access_db.network_rules.azure_sql_private_rule MODE = EGRESS TYPE = PRIVATE_HOST_PORT VALUE_LIST = ('externalaccessdemo.database.windows.net');
シークレット を作成し、アクセス認証情報を安全に保存します。
CREATE OR REPLACE SECRET ext_network_access_db.secrets.secret_password TYPE = PASSWORD USERNAME = 'my-username' PASSWORD = 'my-password';
外部アクセス統合 を作成し、前のステップのネットワークルールを指定します。
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION azure_private_access_sql_store_integration ALLOWED_NETWORK_RULES = (ext_network_access_db.network_rules.azure_sql_private_rule) ALLOWED_AUTHENTICATION_SECRETS = (ext_network_access_db.secrets.secret_password) ENABLED = TRUE;
プロシージャ を作成し、外部サービスに接続します。
CREATE OR REPLACE PROCEDURE ext_network_access_db.procedures.connect_azure_sqlserver() RETURNS TABLE() LANGUAGE PYTHON RUNTIME_VERSION = 3.10 HANDLER = 'connect_sqlserver' EXTERNAL_ACCESS_INTEGRATIONS = (azure_private_access_sql_store_integration) SECRETS = ('cred' = ext_network_access_db.secrets.secret_password) IMPORTS=('@demo/pytds.zip') PACKAGES = ('snowflake-snowpark-python','pyopenssl','bitarray','certifi') AS $$ import pytds import certifi import _snowflake from snowflake.snowpark import types as T def connect_sqlserver(session): server = 'externalaccessdemo.database.windows.net' database = 'externalaccess' username_password_object = _snowflake.get_username_password('cred'); # Create a connection to the database with pytds.connect(server, database, username_password_object.username, username_password_object.password, cafile=certifi.where(), validate_host=False) as conn: with conn.cursor() as cur: cur.execute(""" SELECT O.OrderId, O.OrderDate, O.SodName, O.UnitPrice, O.Quantity, C.Region FROM Orders AS O INNER JOIN Customers AS C ON O.CustomerID = C.CustomerID;""") rows = cur.fetchall() schema = T.StructType([ T.StructField("ORDER_ID", T.LongType(), True), T.StructField("ORDER_DATE", T.DateType(), True), T.StructField("SOD_NAME", T.StringType(), True), T.StructField("UNIT_PRICE", T.FloatType(), True), T.StructField("QUANTITY", T.FloatType(), True), T.StructField("REGION", T.StringType(), True) ]) final_df = session.createDataFrame(rows, schema) return final_df $$;
外部サービスに接続するプロシージャを呼び出します。
CALL ext_network_access_db.procedures.connect_azure_sqlserver();
プライベート接続が必要な外部ネットワークアクセス構成ごとに、この手順を繰り返します。
外部ネットワークアクセス統合用のプライベート接続エンドポイントが不要になった場合は、 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT システム機能を呼び出します。