環境変数の処理
Code Engine で環境変数 (env variables) を扱う方法を学ぶ。 環境変数は、アプリケーション、ジョブ、または関数で使用できるキーと値のペアとして設定できます。
環境変数の作成と更新
Code Engine を使用して環境変数を作成および管理します。
環境変数はリテラル値として定義することもできますし、既存のシークレットやコンフィグマップを参照することもできます。 Code Engine は環境変数を使用して、 シークレットや コンフィグマップを ジョブ、アプリケーション、または関数で使用できるようにします。
コンソールからの環境変数の作成
Code Engine コンソールを使用して、環境変数を作成および更新します。
コンソールからアプリ、ジョブ、関数を作成または更新するときに、環境変数を定義できます。
開始前に
- プロジェクトを作成 し、 プロジェクトが
activeステータスでなければなりません。 - リテラル環境変数を作成するか、既存のシークレットまたは構成マップを参照する環境変数を作成するかを決定します。 環境変数が既存のシークレットまたは構成マップの全体を参照するように設定するか、既存のシークレットまたは構成マップ内の個々のキーを参照するように設定するには、シークレットまたは構成マップが存在している必要があります。 先に進む前に、シークレットの作成または 構成マップの作成を参照して、シークレットや構成マップを定義してください。
-
「環境変数の追加」ページで環境変数を定義するダイアログを開くには、以下のいずれかを行います。
- 「アプリケーションの作成」ページからアプリを作成する場合は、**「環境変数 (オプション)(Environment variables (optional))」**セクションを展開します。 作成するアプリに、1 つ以上の環境変数を追加できます。 **「追加」**をクリックし、「環境変数の追加」ページを開きます。
- 「ジョブの作成 (Create job)」ページからジョブを作成する場合は、**「環境変数 (オプション)(Environment variables (optional))」**セクションを展開します。 **「追加」**をクリックし、「環境変数の追加」ページを開きます。
- 関数を作成する 場合は、関数の作成ページから環境変数(オプション) セクションを展開します。 **「追加」**をクリックし、「環境変数の追加」ページを開きます。
- 環境変数を追加するために既存のワークロードを更新する場合、既存のアプリ、ジョブ、または関数に移動します。 Configuration] タブで [Environment variables ]をクリックします。 アプリ、ジョブ、機能の場合は、 環境変数の追加をクリックして環境変数の追加ページを開きます。
-
「環境変数の追加」ページで、以下のいずれかの方法で環境変数を作成します。
- _リテラル_環境変数を作成するには、
Literal valueを選択し、リテラル環境変数の名前を指定し、値を指定します。Resulting definitionセクションには、環境変数の名前とその値が表示されます。 - _構成マップを完全に参照する_という環境変数を作成するには、
Reference full configmapを選択してから、既存の構成マップを選択します。 この場合、選択する構成マップのすべてのキーが環境変数の一部として参照されます。Resulting definitionセクションには、構成マップ内のキーの名前が表示されますが、構成マップ内で参照されるキーの実際の値は表示されません。 - _定義された構成マップの個々のキーを参照する_環境変数を作成するには、
Reference key in configmapを選択し、必要な既存の構成マップを選択してから、環境変数の一部として参照するキーを選択します。 参照する構成マップ内の個々のキーを選択した後、Resulting definitionセクションには、構成マップ内の選択したキーの名前が表示されますが、構成マップ内で参照されるキーの実際の値は表示されません。 - _シークレットを完全に参照する_という環境変数を作成するには、
Reference full secretを選択してから、既存のシークレットを選択します。 この場合、選択するシークレットのすべてのキーが環境変数の一部として参照されます。Resulting definitionセクションには、シークレット内のキーの名前が表示されますが、シークレット内で参照されるキーの実際の値は表示されません。 - _定義されたシークレットの個々のキーを参照する_環境変数を作成するには、
Reference key in secretを選択し、必要な既存のシークレットを選択してから、環境変数の一部として参照するキーを選択します。 参照するシークレット内の個々のキーを選択した後、Resulting definitionセクションには、シークレット内の選択したキーの名前が表示されますが、シークレット内で参照されるキーの実際の値は表示されません。
コンソールからは、環境変数ごとに、定義済みの構成マップまたはシークレットの個々のキーを 1 つだけ参照できます。 構成マップまたはシークレットの複数のキーを参照する必要がある場合は、手順を繰り返して、別のキーを参照する別の環境変数を定義してください。
- _リテラル_環境変数を作成するには、
-
**「完了 (Done)」をクリックして変更を保存します。 このアクションにより、「環境変数」タブのテーブルに環境変数が追加されます。 引き続き環境変数を追加するには、「追加」**をクリックします。
-
定義された環境変数を使って、アプリ、ジョブ、または関数の作成または更新を完了します。
- ワークロードを作成している場合、 Createをクリックすると、アプリ、ジョブ、または関数が環境変数とともにデプロイされます。
- 既存のアプリ、ジョブ、または関数を更新して環境変数を追加する場合は、 [Save and deploy ]をクリックしてアプリを更新するか、[ Save] をクリックしてジョブまたは関数を新しい環境変数で更新します。
-
アプリ、ジョブ、関数が
Readyの状態になると、環境変数が更新されます。
次の表に、環境変数に関する情報を示します。
| ヘッダー | 説明 |
|---|---|
Name |
環境変数の名前。 |
Defined by |
環境変数が、literal タイプか、シークレットまたは構成マップの全体を参照するか、特定のキーを参照するか、を指定します。 |
Value or reference |
リテラル値、全体が参照される構成マップまたはシークレット、または構成マップまたはシークレットの参照キーを表示します。 |
例えば、アプリを作成し、そのアプリに環境変数を設定してみましょう。
icr.io/codeengine/codeengineイメージを使用するmyappという名前のアプリの作成をします。 このhello-worldアプリにはTARGET環境変数が含まれており、アプリはHello ${TARGET} from Code Engineと、環境変数のリストを出力します。TARGET環境変数が空の場合は、Hello World from Code Engineが返されます。- コンソールでこのアプリに移動します。
- アプリの状態が
Readyになったら、アプリをテストできます。 **「アプリケーションのテスト (Test application)」をクリックしてから、「アプリケーションのテスト (Test application)」ペインで「要求の送信」をクリックします。 Web ページでアプリケーションを開くには、「アプリケーション URL (Application URL)」**をクリックします。myappアプリはHello World from Code Engine応答を返し、このアプリに含まれている環境変数を出力します。 - **「環境変数」**タブをクリックします。
- 以下の環境変数を作成します。
- 追加をクリックして「環境変数の追加」ページを開き、_リテラル_環境変数を作成します。 例えば、
literalenvvarという名前の、This is my literalという値を持つリテラル環境変数を作成します。 **「完了 (Done)」**をクリックして変更を保存します。 - 追加 をクリックして「環境変数の追加」ページを開き、_構成マップを完全に参照する_環境変数を作成します。 構成マップを参照するためには、事前にそれが存在している必要があります。 この例では、
mycolorconfigmapという名前の構成マップが存在し、キー値ペアkey1=blue、key2=green、およびkey3=yellowが含まれています。 すべてのキーと値のペアを含め、mycolorconfigmap構成マップを完全に参照する環境変数を作成します。Resulting definitionセクションには、構成マップ内のキーの名前が表示されますが、構成マップ内で参照されるキーの実際の値は表示されません。 **「完了 (Done)」**をクリックして変更を保存します。 - 追加 をクリックして「環境変数の追加」ページを開き、_定義されたシークレットの個々のキーを参照する_別の環境変数を作成します。 シークレットを参照するためには、事前にそれが存在している必要があります。 この例では、
mynewsecretという名前のシークレットが存在し、キー値ペアnewsec1=mynewsecret1、newsec2=mynewsecret2、およびnewsec3=mynewsecret3が含まれています。newsec2シークレットのmynewsecretキーを参照する環境変数を作成します。Resulting definitionセクションには、シークレット内の選択したキーの名前が表示されますが、シークレット内で参照されるキーの実際の値は表示されません。 **「完了 (Done)」**をクリックして変更を保存します。
- 追加をクリックして「環境変数の追加」ページを開き、_リテラル_環境変数を作成します。 例えば、
- **「保存して作成 (Save and create)」**をクリックして、アプリを新しい環境変数で更新します。
- アプリの状態が
Readyになると、アプリが対象の環境変数で更新されます。 - アプリをテストするには、**「アプリケーションのテスト (Test application)」をクリックしてから、「アプリケーションのテスト (Test application)」ペインで「要求の送信」をクリックします。 Web ページでアプリケーションを開くには、「アプリケーション URL (Application URL)」**をクリックします。 このアプリのリビジョンでは、
Hello World from Code Engineが出力され、出力には前のステップで追加した環境変数の名前が含まれます。
ワークロードで環境変数を設定する場合、このアクションは新しい環境変数を追加するか、既存の環境変数を上書きします。 同じ_名前の_環境変数があり、以前に定義した環境変数と異なる_値を_指定した場合、更新された環境変数は既存の値を上書きする。 例えば、envvar1 という値を持つ myenvar1 という名前の定義済み環境変数があるとします。envvar1 という同じ名前の別の環境変数を定義し、その値に
mynewenvvar1 を指定します。このときに、更新したアプリを保存してデプロイするか、更新したジョブを保存すると、実行するアプリ、またはジョブは値 envvar1 のmynewenvvar1 環境変数を使用します。
コンソールからの環境変数の更新
- 既存の環境変数を更新するには、変更したい環境変数を含むアプリ、ジョブ、または関数に移動し、 環境変数タブをクリックして環境変数のテーブルを表示します。
- 環境変数の表で、更新する環境変数をクリックします。
- 「環境変数の編集 (Edit environment variable)」ページで、更新を行い、**「完了」をクリックして変更を保存します。 環境変数を編集するときに、「定義元 (Defined by)」**値とそれに対応する必須フィールドを変更できます。
- **「保存してデプロイ (Save and deploy)」をクリックして変更済みの内容でアプリケーションをデプロイするか、「保存」**をクリックして変更済みの内容でジョブを実行します。 アプリまたはジョブの状態が
Readyになっていれば、アプリまたはジョブは新しい環境変数を使用して更新されています。
CLI での環境変数の作成と更新
Code Engine CLI を使用して、環境変数を作成および管理します。
CLIでアプリ、ジョブ、関数を作成または更新するときに、環境変数を定義できます。
CLI を使用して環境変数を作成する場合、構成マップまたはシークレットを参照するか、リテラル環境変数を作成することができます。 これらの説明では、CLIを使ったリテラル環境変数の作成と更新について説明します。
CLI でシークレットおよび構成マップの全体を環境変数として参照したり、参照先データをオーバーライドしたり、参照先データを削除したりすることに関する、詳細なシナリオについては、シークレットおよび構成マップの参照 (Referencing secrets and configmaps) を参照してください。
開始前に
- Code Engine の CLI 環境をセットアップします。
- プロジェクトを作成して使用できるようにします。
アプリの環境変数の作成および更新
以下の手順に従って、アプリの環境変数を作成および更新します。
-
アプリの環境変数を作成および設定するには、
--envコマンドまたはapp createコマンドでapp updateオプションを使用します。 以下の例では、icr.io/codeengine/codeengineイメージを使用するmyappアプリケーションを作成し、envA環境変数とenvB環境変数を定義します。ibmcloud ce application create --name myapp --image icr.io/codeengine/codeengine --env envA=A --env envB=B -
既存のアプリケーションの環境変数を更新するには、
app updateコマンドで--envオプションを使用します。 以下の例では、myappアプリケーションを更新してenvAの値を上書きし、envC環境変数を追加します。ibmcloud ce application update --name myapp --env envA=AA --env envC=C
ジョブの環境変数の作成および更新
以下の手順に従って、ジョブの環境変数を設定および更新します。
-
ジョブの環境変数を作成および設定するには、
--env、job create、job update、またはjobrun submitの各コマンドでjobrun resubmitオプションを使用します。 以下の例では、icr.io/codeengine/codeengineイメージを使用するmyjobジョブを作成し、envA環境変数を定義します。ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --env envA=A -
既存のジョブの環境変数を更新するには、
--env、job update、またはjobrun submitの各コマンドでjobrun resubmitオプションを使用します。
例 1
以下の例では、myjob ジョブを更新して envA の値を上書きし、envB 環境変数を追加します。
ibmcloud ce job update --name myjob --env envA=AA --env envB=B
job get コマンドを実行して、その環境変数を含む、ジョブの詳細を表示します。
ibmcloud ce job get --name myjob
出力例
Getting job 'myjob'...
OK
Name: myjob
[...]
Environment Variables:
Type Name Value
Literal envA AA
Literal envB B
Image: icr.io/codeengine/codeengine
[...]
例 2
以下の例では、myjob ジョブを実行し、envA の値を上書きし、このジョブ実行に envD 環境変数を追加します。
ibmcloud ce jobrun submit --job myjob --name myjobrun1 --env envB=BB --env envC=C
jobrun get コマンドを実行して、その環境変数を含む、ジョブ実行の詳細を表示します。
ibmcloud ce jobrun get --name myjobrun1
出力例
[...]
Name: myjobrun1
[...]
Job Ref: myjob
Environment Variables:
Type Name Value
Literal envA AA
Literal envB BB
Literal envC C
Image: icr.io/codeengine/codeengine
[...]
Instances:
Name Running Status Restarts Age
myjobrun1-0-0 0/1 Succeeded 0 17s
関数の環境変数の作成と更新
以下のように、関数用の環境変数を設定・更新する。
-
関数の環境変数を作成して設定するには、
--envオプションをfunction createまたはfunction updateコマンドで使用します。 以下の例では、https://github.com/IBM/CodeEngineソース・コードを使用するmyfunction関数を作成し、envA環境変数を定義しています。ibmcloud ce function create --name myfunction --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs --env envA=Aコマンドの出力例
fn getコマンドの出力例。Environment Variables: Type Name Value Literal envA A -
既存の関数の環境変数を更新するには、
--envオプションをfunction updateオプションを使ってください。 以下の例では、envAの値を上書きするようにmyfunction関数を更新し、envC環境変数を追加している。ibmcloud ce fn update --name myfunction --env envA=AA --env envC=Cコマンドの出力例
fn getコマンドの出力例。Environment Variables: Type Name Value Literal envA AA Literal envC C
環境変数を用いた作業負荷の更新に関する考察
configmapsまたはsecretを参照する環境変数を持つアプリ、ジョブ、または関数を更新するときは、以下の情報を考慮してください。
configmap(またはsecret)を完全参照する環境変数を持つアプリ、ジョブ、または関数を、別のconfigmap(またはsecret)を完全参照するように更新すると、完全参照は、設定された順番で他の完全参照を上書きします(最後に参照されたセットは、最初に設定されたセットを上書きします)。
あるコンフィグマップ(またはシークレット)のキーを参照する環境変数を持つアプリ、ジョブ、または関数を、別のコンフィグマップ(またはシークレット)の同じキーを参照するように更新すると、最後に参照されたキーが使用されます。
コンフィグマップ(またはシークレット)を完全に参照する環境変数を持つアプリ、ジョブ、または関数を更新して、特定のキーへの参照を追加すると、特定のキーへの参照がコンフィグマップ(またはシークレット)の完全な参照より優先されます。
環境変数の削除
不要になった環境変数は削除できます。
コンソールからの環境変数の削除
- コンソールから、削除したい環境変数があるアプリ、ジョブ、または関数に移動します。 **「環境変数」**タブをクリックします。
- 環境変数の表から、アプリ、ジョブ、または関数から削除したい環境変数を削除します。
- Save and deployをクリックしてアプリを更新するか、 Saveをクリックして新しい環境変数でジョブや関数を更新します。 アプリ、ジョブ、関数が
Readyの状態になると、現在の環境変数で更新されます。
CLI での環境変数の削除
CLI を使用して環境変数を扱う場合、既存の構成マップまたはシークレットを参照するか、リテラル環境変数を使用することができます。 CLIを使ったリテラル環境変数の削除について説明します。
CLI によるシークレットおよび構成マップの参照先全体の削除については、シークレットおよび構成マップの参照を参照してください。
アプリの環境変数の削除
アプリの環境変数を削除するには、app updateコマンドで--env-rmオプションを使用します。 以下の例では、myapp アプリケーションを更新して envA 環境変数を削除します。
ibmcloud ce application update --name myapp --env-rm envA
ジョブの環境変数の削除
ジョブの環境変数を削除するには、job updateコマンドまたはjobrun resubmitコマンドで--env-rmオプションを使用します。
--env-rm コマンドで job update オプションを使用して、ジョブに設定されている環境変数を削除します。 --env-rm コマンドで jobrun resubmit オプションを使用して、指定したジョブ実行に設定されている環境変数を削除します。
-
以下の例では、
myjobジョブを更新してenvA環境変数を削除します。ibmcloud ce job update --name myjob --env-rm envAjob getコマンドを使用して、その環境変数を含む、ジョブの詳細を表示します。 -
以下の例では、
myjobrun1ジョブ実行を再実行依頼して、envC環境変数を削除します。ibmcloud ce jobrun resubmit --jobrun myjobrun1 --name jobrun2resuba--env-rm envCjobrun getコマンドを実行して、その環境変数を含む、ジョブ実行の詳細を表示します。ibmcloud ce jobrun get --name jobrun2resuba出力例
Getting jobrun 'jobrun2resuba'... Getting instances of jobrun 'jobrun2resuba'... Getting events of jobrun 'jobrun2resuba'... [...] Name: jobrun2resuba [...] Job Ref: myjob Environment Variables: Type Name Value Literal envB BB Image: icr.io/codeengine/codeengine [...] Instances: Name Running Status Restarts Age jobrun2resuba-0-0 0/1 Succeeded 0 21s
関数の環境変数を削除する
自分の関数の環境変数を削除するには、 --env-rm オプションを function update オプションを使ってください。 以下の例では、 myfunction 関数を更新し、 envA 環境変数を削除している。
ibmcloud ce function update --name myfunction --env-rm envA