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 PostgreSQL. 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.
Configurar um repositório do Artifact Registry
- Se ainda não tiver feito isso, ative a API Artifact Registry no projeto do Google Cloud do qual você está se conectando:
- Criar um Artifact Registry do Docker. Para melhorar a latência, reduzir o risco de falha entre regiões e evitar custos de rede adicionais, recomendamos que você escolha um local do Artifact Registry na mesma região do serviço do Cloud Run.
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.
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 do
papel do IAM Cloud SQL Client
.
Se a conta de serviço do Cloud Build pertencer a um projeto diferente da instância do Cloud SQL, a API Cloud SQL Admin e o papel precisarão ser adicionados aos dois projetos.
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 5432
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.
Para caminhos de IP público, o Cloud Build é compatível com soquetes Unix e TCP.
Conectar com TCP
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Observação:
- CLOUD_SQL_CONNECTION_NAME precisa ser representado como <MEU-PROJETO>:<REGIÃO-DA-INSTÂNCIA>:<NOME-DA-INSTÂNCIA>
- 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.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Conectar-se com soquetes Unix
Depois de configurá-lo corretamente, conecte o serviço ao
soquete de domínio do Unix da instância do Cloud SQL que foi acessado no sistema de arquivos do ambiente
por este caminho:
/cloudsql/INSTANCE_CONNECTION_NAME
.
O INSTANCE_CONNECTION_NAME usa o formato project:region:instance-id
. Encontre-o na página de Visão geral da instância no console do Google Cloud ou executando este comando:
gcloud sql instances describe [INSTANCE_NAME]
Essas conexões são criptografadas automaticamente sem qualquer configuração extra.
Os exemplos de código mostrados abaixo são trechos de exemplos mais completos no site do GitHub. Clique em View on GitHub
para ver mais
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
É 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 Artifact 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 criação.
- Usando o segundo contêiner, inicia o proxy de autenticação do Cloud SQL e executa todos os comandos de migração.
steps: - id: install-proxy name: gcr.io/cloud-builders/wget entrypoint: sh args: - -c - | wget -O /workspace/cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/2.14.3 chmod +x /workspace/cloud-sql-proxy - id: migrate waitFor: ['install-proxy'] name:YOUR_CONTAINER_IMAGE_NAME entrypoint: sh env: - "DATABASE_NAME=${_DATABASE_NAME}" - "DATABASE_USER=${_DATABASE_USER}" - "DATABASE_PORT=${_DATABASE_PORT}" - "INSTANCE_CONNECTION_NAME=${_INSTANCE_CONNECTION_NAME}" secretEnv: - DATABASE_PASS args: - "-c" - | /workspace/cloud-sql-proxy ${_INSTANCE_CONNECTION_NAME} --port ${_DATABASE_PORT} & sleep 2; # Cloud SQL Proxy is now up and running, add your own logic below to connect python migrate.py # For example options: dynamic_substitutions: true substitutions: _DATABASE_USER: myuser _DATABASE_NAME: mydatabase _INSTANCE_CONNECTION_NAME: ${PROJECT_ID}:us-central1:myinstance _DATABASE_PORT: '5432' _DATABASE_PASSWORD_KEY: database_password _AR_REPO_REGION: us-central1 _AR_REPO_NAME: my-docker-repo _IMAGE_NAME: ${_AR_REPO_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO_NAME}/sample-sql-proxy availableSecrets: secretManager: - versionName: projects/$PROJECT_ID/secrets/${_DATABASE_PASSWORD_KEY}/versions/latest env: "DATABASE_PASS"
O exemplo de código do Cloud Build mostra como executar um script hipotético
migrate.py
após implantar o aplicativo de exemplo anterior para atualizar
o banco de dados do Cloud SQL usando o proxy de autenticação do Cloud SQL e o Cloud Build.
Para executar esta amostra 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 anterior e cole-o no arquivo
cloudbuild.yaml
. - Substitua os valores de marcador a seguir pelos valores usados no projeto:
mydatabase
myuser
myinstance
- Copie o código de amostra do Cloud Build anterior 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 ela o papel de Acessador 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
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 5432
.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para conferir esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Observação:
- CLOUD_SQL_CONNECTION_NAME precisa ser representado como <MEU-PROJETO>:<REGIÃO-DA-INSTÂNCIA>:<NOME-DA-INSTÂNCIA>
- 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.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub (em inglês).
Para ver esse snippet no contexto de um aplicativo da Web, consulte o README no GitHub.
Para ver 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.