Cette page contient des informations et des exemples de connexion à une instance Cloud SQL à partir d'un service s'exécutant dans Cloud Build.
Cloud SQL est un service de base de données entièrement géré qui vous aide à configurer, maintenir, gérer et administrer vos bases de données relationnelles dans le cloud.
Cloud Build est un service qui exécute vos compilations sur l'infrastructure Google Cloud.
Configurer une instance Cloud SQL
- Activez l'API Cloud SQL Admin dans le projet Google Cloud à partir duquel vous vous connectez, si ce n'est pas déjà fait :
- Créez une instance Cloud SQL pour SQL Server. Nous vous recommandons de choisir un emplacement d'instance Cloud SQL qui soit dans la même région que votre service Cloud Run, afin d'améliorer la latence, d'éviter certains coûts de mise en réseau et de réduire les risques de défaillance interrégionale.
Par défaut, Cloud SQL attribue une adresse IP publique à une nouvelle instance. Vous avez également la possibilité d'attribuer une adresse IP privée. Pour en savoir plus sur les options de connectivité disponibles pour ces deux types d'adresses IP, consultez la page Présentation du processus de connexion.
Configurer Cloud Build
La procédure à suivre pour configurer Cloud Build dépend du type d'adresse IP que vous avez attribué à votre instance Cloud SQL.Adresse IP publique (par défaut)
Assurez-vous que votre compte de service Cloud Build dispose des rôles et autorisations IAM requis pour se connecter à l'instance Cloud SQL.
Le compte de service Cloud Build apparaît sur la page IAM de la console Google Cloud en tant que compte principal [YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
.
Pour afficher ce compte de service dans la console Google Cloud, cochez la case Inclure les attributions de rôles fournies par Google.
Votre compte de service Cloud Build doit disposer de l'un des rôles IAM suivants :
Cloud SQL Client
(rôle à privilégier)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Si le compte de service Cloud Build appartient à un autre projet que celui de l'instance Cloud SQL, vous devez ajouter l'API Cloud SQL Admin et les autorisations IAM aux deux projets.
Adresse IP privée
Pour vous connecter à votre instance Cloud SQL via une adresse IP privée, Cloud Build doit se trouver sur le même réseau VPC que votre instance Cloud SQL. La procédure de configuration est la suivante :
- Configurez une connexion privée entre le réseau VPC de votre instance Cloud SQL et le réseau de producteurs de services.
- Créez un pool privé Cloud Build.
Une fois configurée, votre application pourra se connecter directement à l'aide de l'adresse IP privée et du port 1433
de votre instance lorsque votre compilation est exécutée dans le pool.
Se connecter à Cloud SQL
Une fois que vous avez configuré Cloud Build, vous pouvez vous connecter à votre instance Cloud SQL.
Adresse IP publique (par défaut)
Pour les chemins d'accès des adresses IP publiques, Cloud Build prend en charge les sockets TCP.
Vous pouvez utiliser le proxy d'authentification Cloud SQL dans une étape Cloud Build pour autoriser les connexions à votre base de données. Cette configuration :
- crée votre conteneur et le transfère dans Container Registry.
- crée un second conteneur, copiant dans le binaire du proxy d'authentification Cloud SQL.
- Les conteneurs créés par Cloud Build n'ont pas besoin d'être transférés vers un registre, et sont supprimés une fois la compilation terminée.
- À l'aide du second conteneur, démarre le proxy Cloud SQL Auth et exécute les commandes de migration.
L'exemple de code Cloud Build ci-dessus montre comment vous pourriez exécuter un script de migration hypothétique après avoir déployé l'exemple d'application ci-dessus pour mettre à jour sa base de données Cloud SQL à l'aide du proxy d'authentification Cloud SQL et de Cloud Build. Pour exécuter cet exemple de code Cloud Build, procédez comme suit :
- Créez un dossier nommé
sql-proxy
- Créez un fichier
Dockerfile
contenant uniquement la ligne de code suivante dans le dossiersql-proxy
:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Créez un fichier
cloudbuild.yaml
dans le dossiersql-proxy
. - Mettez à jour le fichier
cloudbuild.yaml
:- Copiez l'exemple de code Cloud Build ci-dessus et collez-le dans le fichier
cloudbuild.yaml
. - Remplacez l'exemple de code
_DATABASE_TYPE
dans le blocsubstitutions:
parmssql
. - Remplacez l'exemple de code
substitutions:
dans le bloc_DATABASE_PORT
par1433
, qui est le port utilisé par SQL Server. - Remplacez les valeurs d'espace réservé suivantes par les valeurs utilisées dans votre projet :
mydatabase
myuser
myinstance
- Copiez l'exemple de code Cloud Build ci-dessus et collez-le dans le fichier
- Créez un secret nommé
database_password
dans Secret Manager.- Pour que le compte de service Cloud Build puisse accéder à ce secret, vous devez lui attribuer le rôle Accesseur de secrets Secret Manager dans IAM. Pour en savoir plus, consultez la section Utiliser des secrets depuis le gestionnaire de secrets.
- Créez un fichier de script migrate.py dans le dossier
sql-proxy
.- Le script peut référencer les variables d'environnement suivantes et le secret créé dans le fichier
cloudbuild.yaml
à l'aide des exemples suivants :os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Pour référencer les mêmes variables à partir d'un script Bash (par exemple,
migrate.sh
), utilisez les exemples suivants :$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- Le script peut référencer les variables d'environnement suivantes et le secret créé dans le fichier
- Exécutez la commande
gcloud builds submit
suivante pour créer un conteneur avec le proxy d'authentification Cloud SQL, démarrer le proxy d'authentification Cloud SQL et exécuter le scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
Adresse IP privée
Pour les chemins d'accès des adresses IP privées, votre application se connecte directement à votre instance via des pools privés. Cette méthode utilise TCP pour se connecter directement à l'instance Cloud SQL sans utiliser le proxy d'authentification Cloud SQL.
Se connecter avec TCP
Connectez-vous en utilisant l'adresse IP privée de votre instance Cloud SQL en tant qu'hôte et le port 1433
.
Python
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
Java
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
Remarque :
- CLOUD_SQL_CONNECTION_NAME doit être représenté sous la forme <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>.
- L'utilisation de l'argument ipTypes=PRIVATE force la connexion de SocketFactory à l'adresse IP privée associée à une instance.
- Pour en savoir plus sur les exigences de version Socket Factory des sockets JDBC pour le fichier pom.xml, cliquez ici.
Node.js
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
Go
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
C#
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
Ruby
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
PHP
Pour afficher cet extrait dans le contexte d'une application Web, consultez le fichier README sur GitHub.
Vous pouvez ensuite créer une étape Cloud Build pour exécuter directement votre code.
L'exemple de code Cloud Build ci-dessus montre comment vous pourriez exécuter un script de migration hypothétique après avoir déployé l'exemple d'application ci-dessus pour mettre à jour sa base de données Cloud SQL à l'aide de Cloud Build. Pour exécuter cet exemple de code Cloud Build, procédez comme suit :
- Créez un dossier nommé
sql-private-pool
- Créez un fichier
Dockerfile
contenant uniquement la ligne de code suivante dans le dossiersql-private-pool
:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Créez un fichier
cloudbuild.yaml
dans le dossiersql-private-pool
. - Mettez à jour le fichier
cloudbuild.yaml
:- Copiez l'exemple de code Cloud Build ci-dessus et collez-le dans le fichier
cloudbuild.yaml
. - Remplacez les valeurs d'espace réservé suivantes par les valeurs utilisées dans votre projet :
mydatabase
myuser
databasehost
, au formathost:port
.
- Copiez l'exemple de code Cloud Build ci-dessus et collez-le dans le fichier
- Créez un secret nommé
database_password
dans Secret Manager.- Pour que le compte de service Cloud Build puisse accéder à ce secret, vous devez lui attribuer le rôle Accesseur de secrets Secret Manager dans IAM. Pour en savoir plus, consultez la section Utiliser des secrets depuis le gestionnaire de secrets.
- Créez un fichier de script migrate.py dans le dossier
sql-proxy
.- Le script peut référencer les variables d'environnement suivantes et le secret créé dans le fichier
cloudbuild.yaml
à l'aide des exemples suivants :os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Pour référencer les mêmes variables à partir d'un script Bash (par exemple,
migrate.sh
), utilisez les exemples suivants :$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- Le script peut référencer les variables d'environnement suivantes et le secret créé dans le fichier
- Exécutez la commande
gcloud builds submit
suivante pour créer un conteneur avec le proxy d'authentification Cloud SQL, démarrer le proxy d'authentification Cloud SQL et exécuter le scriptmigrate.py
:gcloud builds submit --config cloudbuild.yaml
Bonnes pratiques et autres informations
Vous pouvez utiliser le proxy d'authentification Cloud SQL lorsque vous testez votre application en local. Pour obtenir des instructions détaillées, consultez le guide de démarrage rapide pour l'utilisation du proxy d'authentification Cloud SQL.
Vous pouvez également effectuer des tests à l'aide du proxy Cloud SQL via un conteneur Docker.
Migrations de schéma de base de données
En configurant Cloud Build pour se connecter à Cloud SQL, vous pouvez exécuter des tâches de migration de schéma de base de données dans Cloud Build à l'aide du même code que vous pourriez déployer sur toute autre plate-forme sans serveur.
Utiliser Secret Manager
Vous pouvez utiliser Secret Manager pour inclure des informations sensibles dans vos compilations.