Nesta página, você confere informações e exemplos de como se conectar a uma instância do Cloud SQL usando um serviço em execução no Cloud Build.
O Cloud SQL é um serviço de banco de dados totalmente gerenciado que ajuda a configurar, manter, gerenciar e administrar seus bancos de dados relacionais na nuvem.
O Cloud Build é um serviço que executa seus builds na infraestrutura do Google Cloud.
Configurar uma instância do Cloud SQL
- Ative a API Cloud SQL Admin no projeto do Google Cloud do qual você está se conectando,
caso ainda não tenha feito isso:
- Crie uma instância do Cloud SQL para MySQL. Recomendamos que você escolha um
local da instância do Cloud SQL na mesma região do serviço do Cloud Run para melhorar a latência, evitar alguns custos de rede e reduzir
os riscos de falha entre regiões.
Por padrão, o Cloud SQL atribui um endereço IP público a uma nova instância. Você também tem a opção de atribuir um endereço IP privado. Para mais informações sobre as opções de conectividade de ambos, consulte a página Visão geral da conexão.
Configure o Cloud Build
As etapas para configurar o Cloud Build dependem do tipo de endereço IP atribuído à instância do Cloud SQL.IP público (padrão)
Verifique se sua
conta de serviço do Cloud Build tem os
papéis e permissões
do IAM necessários para se conectar à instância do Cloud SQL.
A conta de serviço do Cloud Build está listada na página IAM
do Console do Google Cloud
como Principal.[YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
Para mostrar essa conta de serviço no console do Google Cloud, marque a caixa de seleção Incluir concessões de papéis fornecidos pelo Google.
A conta de serviço do Cloud Build precisa de um dos seguintes papéis do IAM:
Cloud SQL Client
(recomendável)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Se a conta de serviço do Cloud Build pertencer a um projeto diferente da instância do Cloud SQL, as permissões da API Cloud SQL Admin e do IAM precisarão ser adicionadas aos dois projetos.
IP particular
Para se conectar à instância do Cloud SQL por um IP privado, o Cloud Build precisa estar na mesma rede VPC da instância do Cloud SQL. Para configurar isso:
- Configure uma conexão privada entre a rede VPC da instância do Cloud SQL e a rede do produtor de serviços.
- Crie um pool particular do Cloud Build.
Depois de configurado, o aplicativo poderá se conectar diretamente usando o
endereço IP privado e a porta 3306
da instância quando a versão for executada no pool.
Conecte-se ao Cloud SQL
Depois de configurar o Cloud Build, conecte-se à instância do Cloud SQL.
IP público (padrão)
Para caminhos de IP público, o Cloud Build é compatível com soquetes Unix e TCP.
É possível usar o proxy de autenticação do Cloud SQL em uma etapa do Cloud Build para permitir conexões com o banco de dados. Essa configuração:
- Cria o contêiner e o envia para o Container Registry.
- Cria um segundo contêiner, copiando o binário do proxy de autenticação do Cloud SQL.
- Os contêineres criados pelo Cloud Build não precisam ser enviados a nenhum registro e são descartados na conclusão da versão.
- Usando o segundo contêiner, inicia o proxy de autenticação do Cloud SQL e executa todos os comandos de migração.
O exemplo de código do Cloud Build acima mostra como executar um script hipotético de migração após a implantação do aplicativo de exemplo acima para atualizar o banco de dados do Cloud SQL usando o proxy de autenticação do Cloud SQL e o Cloud Build. Para executar este exemplo de código do Cloud Build, siga as etapas necessárias:
- Crie um nome de pasta
sql-proxy
. - Crie um arquivo
Dockerfile
na pastasql-proxy
com a única linha de código a seguir no conteúdo do arquivo:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crie um arquivo
cloudbuild.yaml
na pastasql-proxy
. - Atualize o
cloudbuild.yaml
arquivo:- Copie o código de amostra do Cloud Build acima e cole-o no arquivo
cloudbuild.yaml
. - Use uma conexão TCP ou uma conexão de soquete Unix removendo o bloco de código do método que não está sendo usado.
- Atualize o código de exemplo
_DATABASE_TYPE
no blocosubstitutions:
para que ele sejamysql
. - Se você estiver usando uma conexão TCP, atualize o código de exemplo
_DATABASE_PORT
no blocosubstitutions:
para que seja3306
, que é a porta usada pelo MySQL. - Substitua os valores de marcador a seguir pelos valores usados no projeto:
mydatabase
myuser
myinstance
- Copie o código de amostra do Cloud Build acima e cole-o no arquivo
- Crie um secret chamado
database_password
no Secret Manager.- Para que a conta de serviço do Cloud Build acesse esse secret, é necessário conceder a ele o papel de Acessor de secrets do Gerenciador de secrets no IAM. Para mais informações, consulte Como usar secrets do Gerenciador de secrets.
- Crie um arquivo de script migrate.py na pasta
sql-proxy
.- O script pode fazer referência às seguintes variáveis de ambiente e ao secret criado no arquivo
cloudbuild.yaml
usando os seguintes exemplos:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Para fazer referência às mesmas variáveis de um script de Bash (por exemplo:
migrate.sh
), use os exemplos a seguir.$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- O script pode fazer referência às seguintes variáveis de ambiente e ao secret criado no arquivo
- Execute o seguinte comando
gcloud builds submit
para criar um contêiner com o proxy de autenticação do Cloud SQL, inicie esse proxy e execute o scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
IP particular
Para caminhos de IP particulares, o aplicativo se conecta diretamente à instância via pools particulares. Esse método usa TCP para a conexão direta com a instância do Cloud SQL sem usar o proxy de autenticação do Cloud SQL.
Conectar com TCP
Conecte-se usando o endereço IP privado da sua instância do Cloud SQL como o host e a porta 3306
.
Python
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Java
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Observação:
- INSTANCE_CONNECTION_NAME deve ser representado como <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- O uso do argumento ipTypes=PRIVATE forçará o SocketFactory a se conectar ao IP privado associado de uma instância
- Consulte os requisitos de versão de fábrica do soquete JDBC para o arquivo pom.xml aqui.
Node.js
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Go
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
C#
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Ruby
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
PHP
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Em seguida, crie uma etapa do Cloud Build para executar o código diretamente.
A amostra de código do Cloud Build acima mostra como executar um script hipotético de migração após implantar o aplicativo de amostra acima para atualizar o banco de dados do Cloud SQL usando o Cloud Build. Para executar esta amostra de código do Cloud Build, siga as etapas necessárias:
- Crie um nome de pasta
sql-private-pool
. - Crie um arquivo
Dockerfile
na pastasql-private-pool
com a única linha de código a seguir no conteúdo do arquivo:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crie um arquivo
cloudbuild.yaml
na pastasql-private-pool
. - Atualize o
cloudbuild.yaml
arquivo:- Copie o código de amostra do Cloud Build acima e cole-o no arquivo
cloudbuild.yaml
. - Substitua os valores de marcador a seguir pelos valores usados no projeto:
mydatabase
myuser
- No formulário,
databasehost
,host:port
.
- Copie o código de amostra do Cloud Build acima e cole-o no arquivo
- Crie um secret chamado
database_password
no Secret Manager.- Para que a conta de serviço do Cloud Build acesse esse secret, é necessário conceder a ele o papel de Acessor de secrets do Gerenciador de secrets no IAM. Para mais informações, consulte Como usar secrets do Gerenciador de secrets.
- Crie um arquivo de script migrate.py na pasta
sql-proxy
.- O script pode fazer referência às seguintes variáveis de ambiente e ao secret criado no arquivo
cloudbuild.yaml
usando os seguintes exemplos:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Para fazer referência às mesmas variáveis de um script de Bash (por exemplo:
migrate.sh
), use os exemplos a seguir.$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- O script pode fazer referência às seguintes variáveis de ambiente e ao secret criado no arquivo
- Execute o seguinte comando
gcloud builds submit
para criar um contêiner com o proxy de autenticação do Cloud SQL, inicie esse proxy e execute o scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
Práticas recomendadas e outras informações
Use o proxy do Cloud SQL Auth ao testar seu aplicativo localmente. Consulte o guia de início rápido para o uso do proxy de autenticação do Cloud SQL e confira instruções detalhadas.
Se preferir, teste usando o Cloud SQL Proxy por meio de um contêiner do Docker.
Migrações de esquema de banco de dados
Ao configurar o Cloud Build para se conectar ao Cloud SQL, é possível executar tarefas de migração de esquema de banco de dados no Cloud Build usando o mesmo código implantado em qualquer outra plataforma sem servidor.
Como usar o Gerenciador de secrets
Use o Secret Manager para incluir informações confidenciais nos seus builds.