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 Build.
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 Build é um serviço que executa as suas compilações na 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 MySQL. 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 um repositório do Artifact Registry
- Se ainda não o fez, ative a API Artifact Registry no Google Cloud projeto a partir do qual está a estabelecer ligação:
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 um Docker Artifact Registry. Para melhorar a latência, reduzir o risco de falha entre regiões e evitar custos de rede adicionais, recomendamos que escolha uma localização do Artifact Registry na mesma região que o seu serviço do Cloud Run.
Configure o Cloud Build
Os passos para configurar o Cloud Build dependem do tipo de endereço IP que atribuiu à sua instância do Cloud SQL.IP público (predefinição)
Certifique-se de que a
conta de serviço do Cloud Build tem as
funções e autorizações do IAM
necessárias para estabelecer ligação à instância do Cloud SQL.
A conta de serviço do Cloud Build é apresentada na página Google Cloud console
IAM
como o principal
[YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
.
Para ver esta conta de serviço na Google Cloud consola, selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google.
A sua conta de serviço do Cloud Build precisa da
Cloud SQL Client
função do IAM.
Se a conta de serviço do Cloud Build pertencer a um projeto diferente da instância do Cloud SQL, tem de adicionar a API Admin do Cloud SQL e a função para ambos os projetos.
IP privado
Para se ligar à sua instância do Cloud SQL através de um IP privado, o Cloud Build tem de estar na mesma rede de VPC que a sua instância do Cloud SQL. Para configurar esta opção:
- Configure uma ligação privada entre a rede VPC da sua instância do Cloud SQL e a rede do produtor de serviços.
- Crie um grupo privado do Cloud Build.
Depois de configurada, a sua aplicação vai poder estabelecer ligação diretamente através do endereço IP privado e da porta 3306
da instância quando a compilação for executada no conjunto.
Estabeleça ligação ao Cloud SQL
Depois de configurar o Cloud Build, pode estabelecer ligação à sua instância do Cloud SQL.
IP público (predefinição)
Para caminhos de IP público, o Cloud Build suporta sockets Unix e TCP.
Pode usar o proxy Auth do Cloud SQL num passo do Cloud Build para permitir ligações à sua base de dados. Esta configuração:
- Cria o contentor e envia-o para o Artifact Registry.
- Cria um segundo contentor, copiando o ficheiro binário do proxy Auth do Cloud SQL.
- Os contentores criados pelo Cloud Build não têm de ser enviados para nenhum registo e são rejeitados quando a compilação é concluída.
- A utilização do segundo contentor inicia o proxy Auth do Cloud SQL e executa quaisquer 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.18.2 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: '3306' _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 pode executar um script migrate.py
hipotético após implementar a app de exemplo anterior para atualizar a respetiva base de dados do Cloud SQL através do proxy Auth do Cloud SQL e do Cloud Build.
Para executar este exemplo de código do Cloud Build, os passos de configuração necessários são:
- Crie um nome de pasta
sql-proxy
- Crie um ficheiro
Dockerfile
na pastasql-proxy
com a seguinte linha de código única para o conteúdo do ficheiro:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crie um ficheiro
cloudbuild.yaml
na pastasql-proxy
. - Atualize o ficheiro
cloudbuild.yaml
:- Copie o código do Cloud Build do exemplo anterior e cole-o no ficheiro
cloudbuild.yaml
. - Se estiver a usar uma ligação TCP, atualize o código de exemplo
_DATABASE_PORT
no blocosubstitutions:
para3306
, que é a porta usada pelo MySQL. - Substitua os seguintes valores de marcadores de posição pelos valores usados no seu projeto:
mydatabase
myuser
myinstance
- Copie o código do Cloud Build do exemplo anterior e cole-o no ficheiro
- Crie um segredo com o nome
database_password
no Secret Manager.- Para que a conta de serviço do Cloud Build aceda a este segredo, tem de lhe conceder a função Secret Manager Secret Accessor no IAM. Consulte o artigo Usar segredos do Secret Manager para mais informações.
- Crie um ficheiro de script migrate.py na pasta
sql-proxy
.- O script pode referenciar as seguintes variáveis de ambiente e o segredo criado no ficheiro
cloudbuild.yaml
através dos 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 a partir de um script Bash (por exemplo:
migrate.sh
), use os seguintes exemplos:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- O script pode referenciar as seguintes variáveis de ambiente e o segredo criado no ficheiro
- Execute o seguinte comando
gcloud builds submit
para criar um contentor com o proxy Auth do Cloud SQL, iniciar o proxy Auth do Cloud SQL e executar o scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
IP privado
Para caminhos de IP privado, a sua aplicação liga-se diretamente à instância através de pools privadas. 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 3306
.
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 LEIA-ME no GitHub.
Nota:
- INSTANCE_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.
Em seguida, pode criar um passo do Cloud Build para executar o seu código diretamente.
O exemplo de código do Cloud Build acima mostra como pode executar um script migrate hipotético após implementar a app de exemplo acima para atualizar a respetiva base de dados do Cloud SQL através do Cloud Build. Para executar este exemplo de código do Cloud Build, os passos de configuração necessários são:
- Crie um nome de pasta
sql-private-pool
- Crie um ficheiro
Dockerfile
na pastasql-private-pool
com a seguinte linha de código única para o conteúdo do ficheiro:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crie um ficheiro
cloudbuild.yaml
na pastasql-private-pool
. - Atualize o ficheiro
cloudbuild.yaml
:- Copie o exemplo de código do Cloud Build acima e cole-o no ficheiro
cloudbuild.yaml
. - Substitua os seguintes valores de marcadores de posição pelos valores usados no seu projeto:
mydatabase
myuser
databasehost
, no formatohost:port
.
- Copie o exemplo de código do Cloud Build acima e cole-o no ficheiro
- Crie um segredo com o nome
database_password
no Secret Manager.- Para que a conta de serviço do Cloud Build aceda a este segredo, tem de lhe conceder a função Secret Manager Secret Accessor no IAM. Consulte o artigo Usar segredos do Secret Manager para mais informações.
- Crie um ficheiro de script migrate.py na pasta
sql-proxy
.- O script pode referenciar as seguintes variáveis de ambiente e o segredo criado no ficheiro
cloudbuild.yaml
através dos 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 a partir de um script Bash (por exemplo:
migrate.sh
), use os seguintes exemplos:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- O script pode referenciar as seguintes variáveis de ambiente e o segredo criado no ficheiro
- Execute o seguinte comando
gcloud builds submit
para criar um contentor com o proxy Auth do Cloud SQL, iniciar o proxy Auth do Cloud SQL e executar o scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
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.
Migrações de esquemas de bases de dados
Ao configurar o Cloud Build para estabelecer ligação ao Cloud SQL, pode executar tarefas de migração do esquema da base de dados no Cloud Build com o mesmo código que implementaria em qualquer outra plataforma sem servidor.
Usar o Secret Manager
Pode usar o Secret Manager para incluir informações confidenciais nas suas compilações.