Il flag "--appyaml" di distribuzione dell'app gcloud non sembra funzionare

Aug 19 2020

Per Google App Engine, voglio iniettare env_variablesnel mio al app.yamlmomento della distribuzione. Nei documenti per gcloud app deploy, vedo che c'è la bandiera --appyamlche:

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 gcloudfinisce 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, --appyamlviene generato un errore, quindi sembra che utilizzi il mio input.

Qualche idea su cosa potrei fare di sbagliato?

Risposte

2 vitooh Aug 19 2020 at 17:09

L'ho testato su AppEngine standard con piccole HelloWorldmodifiche 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 yamlchiamati 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 --appyamlflag, ma solo quando non ci sono app.yamlfile 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.yamlero nella directory dell'applicazione, l'app è stata distribuita con essa, quindi il flag non fa nulla. Tuttavia, quando l'ho fatto senza che app.yamlil 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 descriptorvalore 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)?
1 yedpodtrzitko Aug 19 2020 at 18:48

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.yamlpuò 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