Como se conectar a uma rede VPC

Com o acesso VPC sem servidor, é possível se conectar direto do Cloud Functions às instâncias de VM do Compute Engine, às instâncias do Cloud Memorystore e do Cloud SQL e a qualquer outro recurso com um endereço IP interno. Isso é útil nos casos em que:

  • Um serviço de back-end é executado em um grupo de instâncias gerenciadas no Compute Engine e a função precisa se comunicar esse serviço sem exposição à Internet pública.
  • A função usa software de terceiros que são executados em uma VM do Compute Engine.
  • O Memorystore é usado para armazenar dados para o Cloud Functions.
  • A função precisa acessar dados do banco de dados no local por meio do Cloud VPN.

Com o acesso VPC sem servidor, as solicitações enviadas da sua função para endereços IP internos (conforme definido pela RFC 1918, em inglês) são encaminhadas por meio de um conector de acesso VPC sem servidor à rede VPC. As solicitações enviadas para endereços IP públicos são roteadas pela Internet. Os endereços IP internos só são acessíveis a partir dos serviços do Google Cloud. Portanto, ao usá-los, você evita expor os recursos internos à Internet pública e melhora a latência da comunicação entre os serviços.

O acesso VPC sem servidor aceita a comunicação com redes VPC conectadas por meio do Cloud VPN e de peering de rede VPC. Mas não é compatível com redes legadas ou redes VPC compartilhadas. Os conectores de acesso VPC sem servidor estão sujeitos a uma taxa mensal. Consulte os preços do acesso VPC sem servidor para mais informações.

Como se conectar à rede VPC

Veja a seguir as três etapas necessárias para conectar o Cloud Functions à rede VPC:

  1. Criar um conector de acesso VPC sem servidor
  2. Conceder as permissões apropriadas à conta de serviço do Cloud Functions
  3. Configurar as funções para usar o conector

Um conector de acesso VPC sem servidor precisa estar no mesmo projeto e região que as funções que o utilizam. No entanto, ele pode enviar tráfego para recursos em regiões diferentes. O mesmo conector pode ser usado por várias funções. Para ver mais informações sobre conectores, incluindo uma lista de regiões suportadas, consulte Como configurar o acesso VPC sem servidor na documentação da VPC.

Como criar um conector

É possível criar um conector com o Console do Cloud ou com a gcloud ferramenta de linha de comando.

Console

  1. Ative a API de acesso VPC sem servidor para seu projeto:

    Ativar API

  2. Vá para a página de visão geral do acesso VPC sem servidor:

    Acessar o acesso VPC sem servidor

  3. Clique em Criar conector.

  4. No campo Nome, insira um nome para seu conector.

  5. No campo Região, selecione a região onde a função está localizada.

  6. No campo Rede, selecione a rede VPC a se conectar.

  7. No campo Intervalo de IP, insira um intervalo de IP CIDR /28 não utilizado. Os endereços neste intervalo são usados como endereços de origem para o tráfego enviado pelo conector. Esse intervalo de IP não pode se sobrepor a nenhuma reserva de endereço IP atual na rede VPC.

  8. (Opcional) É possível controlar a capacidade do conector definindo os valores nos campos Capacidade mínima e Capacidade máxima.

  9. Clique em Criar.

Uma marca de seleção verde aparecerá ao lado do nome do conector quando ele estiver pronto para uso.

gcloud

  1. Ative a API Serverless VPC Access para o projeto com o comando:

    gcloud services enable vpcaccess.googleapis.com
    
  2. Crie um conector:

    gcloud beta compute networks vpc-access connectors create CONNECTOR_NAME \
    --network VPC_NETWORK \
    --region REGION \
    --range IP_RANGE
    

    Em que:

    • CONNECTOR_NAME é o nome do conector;
    • VPC_NETWORK é a rede VPC a que você se conectará;
    • REGION é a região onde a função está localizada.
    • IP_RANGE é um intervalo de IP CIDR /28 não utilizado. Os endereços neste intervalo são usados como endereços de origem para o tráfego enviado pelo conector. Esse intervalo de IP não pode se sobrepor a nenhuma reserva de endereço IP atual na rede VPC.
  3. Verifique se o conector está no estado READY antes de usá-lo:

    gcloud beta compute networks vpc-access connectors describe CONNECTOR_NAME --region REGION
    

    A saída precisa conter a linha state: READY.

Se a criação de um conector resultar em erro, tente o seguinte e recrie o conector:

  • Especifique um intervalo de IP que não se sobreponha a nenhuma reserva de endereço IP atual na rede VPC.
  • Conceda permissão ao projeto para usar imagens de VM do Compute Engine do projeto com o ID serverless-vpc-access-images. Consulte Como configurar restrições de acesso a imagens para ver como atualizar a política da organização adequadamente.

Como configurar permissões

A conta de serviço do Cloud Functions do projeto precisa de permissões apropriadas para que sua função use um conector de acesso VPC sem servidor. Só é necessário conceder essas permissões uma vez por projeto. Para configurar as permissões, faça o seguinte:

Console

  1. Acesse a página IAM do Console do Google Cloud:

    Acessar IAM

  2. Encontre a entrada para o Agente de serviço do Cloud Functions.

  3. Clique no ícone de lápis para editar as permissões.

  4. Clique em Adicionar outro papel.

  5. Selecione Projeto > Visualizador.

  6. Clique em Adicionar outro papel.

  7. Selecione Compute Engine > Usuário da rede do Compute

  8. Clique em Salvar.

gcloud

  1. Encontre o número do projeto executando o comando a seguir, substituindo PROJECT_ID pelo ID do projeto no Google Cloud:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Conceda ao agente de serviço do Cloud Functions (service-PROJECT_NUM@gcf-admin-robot.iam.gserviceaccount.com) o papel viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUM@gcf-admin-robot.iam.gserviceaccount.com \
    --role=roles/viewer
    

    em que PROJECT_NUM é o número de projeto definido na etapa 1.

  3. Conceda ao agente de serviço do Cloud Functions o papel compute.networkUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUM@gcf-admin-robot.iam.gserviceaccount.com \
    --role=roles/compute.networkUser
    

Como configurar uma função para usar um conector

Depois de criar um conector de acesso VPC sem servidor e configurar as permissões adequadas, será possível configurar as funções para usar o conector. Várias funções podem usar o mesmo conector para acessar a mesma rede VPC, desde que elas estejam localizadas na mesma região.

Para vincular a função a um conector, especifique o nome do conector ao implantar a função:

Console

  1. Acesse a página de visão geral do Cloud Functions no Console do Cloud:

    Acessar o Cloud Functions

  2. Clique em Criar função.

  3. Preencha os campos obrigatórios da função.

  4. Expanda as configurações avançadas clicando em Mais.

  5. No campo Conector VPC, digite o nome totalmente qualificado do conector no formato abaixo:

    projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    

    em que:

    • PROJECT_ID é o ID do projeto no Google Cloud.
    • REGION é a região escolhida para o conector. O conector e a função precisam estar na mesma região.
    • CONNECTOR_NAME é o nome do conector.
  6. Clique em Criar.

gcloud

Use o comando gcloud beta functions deploy para implantar a função e especificar a sinalização --vpc-connector :

gcloud beta functions deploy FUNCTION_NAME \
--vpc-connector projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME \
FLAGS...

em que:

  • FUNCTION_NAME é o nome da função.
  • PROJECT_ID é o ID do projeto no Google Cloud.
  • REGION é a região escolhida para o conector. O conector e a função precisam estar na mesma região.
  • CONNECTOR_NAME é o nome do conector.
  • FLAGS... refere-se a outras sinalizações que são transferidas durante a implantação da função.

Depois de implantada, a função pode enviar solicitações a endereços IP internos para acessar os recursos na rede VPC.

Como desconectar uma função de um conector

Se não for mais necessário que a função se conecte à rede VPC, você poderá desconectar o conector de acesso VPC sem servidor.

Para desvincular a função de um conector, remova-o da configuração da função:

Console

  1. Acesse a página de visão geral do Cloud Functions no Console do Cloud:

    Acessar o Cloud Functions

  2. Clique no nome de uma função existente para acessar a página de detalhes dela.

  3. Clique em Editar.

  4. Expanda as configurações avançadas clicando em Mais.

  5. Apague o conteúdo do campo Conector VPC.

  6. Clique em Implantar.

gcloud

Use o comando gcloud beta functions deploy para atualizar sua função e especificar a sinalização --clear-vpc-connector :

gcloud beta functions deploy FUNCTION_NAME --clear-vpc-connector

A seguir