# ConfigMapからの環境変数の注入

Kubernetes ConfigMapを使用して、機密性の低い構成情報(APIエンドポイント、機能フラグ、アプリケーション設定など)を環境変数として、データ統合タスク(ビッグデータを含む)、データサービス、ルートタスクに提供します。

## 始める前に

[前提条件および重要な考慮事項](https://help.qlik.com/talend/ja-JP/dynamic-engine-configuration-guide/Cloud/custom-kubernetes-resource-mounting)をご覧ください。

## 手順

1. 環境変数を含むConfigMapリソースファイルを用意します。
   ### 例

   たとえば、configmap-external-config.yamlという名前のファイルを作成します。
   ```
   cat <<EOF > configmap-external-config.yaml
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: external-config
     namespace: qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID
   data:
     API_ENDPOINT: "https://api.example.com/v1"
     FEATURE_FLAG_ENABLED: "true"
     LOG_LEVEL: "INFO"
     MAX_RETRIES: "3"
   EOF
   ```

   $DYNAMIC\_ENGINE\_ENVIRONMENT\_IDを自分の環境IDに置き換え、設定値を実際のデータに合わせて更新します。
2. ConfigMapを参照するHelm値ファイルを作成します。
   ### 例

   configmap-values.yamlという名前のファイルを作成します。内容は、このConfigMapを使用するタスクの種類に応じて異なります。
   * データ統合タスクの場合:
     ```
     configuration:
       jobDeployment:
         additionalSpec:
           enabled: true
           envFrom:
             - configMapRef:
                 name: external-config
     ```
   * データサービスおよびルートタスクの場合:
     ```
     configuration:
       dataServiceRouteDeployment:
         additionalSpec:
           enabled: true
           envFrom:
             - configMapRef:
                 name: external-config
     ```
   * 両方を組み合わせた場合:
     ```
     configuration:
       jobDeployment:
         additionalSpec:
           enabled: true
           envFrom:
             - configMapRef:
                 name: external-config

       dataServiceRouteDeployment:
         additionalSpec:
           enabled: true
           envFrom:
             - configMapRef:
                 name: external-config
     ```

   情報メモヒント: additionalSpec.envFrom.configMapRef構造を使用すると、ConfigMapからすべてのキーが環境変数として読み込まれます。すべてのキーは、API\_ENDPOINTまたはFEATURE\_FLAG\_ENABLEDなど、ConfigMapで指定されたとおりの正確な名前で使用できるようになります。
3. 必要なネームスペースがまだ作成されていない場合は、Dynamic Engine環境をデプロイまたはアップグレードしてネームスペースを作成します。
   ```
   helm upgrade --install dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
     oci://ghcr.io/talend/helm/dynamic-engine-environment \
     --version ${DYNAMIC_ENGINE_VERSION} \
     -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml
   ```

   ${DYNAMIC\_ENGINE\_VERSION}を自分の環境のバージョンに置き換えます。

   このコマンドを実行すると、Dynamic Engine環境とそれに関連付けられたネームスペースqlik-processing-env-$DYNAMIC\_ENGINE\_ENVIRONMENT\_IDを作成します。
4. Dynamic Engine環境のネームスペースにConfigMapを作成します。
   ```
   kubectl apply -f configmap-external-config.yaml
   ```

   このコマンドにより、Kubernetesクラスター内にConfigMapリソースが作成されます。作成されたConfigMapは、環境ネームスペース内のすべてのポッドで使用できます。
5. このConfigMap設定を使用して、Dynamic Engine環境をアップグレードします。
   ```
   helm upgrade dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
     oci://ghcr.io/talend/helm/dynamic-engine-environment \
     --version ${DYNAMIC_ENGINE_VERSION} \
     -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml \
     -f configmap-values.yaml
   ```

   ${DYNAMIC\_ENGINE\_VERSION}を自分の環境のバージョンに置き換えます。

   このコマンドにより、ConfigMap設定がDynamic Engine環境に適用されます。これにより、環境変数はデプロイされたすべてのタスクで使用可能になります。
6. 実行中のポッドでConfigMapからの環境変数を使用できることを確認します。
   ```
   kubectl get pod -n qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID <pod-name> \
     -o jsonpath='{.spec.containers[*].envFrom}'
   ```

   想定される出力結果には、次のConfigMapへの参照が含まれている必要があります。
   ```
   [{"configMapRef":{"name":"external-config"}}]
   ```

## タスクの結果

Dynamic Engine環境では、Kubernetes ConfigMapの設定に環境変数としてアクセスできます。

ConfigMapの変数を更新すると、変更は次のように適用されます。

* ジョブ(データ統合、ビッグデータタスクを含む)は一度限りのタスクです。更新された値は、次回のタスク実行開始時に読み込まれます。
* ルートとデータサービスは常時稼働するタスクであり、ConfigMapの変更は自動的に再読み込みされません。[Talend Management Consoleでタスクを更新する](https://help.qlik.com/talend/ja-JP/dynamic-engine-configuration-guide/Cloud/updating-data-service-and-route-tasks-in-dee "Dynamic Engine環境にデプロイされたデータサービスやルートタスクは、ダウンタイムなしでそのアーティファクトバージョンをアップデートしたり、設定を変更したりできます。")ことで、Dynamic Engine環境への再デプロイがトリガーされます。