Conecte o Google Cloud Build ao Google Cloud SQL

Dec 16 2020

O Google Cloud Run permite o uso do Cloud SQL. Mas e se você precisar do Cloud SQL ao criar seu contêiner no Google Cloud Build? Isso é possível?

Fundo

Eu tenho um projeto Next.js, que é executado em um contêiner no Google Cloud Run. Enviar meu código para o Cloud Build (instalar as coisas, gerar páginas estáticas e colocar tudo em um contêiner) e implantar no Cloud Run funciona perfeitamente. 👌

Cloud SQL

Mas, acabei de adicionar algumas funcionalidades em que também precisa de alguns dados da minha instância PostgreSQL que é executada no Google Cloud SQL. Esses dados são usados ​​na construção do projeto (gerando as páginas estáticas).

Localmente, na minha máquina, isso funciona bem, pois o projeto pode se conectar ao meu proxy CloudSQL. Durante a execução no CloudRun, isso também deve funcionar, pois o Cloud Run permite a conexão com a minha instância do Postgres no Cloud SQL .

Meu problema

Ao construir meu projeto com o Cloud Build, preciso acessar meu banco de dados para poder gerar minhas páginas estáticas. Estou procurando uma maneira de conectar meu criador de nuvem Docker ao Cloud SQL, talvez assim como o Cloud Run (totalmente gerenciado) fornece um mecanismo que se conecta usando o Cloud SQL Proxy.

Dessa forma, eu poderia me conectar /cloudsql/INSTANCE_CONNECTION_NAMEenquanto construí meu projeto!

Pergunta

Portanto, minha pergunta é: como faço para me conectar à minha instância PostgreSQL no Google Cloud SQL por meio do Cloud SQL Proxy enquanto construo meu projeto no Google Cloud Build?

Coisas como minhas credenciais de banco de dados, etc. já estão no Gerenciador de Segredos, então devo ser capaz de usar esses detalhes, eu acho 🤔

Respostas

5 guillaumeblaquiere Dec 16 2020 at 23:42

Você pode usar o contêiner que deseja (e precisa) para gerar suas páginas estáticas e baixar o proxy sql em nuvem para abrir um túnel com o banco de dados

  - name: '<YOUR CONTAINER>'
    entrypoint: 'sh'
    args:
      - -c
      - |
        wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
        chmod +x cloud_sql_proxy
        ./cloud_sql_proxy -instances=<my-project-id:us-central1:myPostgresInstance>=tcp:5432 &
        <YOUR SCRIPT>        

1 thclark Dec 21 2020 at 01:05

O App Engine tem um wrapper exec que tem a vantagem de fazer proxy do Cloud SQL para você, então eu o uso para me conectar ao banco de dados na construção da nuvem (o mesmo acontece com alguns tutoriais do google ).

No entanto, esteja avisado de problemas à frente: o Cloud Build é executado exclusivamente *, o us-central1que significa que será patologicamente lento para se conectar de qualquer outro lugar. Para uma ou duas operações, não me importo, mas se você estiver executando um conjunto completo de testes de integração, isso simplesmente não funcionará.

Além disso, você precisará conceder permissão para o GCB acessar o GCSQL.

steps:
  - id: 'Connect to DB using appengine wrapper to help'
    name: gcr.io/google-appengine/exec-wrapper
    args:
      [
        '-i',  # The image you want to connect to the db from
        '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
        '-s',  # The postgres instance
        '${PROJECT_ID}:${_POSTGRES_REGION}:${_POSTGRES_INSTANCE_NAME}', '-e', # Get your secrets here... 'GCLOUD_ENV_SECRET_NAME=${_GCLOUD_ENV_SECRET_NAME}',
        '--', # And then the command you want to run, in my case a database migration
        'python',
        'manage.py',
        'migrate',
      ]

substitutions:
  _GCLOUD_ENV_SECRET_NAME: mysecret
  _GCR_HOSTNAME: eu.gcr.io
  _POSTGRES_INSTANCE_NAME: my-instance
  _POSTGRES_REGION: europe-west1

* a menos que você esteja disposto a pagar mais e ficar muito chateado com o software Beta, caso em que você pode usar os trabalhadores de construção em nuvem (no momento da escrita estão em Beta, de qualquer maneira ... Voltarei e atualizarei se eles fizerem em produção e consertar os problemas)