Externer Netzwerkzugang und private Konnektivität auf Google Cloud¶
In diesem Thema finden Sie Details zur Konfiguration der ausgehenden privaten Konnektivität zu einem externen Google Cloud-Service durch einen externen Netzwerkzugang. Die Hauptunterschiede zwischen den Konfigurationen für ausgehende öffentliche Konnektivität und ausgehende private Konnektivität bestehen darin, dass Sie bei der privaten Konnektivität die folgenden Operationen durchführen müssen:
Erstellen Sie einen privaten Konnektivitätsendpunkt. Für diesen Schritt ist die ACCOUNTADMIN-Rolle erforderlich.
Erstellen Sie die Netzwerkregel so, dass die Eigenschaft
TYPE
aufPRIVATE_HOST_PORT
eingestellt ist.
Kosten für ausgehende private Konnektivität¶
Sie zahlen für jeden privaten Konnektivitätsendpunkt zusammen mit den insgesamt verarbeiteten Daten. Die Preise für diese Artikel finden Sie in der Snowflake Service Consumption Table.
Sie können die Kosten für diese Element ermitteln, indem Sie bei der Abfrage von Abrechnungsansichten in den Schemata ACCOUNT_USAGE und ORGANIZATION_USAGE nach den folgenden Diensttypen filtern:
OUTBOUND_PRIVATELINK_ENDPOINT
OUTBOUND_PRIVATELINK_DATA_PROCESSED
Sie können zum Beispiel die Ansicht USAGE_IN_CURRENCY_DAILY abfragen und nach folgenden Diensttypen filtern.
Konfigurieren Sie den externen Zugriff auf das Netzwerk¶
Um ausgehende private Konnektivität mit externem Netzwerkzugriff auf Google Cloud zu konfigurieren, führen Sie die folgenden Schritte aus:
Rufen Sie in Snowflake die :doc:`/sql-reference/functions/system_provision_privatelink_endpoint`Systemfunktion auf, um einen privaten Konnektivitätsendpunkt in Ihrem Snowflake VNet bereitzustellen, damit Snowflake eine Verbindung zu einem externen Google Cloud-Service über private Konnektivität herstellen kann:
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( 'projects/<project_id>/regions/us-west2/serviceAttachments/cloud-func', 'my-hello-echo-function.com', );
Gehen Sie in der Google Cloud console zum Serviceanhang und akzeptieren Sie das neu verbundene Snowflake-Projekt.
Erstellen Sie in Snowflake eine Netzwerkregel und geben Sie die Eigenschaft
PRIVATE_HOST_PORT
an, um private Konnektivität zu ermöglichen:CREATE DATABASE IF NOT EXISTS external_access_db; CREATE OR REPLACE NETWORK RULE external_access_db.public.cloud_func_rule MODE = EGRESS TYPE = PRIVATE_HOST_PORT VALUE_LIST = ('my-hello-echo-function:443');
Erstellen Sie in Snowflake eine Integration für externen Zugriff, wobei Sie die Netzwerkregel aus dem vorherigen Schritt angeben:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION web_server_eai ALLOWED_NETWORK_RULES = (external_access_db.public.cloud_func_rule) ENABLED = TRUE;
Führen Sie in Snowflake den folgenden SQL-Anweisungen aus, um eine Funktion zu erstellen, die die Integration für den externen Zugriff verwenden kann:
CREATE OR REPLACE FUNCTION call_func(name VARCHAR) returns VARCHAR LANGUAGE JAVA EXTERNAL_ACCESS_INTEGRATIONS = (web_server_eai) HANDLER = 'UDFClient.call' AS $$ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.URI; import java.io.IOException; public class UDFClient { private HttpClient client; public UDFClient() { this.client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build(); } public String call(String name) throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder() .header("Content-Type", "application/json") .uri(URI.create("http://my-hello-echo-function?name=" + name)) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return String.valueOf(response.body()); } } $$;
Rufen Sie in Snowflake die Funktion auf, die Sie im vorherigen Schritt erstellt haben:
SELECT call_func("snowflake"); -- Returns "Hello snowflake!"
Wenn Sie den privaten Konnektivitätsendpunkt für die Integration des Zugriffs auf externe Netzwerke nicht mehr benötigen, rufen Sie die SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT-Systemfunktion auf.