Connectez Google Cloud Build à Google Cloud SQL
Google Cloud Run permet d'utiliser Cloud SQL. Mais que faire si vous avez besoin de Cloud SQL lors de la création de votre conteneur dans Google Cloud Build? Est-ce possible?
Arrière-plan
J'ai un projet Next.js, qui s'exécute dans un conteneur sur Google Cloud Run. Pousser mon code vers Cloud Build (installer le contenu, générer des pages statiques et tout mettre dans un conteneur) et le déployer sur Cloud Run fonctionne parfaitement. 👌
Cloud SQL
Mais, je viens d'ajouter une fonctionnalité dans laquelle il a également besoin de certaines données de mon instance PostgreSQL qui s'exécute sur Google Cloud SQL. Ces données sont utilisées lors de la construction du projet (génération des pages statiques).
Localement, sur ma machine, cela fonctionne bien car le projet peut se connecter à mon proxy CloudSQL. Lors de l'exécution dans CloudRun, cela devrait également fonctionner, car Cloud Run permet de se connecter à mon instance Postgres sur Cloud SQL .
Mon problème
Lors de la création de mon projet avec Cloud Build, j'ai besoin d'accéder à ma base de données pour pouvoir générer mes pages statiques. Je recherche un moyen de connecter mon constructeur de cloud Docker à Cloud SQL, peut-être tout comme Cloud Run (entièrement géré) fournit un mécanisme qui se connecte à l'aide du proxy Cloud SQL.
De cette façon, je pourrais me connecter /cloudsql/INSTANCE_CONNECTION_NAME
pendant la construction de mon projet!
Question
Ma question est donc la suivante: comment puis-je me connecter à mon instance PostgreSQL sur Google Cloud SQL via le proxy Cloud SQL lors de la création de mon projet sur Google Cloud Build?
Des éléments comme les informations d'identification de ma base de données, etc. vivent déjà dans Secrets Manager, je devrais donc pouvoir utiliser ces détails, je suppose 🤔
Réponses
Vous pouvez utiliser le conteneur que vous souhaitez (et dont vous avez besoin) pour générer vos pages statiques et télécharger le proxy SQL cloud pour ouvrir un tunnel avec la base de données
- 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>
Le moteur d'application dispose d'un wrapper exécutable qui présente l'avantage de vous fournir un proxy pour votre Cloud SQL.Je l'utilise donc pour me connecter à la base de données dans la version cloud ( tout comme certains didacticiels Google ).
Cependant, soyez averti des problèmes à venir: Cloud Build fonctionne exclusivement *, us-central1
ce qui signifie qu'il sera pathologiquement lent de se connecter de n'importe où ailleurs. Pour une ou deux opérations, je m'en fiche, mais si vous exécutez toute une suite de tests d'intégration qui ne fonctionneront tout simplement pas.
De plus, vous devrez autoriser GCB à accéder à 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
* à moins que vous ne soyez prêt à payer plus et à être très piqué par le logiciel bêta, auquel cas vous pouvez utiliser des travailleurs de construction cloud (au moment de la rédaction de cet article, ils sont en bêta, de toute façon ... je reviendrai et mettrai à jour s'ils font le mettre en production et résoudre les problèmes)