Google Cloud 에서의 외부 네트워크 액세스 및 비공개 연결¶
이 항목에서는 :doc:`외부 네트워크 액세스</developer-guide/external-network-access/external-network-access-overview>`를 통해 Google Cloud 외부 서비스에 대한 아웃바운드 비공개 연결을 설정하는 구성 세부 정보를 제공합니다. 아웃바운드 공용 연결과 아웃바운드 비공개 연결 구성의 주요 차이점은 비공개 연결의 경우 다음 작업을 수행해야 한다는 점입니다.
비공개 연결 엔드포인트를 생성합니다. 이 단계에는 ACCOUNTADMIN 역할이 필요합니다.
TYPE
속성이 :code:`PRIVATE_HOST_PORT`로 설정되도록 네트워크 규칙을 만듭니다.
아웃바운드 비공개 연결 비용¶
처리된 총 데이터와 함께 각 비공개 연결 엔드포인트에 대한 비용을 지불합니다. 이러한 품목의 가격은 Snowflake서비스 사용 테이블 을 참조하십시오.
ACCOUNT_USAGE 및 ORGANIZATION_USAGE 스키마에서 청구 뷰를 쿼리할 때 다음 서비스 유형을 필터링하여 이러한 항목의 비용을 탐색할 수 있습니다.
OUTBOUND_PRIVATELINK_ENDPOINT
OUTBOUND_PRIVATELINK_DATA_PROCESSED
예를 들어 USAGE_IN_CURRENCY_DAILY 뷰를 쿼리하고 이러한 서비스 유형을 필터링할 수 있습니다.
외부 네트워크 액세스 구성¶
|google-cloud|에서 외부 네트워크 액세스를 사용하여 아웃바운드 비공개 연결을 구성하려면 다음 단계를 수행합니다.
Snowflake에서 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 Snowflake VNet의 비공개 연결 엔드포인트를 프로비저닝함으로써 Snowflake가 비공개 연결을 사용해 Google Cloud 외부 서비스에 연결할 수 있도록 합니다.
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( 'projects/<project_id>/regions/us-west2/serviceAttachments/cloud-func', 'my-hello-echo-function.com', );
|gc-console|에서 서비스 첨부 파일로 이동하여 새로 연결된 Snowflake 프로젝트를 수락합니다.
Snowflake에서 비공개 연결을 활성화하도록
PRIVATE_HOST_PORT
속성을 지정하여 :doc:`네트워크 규칙</sql-reference/sql/create-network-rule>`을 만듭니다.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');
Snowflake에서 이전 단계의 네트워크 규칙을 지정하여 :doc:`외부 액세스 통합</sql-reference/sql/create-external-access-integration>`을 만듭니다.
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION web_server_eai ALLOWED_NETWORK_RULES = (external_access_db.public.cloud_func_rule) ENABLED = TRUE;
Snowflake에서 다음 SQL 문을 실행하여 외부 액세스 통합을 사용할 수 있는 함수를 만듭니다.
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()); } } $$;
Snowflake에서 이전 단계에서 만든 함수를 호출합니다.
SELECT call_func("snowflake"); -- Returns "Hello snowflake!"
외부 네트워크 액세스 통합을 위해 비공개 연결 엔드포인트가 더 이상 필요하지 않은 경우 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출합니다.