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 como PRIVATE_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:

  1. 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',
    );
    
    Copy
  2. No Google Cloud console, acesse o anexo de serviço e aceite o do projeto Snowflake recém-conectado.

  3. 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');
    
    Copy
  4. 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;
    
    Copy
  5. 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());
       }
      }
      $$;
    
    Copy
  6. No Snowflake, chame a função que você criou na etapa anterior:

    SELECT call_func("snowflake");
    
    -- Returns "Hello snowflake!"
    
    Copy

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.