構成マップの操作

Code Engineで構成マップを処理する方法について説明します。 Code Engineでは、環境変数を使用してアプリ、ジョブ、または関数のワークロードで使用できる構成マップに、キーと値のペアとして情報を保管できます。

構成マップとは何ですか? また、構成マップを使用する理由は何ですか?

Code Engine では、シークレットと構成マップのどちらも、キーと値のペアで構成されています。 環境変数にマップされると、環境変数の名前がマップの各項目の「キー」に対応し、環境変数の値がそのキーの「値」になるように NAME=VALUE の関係が設定されます。

構成マップにより、非機密データ情報をデプロイメントに含めることができます。 configmap の値を環境変数として参照することにより、特定の情報をデプロイメントから分離し、アプリ、ジョブ、または機能を移植可能な状態に保つことができます。 構成マップには、キーと値のペアで情報が格納されます。

シークレットと構成マップは類似したエンティティーであるため (ただし、シークレットはより安全に保管されます)、シークレットと構成マップの対話および処理の方法も同様です。 シークレットについて詳しくは、 シークレットの処理 を参照してください。

作成していない構成マップが表示されています。 削除できますか?

いいえ。 Code Engine は、名前空間に istio-ca-rootkube-root-ca の構成マップを自動的に作成します。 Code Engine は、これらの構成マップを内部で使用します。 これらの構成マップを削除すると、Code Engine によって自動的に再作成されます。

構成マップの作成

Code Engine を使用して構成マップを作成します。

コンソールからの構成マップの作成

Code Engine コンソールを使用して構成マップを作成します。

始めに、プロジェクトを作成します

  1. プロジェクトの状況が 「アクティブ」 になったら、 Code Engine 「プロジェクト」ページでプロジェクトの名前をクリックします。
  2. 「概要」ページで、**「シークレットおよび構成マップ (Secrets and configmaps)」**をクリックします。
  3. 「シークレットおよび構成マップ (Secrets and configmaps)」ページで**「作成」**をクリックして、構成マップを作成します。
  4. 「シークレットまたは構成マップの作成 (Create secret or configmap)」ページで、以下の手順を実行します。
    1. 「Configmap」 をクリックし、 「次へ」 をクリックします。
    2. 名前を指定します (例: myconfigmap)。
    3. **「キーと値のペアを追加 (Add key-value pair)」**をクリックします。 この構成マップのキーと値のペアを 1 つ以上指定します。 例えば 1 つのキーを key1、値 value1 として指定し、別のキーを key2、値 value2 として指定します。 1 つ以上の行に値を指定できることに注意してください。 キーに使用する名前は、環境変数の名前と同じである必要はありません。
    4. **「作成」**をクリックして、構成マップを作成します。

これで構成マップがコンソールから作成されたので、「シークレットと構成マップ (Secrets and configmaps)」ページに移動して、定義済みのシークレットと構成マップのリストを表示します。 必要に応じて、フィルターを適用してリストをカスタマイズすることができます。

CLI での構成マップの作成

Code Engine CLI を使用して構成マップを作成します。

いくつかの方法で構成マップにデータを取り込むことができます。 コマンド・ラインでキーと値のペアを直接指定してデータを取り込むことや、ファイルを指定することができます。

開始前に

ファイルから構成マップを作成 (または更新) する場合、--from-file FILE または --from-file KEY=FILE というフォーマットを使用する必要があります。 Code Engine では、ファイルを使用して configmap 値を指定すると、すべてファイル内の内容がキーと値のペアの値になります。 オプション・フォーマット --from-file KEY=FILE を使用する場合、 KEY は、アプリケーション、ジョブ、または機能のワークロードに認識されている環境変数の名前です。 オプション・フォーマット --from-file FILE を使用する場合、 FILE は、ジョブ、アプリケーション、または機能に認識されている環境変数の名前です。 ファイルに 1 つ以上のキーと値のペアが含まれている場合は、--from-env-file オプションを使用して、指定したファイル内のキーと値の各ペアに環境変数を追加します。 指定されたファイル内の、空または#で始まる行はすべて無視されます。

CLI での構成マップの作成

以下のいずれかの方法で、configmap create コマンドを使用して構成マップを作成します。

  • --from-literal オプションを KEY=VALUE 形式で使用して、コマンド・ラインから構成マップを直接作成します。 以下に例を示します。

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
  • --from-file オプションを使用してファイルを指して、構成マップを作成します。 このオプションを使用すると、ファイルのすべての内容がキーと値のペアの値になります。 この例では、colors.txt というテキストを含む、blue, green, red という名前のファイルを使用します。

    • 以下の例では、--from-file KEY=FILE コマンドで configmap create フォーマットを使用します。

      ibmcloud ce configmap create --name mycolorconfigmap --from-file TARGET=colors.txt
      
    • 以下のコマンド例では、--from-file FILE コマンドで configmap create フォーマットを使用します。 この例では、TARGET (拡張子なし) がファイルの名前です。これは、サンプルの myjob ジョブに認識されている環境変数の名前と同じです。

      ibmcloud ce configmap create --name mycolorconfigmap2  --from-file TARGET
      
  • --from-env-file の形式と一致する行が 1 つ以上含まれるファイルを指す KEY=VALUE オプションを使用して、構成マップを作成します。 指定したファイルにある各行が、キー/値のペアとして追加されます。 指定されたファイル内の、空または#で始まる行はすべて無視されます。 この例では、colors_multi.txtcolor1=yellow、および color2=orange のキーと値のペアを含む、color3=purple という名前のファイルを使用します。

    ibmcloud ce configmap create --name mycolorconfigmapmulti --from-env-file colors_multi.txt
    

CLI での構成マップのリスト

構成マップが作成されたら、configmap list コマンドを使用してプロジェクト内のすべての構成マップをリストするか、configmap get コマンドを使用して特定の構成マップに関する詳細を表示します。 以下に例を示します。

ibmcloud ce configmap get --name mycolorconfigmap

出力例

Getting configmap 'mycolorconfigmap'...
OK

Name:          mycolorconfigmap
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           11s
Created:       2020-10-14 14:10:57 -0400 EDT

Data:
---
TARGET: blue, green, red

構成マップの更新

既存の構成マップのキーと値のペアを変更することができます。

コンソールからの構成マップの更新

既存の構成マップおよびそのキーと値のペアを、コンソールから更新することができます。

  1. 以下のいずれかの方法で、定義済みの構成マップのキーと値のペアをコンソールから更新できます。

    • プロジェクトの「シークレットおよび構成マップ (Secrets and configmaps)」ページに移動し、更新する構成マップを見つけます。 更新する構成マップの名前をクリックして開きます。
    • 構成マップがアプリ、ジョブ、または関数のワークロードによって参照されている場合は、ワークロードの 「環境変数」 タブにある環境変数テーブル内のリンクを使用します。 これらのリンクをクリックすると、構成マップに直接移動します。
  2. **「編集」**をクリックして、構成マップを更新します。

  3. **「保存」**をクリックして、構成マップに対する変更内容を保存します。

更新された構成マップがアプリ、ジョブ、または機能のワークロードによって参照されている場合、新しいデータを有効にするには、ワークロードを再始動する必要があります。

  • アプリ - アプリのページで、**「新規リビジョン (New revision)」をクリックし、「保存してデプロイ (Save and deploy)」**をクリックします。 あるいは、アプリがゼロにスケーリングされるのを待つこともできます。これは、アプリがスケールアップすると、アプリは更新された構成マップを使用するようになります。
  • ジョブ - ジョブのページで**「ジョブの実行依頼」**をクリックしてジョブを実行します。または、ジョブを再実行することもできます。 この新しいジョブ実行で、更新された構成マップが使用されます。
  • 機能-機能は再び呼び出された時に再始動されます。 関数ページで 「関数のテスト」 をクリックすると、関数をテストできます。

CLI を使用した構成マップの更新

CLI を使用して、既存の構成マップおよびそのキーと値のペアを更新できます。

  1. 構成マップ内の、キーと値のペアの値を変更するには、configmap update コマンドを使用します。 myliteralconfigmap キーの値が TARGET から Sunshine に変更されるように、Stranger 構成マップを更新してみましょう。

    ibmcloud ce configmap update --name myliteralconfigmap --from-literal "TARGET=Stranger"
    
  2. これで構成マップが更新されたので、 configmap get コマンドを使用して、特定の構成マップに関する詳細を表示します。 以下に例を示します。

    ibmcloud ce configmap get --name myliteralconfigmap
    

    出力例

    Getting configmap 'myliteralconfigmap'...
    OK
    
    Name:          myliteralconfigmap
    ID:            abcdefgh-abcd-abcd-abcd-c88e2775388e
    Project Name:  myproject
    Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
    Age:           21m
    Created:       2021-05-14T07:57:11-04:00
    
    Data:
    ---
    TARGET: Stranger
    

構成マップの参照

アプリ、ジョブ、または関数のワークロードは、環境変数を使用して構成マップに保管されている情報を取り込んで使用することができます。

コンソールからの構成マップの参照

コンソールを使用して、構成マップを完全に参照するか、構成マップ内の個々のキーを参照するアプリ、ジョブ、または機能のワークロードの環境変数を作成できます。

構成マップを参照するためには、事前にそれが存在している必要があります。 構成マップの作成を参照してください。

コンソールからは、環境変数ごとに定義された構成マップの個々のキーを 1 つだけ参照できます。 構成マップの複数のキーを参照する必要がある場合は、上記のステップを繰り返して、別のキーを参照する別の環境変数を定義します。

  1. アプリ、ジョブ、または関数のワークロードから定義済みの構成マップを参照するには、 環境変数を作成します。 環境変数は、既存の構成マップの全体を参照することも、既存の構成マップ内の個々のキーを参照することもできます。 例えば、myappアプリケーションからmyconfigmap構成マップを完全に参照してみましょう。 構成マップ (またはシークレット) を完全に参照する場合は、オプションでprefixを指定できます。 myconfigmap_などの接頭部を使用すると、各キーにmyconfigmap_という接頭部が付きます。

  2. 環境変数を作成した後、変更を有効にするには、アプリ、ジョブ、または機能のワークロードを再始動する必要があります。 アプリの場合は、アプリを保存してデプロイすることにより、定義した環境変数でアプリを更新します。 ジョブおよび機能の場合、ワークロードは、定義した環境変数を使用して次回呼び出されるときに更新されます。

  3. アプリケーションの状況が**「準備完了 (Ready)」**に変わったら、アプリケーションをテストできます。 **「アプリケーションのテスト (Test application)」をクリックしてから、「アプリケーションのテスト (Test application)」ペインで「要求の送信」をクリックします。 Web ページでアプリケーションを開くには、「アプリケーション URL (Application URL)」**をクリックします。 このmyappの例では、完全に参照されるmyconfigmap構成マップの接頭部を指定したため、この構成マップのすべてのキーは環境変数として参照され、接頭部myconfigmap_が付きます。 例えば、これらの環境変数はmyconfigmap_key1=value1およびmyconfigmap_key2=value2として表示されます。

構成マップを参照する環境変数を更新する方法については、環境変数の更新および環境変数を更新する際の考慮事項を参照してください。

構成マップを参照する環境変数を削除する方法については、環境変数の削除を参照してください。

CLI を使用した構成マップの参照

アプリ、ジョブ、または機能のワークロードで構成マップを使用するには、CLI を使用して、構成マップを完全に参照するか、構成マップ内の個々のキーを参照する環境変数を設定します。

CLI を使用した既存の構成マップの参照

CLI でアプリ、ジョブ、または関数のワークロードで構成マップを使用するには、以下のコマンドで --env-from-configmap オプションを指定します。

以下の例は、CLI を使用してアプリで既存の構成マップを参照する方法を示しています。

  1. configmap create コマンドを使用して、このシナリオの以下の 2 つの構成マップを作成します。

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
    ibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger
    
  2. アプリをデプロイし、myliteralconfigmap 構成マップを参照します。 この例では、helloイメージを使用するアプリを作成します。 このサンプル・アプリに要求を送信すると、このアプリが環境変数 TARGET を読み取り、Hello ${TARGET} を出力します。 この環境変数が空の場合は、Hello World が返されます。 myliteralconfigmap 構成マップを参照します。 この例で使用されるコードについて詳しくは、 helloを参照してください。

    ibmcloud ce app create --name myhelloapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap
    
  3. アプリケーションを呼び出します。 Hello Sunshine 構成マップに指定されている TARGET キーの値である myliteralconfigmap がアプリによって返されます。

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    

    出力例

    Hello Sunshine
    
  4. myliteralconfigmap2 構成マップを使用するように、アプリを再更新します。

    構成マップ (またはシークレット) を完全に参照して別の構成マップ (またはシークレット) を完全に参照する環境変数を使用してアプリ、ジョブ、または関数を更新すると、完全参照は、設定されている順序で他の完全参照をオーバーライドします (最後の参照セットが最初のセットをオーバーライドします)。

    ibmcloud ce app update --name myhelloapp --env-from-configmap myliteralconfigmap2
    

    出力例

    Updating application 'myhelloapp' to latest revision.
    [...]
    Run 'ibmcloud ce application get -n myhelloapp' to check the application status.
    OK
    
    https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    
  5. アプリケーションを再度呼び出します。 今回は、Hello Stranger 構成マップに指定されている値である myliteralconfigmap2 がアプリによって返されます。

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    出力例

    Hello Stranger
    
  6. myliteralconfigmap2 を更新して、キーと値のペアを変更します。

    ibmcloud ce configmap update --name myliteralconfigmap2 --from-literal "TARGET=Happy day"
    

    ibmcloud ce configmap get -n myliteralconfigmap2 コマンドを実行して、構成マップの詳細を表示します。

    出力例

    Name:          myliteralconfigmap2
    [...]
    Data:
    ---
    TARGET: Happy day
    
  7. アプリケーションを再始動して、新しいデータを反映させます。

    ibmcloud ce app update --name myhelloapp
    
  8. アプリケーションを再度呼び出します。 今回は、Hello Happy day 構成マップに指定されている値である myliteralconfigmap2 がアプリによって返されます。

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    出力例

    Hello Happy day
    

CLI を使用した現時点で定義されていない構成マップの参照

参照される前に configmap が存在しない場合、アプリ、ジョブ、または関数のワークロードは正常にデプロイされず、参照される configmap が作成されるまでジョブまたは関数は正常に実行されません。

アプリケーション、ジョブ、または関数のワークロードを処理していて、参照されている configmap がまだ定義されていない場合は、 --force オプションを使用して、参照されている configmap の存在の検証を回避できます。 --force オプションは、以下のコマンドで使用できます。

これらのコマンドで --force オプションを使用すると、ワークロードを作成、更新、または実行するアクションは完了しますが、参照されている configmap が存在するまで、アプリケーション、ジョブ、またはワークロードは正常に実行されません。 コマンドに --force オプションに加えて --no-wait オプションを追加すると、システムはアクションを完了し、ワークロードが正常に実行されるのを待機しません。

以下の例は、CLI を使用してアプリでまだ定義されていない構成マップを参照する方法を示しています。

  1. アプリを作成し、定義されていない myliteralconfigmap3 構成マップを参照します。 この例では、icr.io/codeengine/hello イメージを使用するCode Engineアプリを作成します。 このサンプル・アプリに要求を送信すると、このアプリが環境変数 TARGET を読み取り、Hello ${TARGET} を出力します。 この環境変数が空の場合は、Hello World が返されます。 myliteralconfigmap3 構成マップを参照します。 この例で使用されるコードについて詳しくは、 helloを参照してください。

    **app create**コマンドで--no-waitオプションを使用すると、アプリが作成され、アプリの準備ができるまで待機しません。

    ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap3 --force --no-wait
    
  2. app get コマンドを使用して、環境変数の情報など、ジョブ実行の詳細を表示します。 アプリは作成されますが、まだ完全にデプロイされていないことに注意してください。

    ibmcloud ce app get --name myapp
    

    出力例

    Name:            myapp
    [...]
    Status Summary:  Application is deploying
    
    Environment Variables:
        Type                      Name                 Value
        ConfigMap full reference  myliteralconfigmap3
    Image:                  icr.io/codeengine/hello
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK     Age  Reason
        ConfigurationsReady  false  10s
        Ready                false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
        RoutesReady          false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
    
    Events:
        Type    Reason   Age  Source              Messages
        Normal  Created  12s  service-controller  Created Configuration "myapp"
        Normal  Created  12s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                      Revision      Running  Status   Restarts  Age
        myapp-00001-deployment-566d5c79b9-wttqs  myapp-00001  0/2      Pending  0         11s
    
  3. 構成マップを作成します。

    ibmcloud ce configmap create --name myliteralconfigmap3 --from-literal TARGET=Everyone
    
  4. アプリケーションを再始動して、新しいデータを反映させます。

    ibmcloud ce app update --name myapp
    
  5. アプリケーションを呼び出します。 Hello Everyone 構成マップに指定されている値である myliteralconfigmap3 がアプリによって返されます。

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    出力例

    Hello Everyone
    
  6. myliteralconfigmap2 構成マップを参照するように、アプリを更新します。 myliteralconfigmap2 が値 TARGET=Stranger で定義されます。 アプリを更新すると、アプリが再始動され、新しいデータが反映されます。

    構成マップ (またはシークレット) 全体を参照する環境変数が設定されたアプリケーションまたはジョブを更新して、別の構成マップ (またはシークレット) 全体を参照するように設定すると、参照先全体は設定された順に他の参照先全体をオーバーライドします (後に設定された参照先が、先に設定された参照先をオーバーライドします)。

    ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2
    
  7. アプリケーションを再度呼び出します。 今回は、Hello Stranger 構成マップに指定されている値である myliteralconfigmap2 がアプリによって返されます。

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    出力例

    Hello Stranger
    

CLI でシークレットおよび構成マップの全体を環境変数として参照したり、参照先データをオーバーライドしたり、参照先データを削除したりすることに関する、より詳細なシナリオについては、シークレットおよび構成マップの参照 (Referencing secrets and configmaps) を参照してください。

構成マップの削除

構成マップが不要になったら、削除することができます。

コンソールからの構成マップの削除

  1. コンソールから構成マップを削除するには、以下のようにします。
    1. Code Engine プロジェクト・ページから「Secrets and configmaps」ページに移動します。
    2. 削除する構成マップをクリックして、そのページを開きます。
    3. 特定の構成マップのページで、 「アクション」>「構成マップの削除」 をクリックします。
  2. 特定の構成マップのキーと値のペアをコンソールから削除するには、以下のようにします。
    1. Code Engine プロジェクト・ページから「Secrets and configmaps」ページに移動します。
    2. 変更する configmap をクリックして、そのページを開きます。
    3. 特定の configmap のページから、削除するキーと値のペアを削除します。

シークレットや構成マップを参照する定義済みの環境変数を削除することもできます。 定義済みの環境変数を削除するには、アプリ、ジョブ、または関数の 「環境変数」 タブから、削除する環境変数を削除します。 定義済みの環境変数を削除したら、必ず 「保存」 をクリックして、アプリ、ジョブ、または機能に対する変更を保存してください。 詳しくは、環境変数の削除を参照してください。

CLI を使用した構成マップの削除

  • CLI で構成マップを削除するには、configmap delete コマンドを使用します。以下に例を示します。

    ibmcloud ce configmap delete --name myliteralconfigmap -f
    

    出力例

    Deleting configmap 'myliteralconfigmap'...
    OK
    

CLI を使用して、シークレットや構成マップを参照する環境変数を削除することもできます。