Esta página contém informações e exemplos para estabelecer ligação a uma instância do Cloud SQL a partir de um serviço em execução no Cloud Run.
Para obter instruções passo a passo sobre a execução de uma aplicação Web de exemplo do Cloud Run ligada ao Cloud SQL, consulte o início rápido para estabelecer ligação a partir do Cloud Run.
O Cloud SQL é um serviço de base de dados totalmente gerido que ajuda na configuração, manutenção, gestão e administração das suas bases de dados relacionais na nuvem.
O Cloud Run é uma plataforma de computação gerida que lhe permite executar contentores diretamente na parte superior da Google Cloud infraestrutura.
Configure uma instância do Cloud SQL
- Ative a API Cloud SQL Admin no Google Cloud projeto a partir do qual está a estabelecer ligação, se ainda não o tiver feito:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Crie uma instância do Cloud SQL
para PostgreSQL. Recomendamos que escolha uma
localização da instância do Cloud SQL na mesma região que o seu serviço do Cloud Run para ter uma melhor latência, evitar alguns custos de rede e reduzir os riscos de falhas entre regiões.
Por predefinição, o Cloud SQL atribui um endereço IP público a uma nova instância. Também tem a opção de atribuir um endereço IP privado. Para mais informações sobre as opções de conetividade para ambos, consulte a página Vista geral da ligação.
- Quando cria a instância, pode escolher a
hierarquia do certificado do servidor (AC) para a instância e, em seguida, configurar a hierarquia
como a
serverCaMode
para a instância. Tem de selecionar a opção de AC por instância (GOOGLE_MANAGED_INTERNAL_CA
) como o modo de AC do servidor para instâncias às quais quer estabelecer ligação a partir de aplicações Web.
Configure o Cloud Run
Os passos para configurar o Cloud Run dependem do tipo de endereço IP que atribuiu à sua instância do Cloud SQL. Se encaminhar todo o tráfego de saída através da saída da VPC direta ou de um conetor do Acesso a VPC sem servidor, use um endereço IP privado. Compare os dois métodos de saída da rede.IP público (predefinição)
- Certifique-se de que a instância tem um endereço IP público. Pode validar esta situação na página Vista geral da sua instância na Google Cloud consola. Se precisar de adicionar um, consulte a página de configuração do IP público para ver instruções.
- Obtenha o INSTANCE_CONNECTION_NAME para a sua instância. Pode encontrar
este valor na página Vista geral da sua instância na
Google Cloud consola ou executando o
seguinte
comando:
gcloud sql instances describe
Substitua INSTANCE_NAME pelo nome da sua instância do Cloud SQL.gcloud sql instances describe INSTANCE_NAME
- Obtenha o CLOUD_RUN_SERVICE_ACCOUNT_NAME para o seu serviço do Cloud Run. Pode encontrar este valor na página IAM do projeto que está a alojar o serviço Cloud Run na Google Cloud consola ou executando o seguinte comando
gcloud run services describe
no projeto que está a alojar o serviço Cloud Run: Substitua as seguintes variáveis:gcloud run services describe CLOUD_RUN_SERVICE_NAME --region CLOUD_RUN_SERVICE_REGION --format="value(spec.template.spec.serviceAccountName)"
- CLOUD_RUN_SERVICE_NAME: o nome do seu serviço do Cloud Run
- CLOUD_RUN_SERVICE_REGION: a região do seu serviço do Cloud Run
-
Configure a conta de serviço para o seu serviço do Cloud Run. Para
estabelecer ligação ao Cloud SQL, certifique-se de que a conta de serviço tem a
Cloud SQL Client
função do IAM. - Se estiver a adicionar uma ligação do Cloud SQL a um novo serviço, tem de ter o serviço em contentores e carregado para o Container Registry ou o Artifact Registry. Se ainda não tiver uma ligação, consulte estas instruções sobre como criar e implementar uma imagem de contentor.
Se estiver a estabelecer ligação a instâncias configuradas com a opção de autoridade de certificação (AC) partilhada (
GOOGLE_MANAGED_CAS_CA
) ou a opção de AC gerida pelo cliente (CUSTOMER_MANAGED_CAS_CA
) como o modo de AC do servidor, selecione o ambiente de execução de segunda geração quando selecionar o ambiente de execução para o serviço. Ambas as opções do modo de CA do servidor requerem que se ligue à instância com o proxy Auth do Cloud SQL v2.Se o seu serviço for executado num ambiente de execução de primeira geração, então: Só pode estabelecer ligação a instâncias do Cloud SQL configuradas com a opção de autoridade de certificação (AC) por instância (
GOOGLE_MANAGED_INTERNAL_CA
) como modo de AC do servidor. O ambiente de execução de primeira geração do Cloud Run incorpora o proxy Auth do Cloud SQL v1. Para mais informações sobre os requisitos de ligação ao Cloud SQL para o proxy Auth do Cloud SQL, consulte os requisitos para usar o proxy Auth do Cloud SQL.
Tal como qualquer alteração de configuração, a definição de uma nova configuração para a ligação do Cloud SQL leva à criação de uma nova revisão do Cloud Run. As revisões subsequentes também recebem automaticamente esta ligação do Cloud SQL, a menos que faça atualizações explícitas para a alterar.
Consola
-
Comece a configurar o serviço. Para adicionar ligações do Cloud SQL a um serviço existente, faça o seguinte:
- Na lista Serviços, clique no nome do serviço pretendido.
- Clique em Editar e implementar nova revisão.
- Ative a ligação a uma instância do Cloud SQL:
- Clique em Recipientes e, de seguida, em Definições.
- Desloque a página até Ligações do Cloud SQL.
- Clique em Adicionar associação.
- Clique no botão Ativar o administrador do Cloud SQL se ainda não tiver ativado a API Admin do Cloud SQL.
- Se estiver a adicionar uma ligação a uma instância do Cloud SQL no seu projeto, selecione a instância do Cloud SQL pretendida no menu.
- Se estiver a usar uma instância do Cloud SQL de outro projeto, selecione string de ligação personalizada no menu e introduza o nome de ligação da instância completo no formato PROJECT-ID:REGION:INSTANCE-ID.
- Para eliminar uma associação, coloque o cursor à direita da associação para apresentar o ícone Eliminar e clique nele.
-
Clique em Criar ou Implementar.
Linha de comandos
Antes de usar qualquer um dos seguintes comandos, faça as seguintes substituições:
- IMAGE com a imagem que está a implementar
- SERVICE_NAME com o nome do seu serviço do Cloud Run
-
INSTANCE_CONNECTION_NAME com o nome de ligação da instância da sua instância do Cloud SQL ou uma lista de nomes de ligações delimitados por vírgulas.
Se estiver a implementar um novo contentor, use o seguinte comando:
Se estiver a atualizar um serviço existente, use o seguinte comando:gcloud run deploy \ --image=IMAGE \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
Terraform
O código seguinte cria um contentor base do Cloud Run com uma instância do Cloud SQL ligada.
-
Aplique as alterações introduzindo
terraform apply
. - Valide as alterações verificando o serviço Cloud Run, clicando no separador Revisões e, de seguida, no separador Ligações.
IP privado
Se a conta de serviço de autorização pertencer a um projeto diferente do que contém a instância do Cloud SQL, faça o seguinte:
- Em ambos os projetos, ative a API Admin do Cloud SQL.
- Para a conta de serviço no projeto que contém a instância do Cloud SQL, adicione as autorizações IAM.
- Certifique-se de que a instância do Cloud SQL criada anteriormente tem um endereço IP privado. Para adicionar um endereço IP interno, consulte o artigo Configurar IP privado.
- Configure o método de saída para estabelecer ligação à mesma rede VPC que a instância do Cloud SQL. Tenha em atenção as seguintes condições:
- A saída da VPC direta e o acesso a VPC sem servidor suportam a comunicação com redes VPC ligadas através do Cloud VPN e do intercâmbio das redes da VPC.
- A saída da VPC direta e o Acesso a VPC sem servidor não suportam redes antigas.
- A menos que esteja a usar a VPC partilhada, um conector tem de partilhar o mesmo projeto e região que o recurso que o usa, embora o conector possa enviar tráfego para recursos em diferentes regiões.
- Estabeleça ligação através do endereço IP privado e da porta da sua instância
5432
.
Estabeleça ligação ao Cloud SQL
Depois de configurar o Cloud Run, pode estabelecer ligação à sua instância do Cloud SQL.
IP público (predefinição)
Para caminhos de IP público, o Cloud Run fornece encriptação e estabelece ligação através do proxy Auth do Cloud SQL de duas formas:
- Através de entradas Unix
- Usando um conetor do Cloud SQL
Use o Secret Manager
A Google recomenda que use o Secret Manager para armazenar informações confidenciais, como credenciais SQL. Pode transmitir segredos como variáveis de ambiente ou montá-los como um volume com o Cloud Run.
Depois de criar um segredo no Secret Manager, atualize um serviço existente com o seguinte comando:
Linha de comandos
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME --update-env-vars=INSTANCE_CONNECTION_NAME=INSTANCE_CONNECTION_NAME_SECRET \ --update-secrets=DB_USER=DB_USER_SECRET:latest \ --update-secrets=DB_PASS=DB_PASS_SECRET:latest \ --update-secrets=DB_NAME=DB_NAME_SECRET:latest
Terraform
O seguinte cria recursos secretos para armazenar de forma segura os valores do utilizador, da palavra-passe e do nome da base de dados através de google_secret_manager_secret
e google_secret_manager_secret_version
. Tenha em atenção que tem de atualizar a conta de serviço de computação do projeto para ter acesso a cada segredo.
Atualize o recurso principal do Cloud Run para incluir os novos segredos.
Aplique as alterações introduzindo terraform apply
.
O comando de exemplo usa a versão secreta, latest. No entanto, a Google recomenda fixar o segredo a uma versão específica, SECRET_NAME:v1.
IP privado
Para caminhos de IP privado, a sua aplicação liga-se diretamente à sua instância através de uma rede VPC. Este método usa o TCP para se ligar diretamente à instância do Cloud SQL sem usar o proxy Auth do Cloud SQL.
Estabeleça ligação com TCP
Estabeleça ligação através do endereço IP privado da sua instância do Cloud SQL como anfitrião e porta 5432
.
Python
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
Java
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
Nota:
- CLOUD_SQL_CONNECTION_NAME deve ser representado como <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- A utilização do argumento ipTypes=PRIVATE força o SocketFactory a estabelecer ligação com o IP privado associado de uma instância
- Consulte os requisitos da versão da fábrica de sockets JDBC para o ficheiro pom.xml.
Node.js
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
Ir
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
C#
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
Ruby
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
PHP
Para ver este fragmento no contexto de uma app Web, consulte o ficheiro README no GitHub.
Práticas recomendadas e outras informações
Pode usar o proxy Auth do Cloud SQL quando testar a sua aplicação localmente. Consulte o início rápido para usar o proxy Auth do Cloud SQL para ver instruções detalhadas.
Também pode testar através do proxy do Cloud SQL através de um contentor Docker.
Conjuntos de ligações
As ligações às bases de dados subjacentes podem ser interrompidas pelo próprio servidor da base de dados ou pela infraestrutura da plataforma. Recomendamos a utilização de uma biblioteca de cliente que suporte pools de ligações que restabeleçam automaticamente as ligações de cliente interrompidas. Pode usar o agrupamento de ligações gerido com as suas instâncias do Cloud SQL, o que lhe permite dimensionar as suas cargas de trabalho otimizando a utilização de recursos e a latência de ligação para as suas instâncias do Cloud SQL através do agrupamento. Para ver informações detalhadas sobre a funcionalidade de agrupamento de ligações geridas, consulte o artigo Vista geral do agrupamento de ligações geridas.
Para ver exemplos mais detalhados sobre como usar pools de ligações, consulte a página Gerir ligações à base de dados.Limites de ligação
As edições MySQL e PostgreSQL do Cloud SQL impõem um limite máximo nas ligações simultâneas, e estes limites podem variar consoante o motor de base de dados escolhido (consulte a página Quotas e limites do Cloud SQL).As instâncias de contentores do Cloud Run estão limitadas a 100 ligações a uma base de dados do Cloud SQL. Cada instância de um serviço ou uma tarefa do Cloud Run pode ter 100 ligações à base de dados e, à medida que este serviço ou tarefa é dimensionado, o número total de ligações por implementação pode aumentar.
Pode limitar o número máximo de ligações usadas por instância através de um conjunto de ligações. Para ver exemplos mais detalhados sobre como limitar o número de associações, consulte a página Gerir associações de bases de dados.
Limites de quota da API
O Cloud Run fornece um mecanismo que se liga através do proxy Auth do Cloud SQL, que usa a API Cloud SQL Admin. Os limites de quota da API aplicam-se ao proxy Auth do Cloud SQL. A quota da API Admin do Cloud SQL usada é aproximadamente duas vezes o número de instâncias do Cloud SQL configuradas pelo número de instâncias do Cloud Run de um serviço específico implementado em qualquer altura. Pode limitar ou aumentar o número de instâncias do Cloud Run para modificar a quota da API esperada consumida.O que se segue?
- Saiba mais sobre o Cloud Run.
- Saiba como criar e implementar imagens de contentores.
- Veja um exemplo completo em Python para usar o Cloud Run com o PostgreSQL.