A sinalização gcloud app deploy '--appyaml' parece não funcionar

Aug 19 2020

Para o Google App Engine, quero injetar env_variablesno meu app.yamlna implantação. Na documentação de gcloud app deploy, vejo que existe a bandeira --appyamlque irá:

Implante com um app.yaml específico que substituirá o definido no DEPLOYABLE.

https://cloud.google.com/sdk/gcloud/reference/app/deploy

Portanto, tenho um script do Fabric que lê meu app.yaml, injeta minhas variáveis ​​env extras, grava este novo app.yaml em um arquivo temporário e, em seguida, é executado gcloud app deploy. O comando to gcloudacaba ficando assim:

gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'

A implantação é bem-sucedida e o novo código é carregado, no entanto, minhas novas variáveis ​​de env não parecem compensar.

Se eu fornecer um valor falso para --appyaml, ele gerará um erro, de modo que parece usar minha entrada.

Alguma ideia do que eu poderia estar fazendo de errado?

Respostas

2 vitooh Aug 19 2020 at 17:09

Eu testei no AppEngine padrão com pequenas HelloWorldmodificações no node.JS como este:

'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;

A amostra está mostrando variáveis ​​de ambiente como resultado.

Do que adicionei o mais simples app.yaml:

runtime: nodejs10
env_variables:
  MY_VAR: "my value from app.yaml"

Do que em outro local, adicionei diferentes yamlchamadas app1.yaml:

runtime: nodejs12
env_variables:
  MY_VAR: "my value from app1.yaml"

Portanto, isso está mudando a versão do nó e o valor de MY_VAR.

De acordo com meus testes, isso parece estar funcionando de forma um pouco diferente do explicado no documento, pelo menos eu entendo de forma diferente.

É possível usar o --appyamlflag, mas apenas quando não há nenhum app.yamlarquivo no diretório. Se você não tiver no diretório do aplicativo, do que usar o sinalizador, você pode apontar para diferente yaml.

Então, quando eu estava tentando implantar gcloud app deploy --appyaml="/home/vitooh/app1.yaml"e app.yamlestava no diretório do aplicativo, o aplicativo foi implantado com ele - portanto, o sinalizador não faz nada. No entanto, quando eu fiz isso sem app.yamlo sinalizador funcionar, o valor da variável foi alterado.

Na verdade, você pode identificá-lo logo após enviar o comando onde há um resumo mostrado, pouco antes de confirmar a implantação, em descriptorvalores como este:

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

A questão é uma caixa preta sem nenhum detalhe: "Eu tenho um fabfile e então as coisas acontecem, mas acontecem mal". No entanto, aqui vai uma dica de como fazer isso de forma um pouco mais simples, sem bagunçar app.yaml. app.yamlpode conter uma diretiva chamada includes, que pode fazer referência a outro arquivo yaml, onde você pode ter as variáveis ​​de ambiente, então você não precisa mexer no arquivo original.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value