A sinalização gcloud app deploy '--appyaml' parece não funcionar
Para o Google App Engine, quero injetar env_variables
no meu app.yaml
na implantação. Na documentação de gcloud app deploy
, vejo que existe a bandeira --appyaml
que 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 gcloud
acaba 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
Eu testei no AppEngine padrão com pequenas HelloWorld
modificaçõ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 yaml
chamadas 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 --appyaml
flag, mas apenas quando não há nenhum app.yaml
arquivo 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.yaml
estava 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.yaml
o 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 descriptor
valores 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)?
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.yaml
pode 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