gcloud app deploy '-appyaml'フラグが機能していないようです
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 deploy
。gcloud
最終的に次のようになるコマンド:
gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
デプロイは成功し、新しいコードがアップロードされますが、私の新しい環境変数はそれを構成していないようです。
偽の値を指定--appyaml
するとエラーがスローされるため、入力を使用しているように見えます。
私が間違っている可能性のあるアイデアはありますか?
回答
HelloWorld
node.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)?
質問は詳細のないブラックボックスです:「私はfabfileを持っていて、それから物事は起こりますが、それらは間違って起こります」。ただし、をいじらずにこれを少し簡単にする方法のヒントを次に示しapp.yaml
ます。app.yaml
と呼ばれるディレクティブを含めることができます。このディレクティブincludes
は、環境変数を持つことができる別のyamlファイルを参照できるため、元のファイルに触れる必要はありません。
app.yaml:
(...)
includes:
- my_vars.yaml
my_vars.yaml:
env_variables:
MY_VAR: value