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 시스템 함수를 호출합니다.