Acesso à rede externa e conectividade privada em Google Cloud¶
Este tópico fornece detalhes de configuração para definir a conectividade privada de saída para um serviço externo Google Cloud por meio de acesso à rede externa. As principais diferenças entre as configurações de conectividade pública de saída e conectividade privada de saída são que, com a conectividade privada, você deve executar as seguintes operações:
Crie um ponto de extremidade de conectividade privada. Esta etapa requer a função ACCOUNTADMIN.
Crie uma regra de rede para que a propriedade
TYPE
seja definida comoPRIVATE_HOST_PORT
.
Custos de conectividade privada de saída¶
Você paga por cada ponto de extremidade de conectividade privada, juntamente com o total de dados processados. Para ver o preço desses itens, consulte a Tabela de consumo do serviço Snowflake.
Você pode explorar o custo desses itens filtrando os seguintes tipos de serviço ao consultar as exibições de faturamento nos esquemas ACCOUNT_USAGE e ORGANIZATION_USAGE:
OUTBOUND_PRIVATELINK_ENDPOINT
OUTBOUND_PRIVATELINK_DATA_PROCESSED
Por exemplo, você pode consultar a exibição USAGE_IN_CURRENCY_DAILY e filtrar por esses tipos de serviço.
Configuração de acesso à rede externa¶
Para configurar a conectividade privada de saída com acesso à rede externa em Google Cloud, execute os seguintes passos:
No Snowflake, chame a função do sistema SYSTEM$PROVISION_PRIVATELINK_ENDPOINT para provisionar um ponto de extremidade de conectividade privada em sua VNet do Snowflake para permitir que o Snowflake se conecte a um serviço externo Google Cloud usando conectividade privada:
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( 'projects/<project_id>/regions/us-west2/serviceAttachments/cloud-func', 'my-hello-echo-function.com', );
No Google Cloud console, acesse o anexo de serviço e aceite o do projeto Snowflake recém-conectado.
No Snowflake, crie uma regra de rede, especificando a propriedade :code:`PRIVATE_HOST_PORT`para habilitar a conectividade privada:
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');
No Snowflake, crie uma integração de acesso externo, especificando a regra de rede da etapa anterior:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION web_server_eai ALLOWED_NETWORK_RULES = (external_access_db.public.cloud_func_rule) ENABLED = TRUE;
No Snowflake, execute as seguintes instruções SQL para criar uma função que possa usar a integração de acesso externo:
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()); } } $$;
No Snowflake, chame a função que você criou na etapa anterior:
SELECT call_func("snowflake"); -- Returns "Hello snowflake!"
Se você não precisar mais do ponto de extremidade de conectividade privada para a integração de acesso à rede externa, chame a função do sistema SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT.