gcloud app deploy '-appyaml'フラグが機能していないようです

Aug 19 2020

Google App Engineの場合、デプロイ時に注入env_variablesしたいと思いapp.yamlます。のドキュメントgcloud app deployには、次のようなフラグがあることがわかり--appyamlます。

DEPLOYABLEで定義されたものを置き換える特定のapp.yamlでデプロイします。

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

そのためapp.yaml、を読み取り、追加のenv変数を挿入し、この新しいapp.yamlをtempfileに書き込んでから、を実行するFabricスクリプトがありますgcloud app deploygcloud最終的に次のようになるコマンド:

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

デプロイは成功し、新しいコードがアップロードされますが、私の新しい環境変数はそれを構成していないようです。

偽の値を指定--appyamlするとエラーがスローされるため、入力を使用しているように見えます。

私が間違っている可能性のあるアイデアはありますか?

回答

2 vitooh Aug 19 2020 at 17:09

HelloWorldnode.JSを少し変更して、標準のAppEngineでテストしました。

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

サンプルは、結果として環境変数を示しています。

私が最も簡単に追加したよりapp.yaml

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

他の場所よりも私は別のyaml呼ばれるを追加しましたapp1.yaml

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

したがって、これはノードのバージョンとの値を変更していますMY_VAR

私のテストによると、これはドキュメントで説明されているものとは少し異なって機能しているようですが、少なくとも私はそれを異なって理解しています。

--appyamlフラグを使用することは可能app.yamlですが、ディレクトリにファイルがない場合に限ります。アプリディレクトリにない場合は、フラグを使用するよりも別のを指すことができますyaml

だから私はで展開しようとしていたときgcloud app deploy --appyaml="/home/vitooh/app1.yaml"app.yamlアプリはそれで展開して、アプリケーションディレクトリにあった-フラグは何もしないようにします。しかしapp.yaml、フラグが機能せずに実行すると、変数値が変更されます。

実際には、コマンドを送信した直後、展開を確認す​​る直前に要約が表示されている場所で、次のdescriptorような値でそれを見つけることができます。

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

質問は詳細のないブラックボックスです:「私はfabfileを持っていて、それから物事は起こりますが、それらは間違って起こります」。ただし、をいじらずにこれを少し簡単にする方法のヒントを次に示しapp.yamlます。app.yamlと呼ばれるディレクティブを含めることができます。このディレクティブincludesは、環境変数を持つことができる別のyamlファイルを参照できるため、元のファイルに触れる必要はありません。

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value