2 votes

Est-il possible d'ajouter des variables d'environnement dépendantes dans Google Cloud Run ?

Je voudrais spécifier des variables d'environnement dépendantes sur un service Cloud Run.

Si les variables d'environnement ont été définies dans un .env il ressemblerait à ceci

DATABASE_NAME=my-database
DATABASE_USER=root
DATABASE_PASSWORD=P4SSw0rd!
DATABASE_PORT=5432
DATABASE_HOST="/socket/my-database-socket"
DATABASE_URL="user=${DATABASE_USER} password=${DATABASE_PASSWORD} dbname=${DATABASE_NAME} host=${DATABASE_HOST}"

Dans cet exemple, DATABASE_URL dépend de toutes les autres variables d'environnement.

Pour déployer le service, j'exécute la commande suivante :

gcloud run deploy my-service \
--image gcr.io/my-project/my-image:latest \
--region europe-west1 \
--port 80 \
--platform managed \
--allow-unauthenticated \
--set-env-vars 'DATABASE_NAME=my-database' \
--set-env-vars 'DATABASE_USER=root' \
--set-env-vars 'DATABASE_PASSWORD=P4SSw0rd!' \
--set-env-vars 'DATABASE_PORT=5432' \
--set-env-vars 'DATABASE_HOST="/socket/my-database-socket"' \
--set-env-vars 'DATABASE_URL="user=$(DATABASE_USER) password=$(DATABASE_PASSWORD) dbname=$(DATABASE_NAME) host=$(DATABASE_HOST)"'

Voici la définition YAML créée du service (certaines valeurs sont omises)

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-service
spec:
  template:
    metadata:
      name: ...
    spec:
      containerConcurrency: 80
      timeoutSeconds: 300
      containers:
      - image: ...
        ports:
        - name: http1
          containerPort: 80
        env:
        - name: DATABASE_NAME
          value: my-database
        - name: DATABASE_USER
          value: root
        - name: DATABASE_PASSWORD
          value: P4SSw0rd!
        - name: DATABASE_HOST
          value: /socket/my-database-socket
        - name: DATABASE_URL
          value: user=$(DATABASE_USER) password=$(DATABASE_PASSWORD) dbname=$(DATABASE_NAME) host=$(DATABASE_HOST)

Le problème est que, lorsque le service est en cours d'exécution, les variables d'environnement dans le fichier DATABASE_URL ne semblent pas interpolés.

J'ai lu que Kubernetes prend en charge les variables d'environnement dépendantes mais je n'arrive pas à trouver comment le faire fonctionner dans Cloud Run.

Je me demande s'il est finalement pris en charge par Cloud Run.

1voto

E. Anderson Points 965

Il est probable que cela puisse fonctionner dans Knative open source (qui utilise Kubernetes pour exécuter les pods) mais pas sur Google Cloud Run (entièrement hébergé), qui fonctionne sur un moteur d'exécution propriétaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X