Il flag "--appyaml" di distribuzione dell'app gcloud non sembra funzionare
Per Google App Engine, voglio iniettare env_variables
nel mio al app.yaml
momento della distribuzione. Nei documenti per gcloud app deploy
, vedo che c'è la bandiera --appyaml
che:
Distribuisci con un app.yaml specifico che sostituirà quello definito in DEPLOYABLE.
https://cloud.google.com/sdk/gcloud/reference/app/deploy
Quindi ho uno script Fabric che legge il mio app.yaml
, inietta le mie variabili env extra, scrive questo nuovo app.yaml in un file temporaneo e quindi viene eseguito gcloud app deploy
. Il comando per gcloud
finisce per assomigliare a questo:
gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
La distribuzione ha esito positivo e il nuovo codice viene caricato, tuttavia le mie nuove variabili env non sembrano compensarlo.
Se fornisco un valore fasullo a, --appyaml
viene generato un errore, quindi sembra che utilizzi il mio input.
Qualche idea su cosa potrei fare di sbagliato?
Risposte
L'ho testato su AppEngine standard con piccole HelloWorld
modifiche in node.JS come questo:
'use strict';
const express = require('express');
const app = express();
app.get('/', (req, res) => {
var my_respond = "variables: ";
res.status(200).send(Object.entries(process.env)).end();
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
module.exports = app;
L'esempio mostra le variabili di ambiente come risultato.
Di quanto ho aggiunto più semplice app.yaml
:
runtime: nodejs10
env_variables:
MY_VAR: "my value from app.yaml"
Rispetto ad altre location ne ho aggiunti diversi yaml
chiamati app1.yaml
:
runtime: nodejs12
env_variables:
MY_VAR: "my value from app1.yaml"
Quindi questo sta cambiando la versione del nodo e il valore di MY_VAR
.
Secondo i miei test questo sembra funzionare in modo leggermente diverso rispetto a quanto spiegato nel documento, almeno lo capisco in modo diverso.
È possibile utilizzare --appyaml
flag, ma solo quando non ci sono app.yaml
file nella directory. Se non lo hai nella directory delle app, piuttosto che usare il flag puoi puntare a diverso yaml
.
Quindi, quando stavo tentando di eseguire la distribuzione con gcloud app deploy --appyaml="/home/vitooh/app1.yaml"
ed app.yaml
ero nella directory dell'applicazione, l'app è stata distribuita con essa, quindi il flag non fa nulla. Tuttavia, quando l'ho fatto senza che app.yaml
il flag funzioni , il valore della variabile viene modificato.
In realtà puoi individuarlo subito dopo aver inviato il comando dove viene mostrato un riepilogo, subito prima di confermare la distribuzione, in un descriptor
valore come questo:
descriptor: [/home/vitooh/app1.yaml]
source: [/home/vitooh/appEngine/nodejs-docs-samples/appengine/hello-world/standard]
target project: [xxxxx-test-01]
target service: [default]
target version: [20200819t094956]
target url: [https://xxxxx-test-01.appspot.com]
Do you want to continue (Y/n)?
La domanda è una scatola nera senza dettagli: "Ho un fabfile e poi le cose succedono ma vanno male". Tuttavia, ecco un suggerimento su come farlo in modo un po 'più semplice senza scherzi app.yaml
. app.yaml
può contenere una direttiva chiamata includes
, che può fare riferimento a un altro file yaml, dove puoi avere le variabili d'ambiente, quindi non devi toccare il file originale.
app.yaml:
(...)
includes:
- my_vars.yaml
my_vars.yaml:
env_variables:
MY_VAR: value