6.10. 関数からのシークレットおよび設定マップへのアクセス

関数がクラスターにデプロイされた後に、それらはシークレットおよび設定マップに保存されているデータにアクセスできます。このデータはボリュームとしてマウントすることも、環境変数に割り当てることもできます。Knative CLI を使用して、このアクセスを対話的に設定するか、関数設定 YAML ファイルを編集して手動で設定できます。

重要

シークレットおよび設定マップにアクセスするには、関数をクラスターにデプロイする必要があります。この機能は、ローカルで実行している関数では利用できません。

シークレットまたは設定マップの値にアクセスできない場合、デプロイメントは失敗し、アクセスできない値を指定するエラーメッセージが表示されます。

6.10.1. シークレットおよび設定マップへの関数アクセスの対話的な変更

kn func config 対話型ユーティリティーを使用して、関数がアクセスするシークレットおよび設定マップを管理できます。使用可能な操作には、config map とシークレットに環境変数として保存されている値の一覧表示、追加、および削除、およびボリュームの一覧表示、追加、および削除が含まれます。この機能を使用すると、クラスターに保存されているどのデータを関数からアクセスできるかを管理できます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数プロジェクトディレクトリーで以下のコマンドを実行します。

    $ kn func config

    あるいは、--path または -p オプションを使用して、関数プロジェクトディレクトリーを指定できます。

  2. 対話型インターフェイスを使用して必要な操作を実行します。たとえば、ユーティリティーを使用して設定したボリュームの一覧を表示すると、以下のような出力が生成されます。

    $ kn func config
    ? What do you want to configure? Volumes
    ? What operation do you want to perform? List
    Configured Volumes mounts:
    - Secret "mysecret" mounted at path: "/workspace/secret"
    - Secret "mysecret2" mounted at path: "/workspace/secret2"

    このスキームは、対話型ユーティリティーで利用可能なすべての操作と、それらに移動する方法を示しています。

    kn func config
       ├─> Environment variables
       │               ├─> Add
       │               │    ├─> ConfigMap: Add all key-value pairs from a config map
       │               │    ├─> ConfigMap: Add value from a key in a config map
       │               │    ├─> Secret: Add all key-value pairs from a secret
       │               │    └─> Secret: Add value from a key in a secret
       │               ├─> List: List all configured environment variables
       │               └─> Remove: Remove a configured environment variable
       └─> Volumes
               ├─> Add
               │    ├─> ConfigMap: Mount a config map as a volume
               │    └─> Secret: Mount a secret as a volume
               ├─> List: List all configured volumes
               └─> Remove: Remove a configured volume
  3. オプション:変更を反映させるため、関数をデプロイします。

    $ kn func deploy -p test

6.10.2. 特殊なコマンドを使用したシークレットおよび設定マップへの関数アクセスの対話的な変更

kn func config ユーティリティーを実行するたびにダイアログ全体を移動して、直前のセクションで示されているように、必要な操作を選択する必要があります。ステップを保存するには、kn func config コマンドのより具体的なフォームを実行することで、特定の操作を直接実行します。

  • 設定した環境変数を一覧表示するには、以下を実行します。

    $ kn func config envs [-p <function-project-path>]
  • 関数設定に環境変数を追加するには、以下を実行します。

    $ kn func config envs add [-p <function-project-path>]
  • 関数設定から環境変数を削除するには、以下を実行します。

    $ kn func config envs remove [-p <function-project-path>]
  • 設定したボリュームを一覧表示するには、以下を実行します。

    $ kn func config volumes [-p <function-project-path>]
  • 関数設定にボリュームを追加するには、以下を実行します。

    $ kn func config volumes add [-p <function-project-path>]
  • 関数設定からボリュームを削除するには、以下を実行します。

    $ kn func config volumes remove [-p <function-project-path>]

6.10.3. シークレットおよび設定マップへの関数アクセスの手動による追加

シークレットおよび設定マップにアクセスするための設定を手動で関数に追加できます。これは、既存の設定スニペットがある場合などに、kn func config 対話型ユーティリティーとコマンドを使用するよりも望ましい場合があります。

6.10.3.1. シークレットのボリュームとしてのマウント

シークレットをボリュームとしてマウントできます。シークレットがマウントされると、関数から通常のファイルとしてアクセスできます。これにより、関数がアクセスする必要がある URI のリストなど、関数が必要とするデータをクラスターに格納できます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. ボリュームとしてマウントするシークレットごとに、以下の YAML を volumes セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - secret: mysecret
      path: /workspace/secret
    • mysecret をターゲットシークレットの名前に置き換えます。
    • /workspace/secret は、シークレットをマウントするパスに置き換えます。

      たとえば、addresses シークレットをマウントするには、次の YAML を使用します。

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/secret-addresses
  3. 設定を保存します。

6.10.3.2. 設定マップのボリュームとしてのマウント

設定マップをボリュームとしてマウントできます。設定マップがマウントされると、関数から通常のファイルとしてアクセスできます。これにより、関数がアクセスする必要がある URI のリストなど、関数が必要とするデータをクラスターに格納できます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. ボリュームとしてマウントする設定マップごとに、以下の YAML を volumes セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - configMap: myconfigmap
      path: /workspace/configmap
    • myconfigmap をターゲット設定マップの名前に置き換えます。
    • /workspace/configmap は、設定マップをマウントするパスに置き換えます。

      たとえば、addresses config map をマウントするには、次の YAML を使用します。

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/configmap-addresses
  3. 設定を保存します。

6.10.3.3. シークレットで定義されるキー値からの環境変数の設定

シークレットとして定義されたキー値から環境変数を設定できます。以前にシークレットに保存された値は、実行時に関数によって環境変数としてアクセスできます。これは、ユーザーの ID など、シークレットに格納されている値にアクセスする場合に役立ちます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. 環境変数に割り当てる秘密鍵と値のペアからの値ごとに、以下の YAML を envs セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ secret:mysecret:key }}'
    • EXAMPLE を環境変数の名前に置き換えます。
    • mysecret をターゲットシークレットの名前に置き換えます。
    • key をターゲット値にマッピングしたキーに置き換えます。

      たとえば、userdetailssecret に保存されているユーザー ID にアクセスするには、次の YAML を使用します。

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailssecret:userid }}'
  3. 設定を保存します。

6.10.3.4. 設定マップで定義されるキー値からの環境変数の設定

config map として定義されたキー値から環境変数を設定できます。以前に config map に格納された値は、実行時に関数によって環境変数としてアクセスできます。これは、ユーザーの ID など、config map に格納されている値にアクセスするのに役立ちます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. 環境変数に割り当てる設定マップのキーと値のペアからの値ごとに、以下の YAML を envs セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ configMap:myconfigmap:key }}'
    • EXAMPLE を環境変数の名前に置き換えます。
    • myconfigmap をターゲット設定マップの名前に置き換えます。
    • key をターゲット値にマッピングしたキーに置き換えます。

      たとえば、userdetailsmap に格納されているユーザー ID にアクセスするには、次の YAML を使用します。

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailsmap:userid }}'
  3. 設定を保存します。

6.10.3.5. シークレットで定義されたすべての値からの環境変数の設定

シークレットで定義されているすべての値から環境変数を設定できます。以前にシークレットに保存された値は、実行時に関数によって環境変数としてアクセスできます。これは、シークレットに格納されている値のコレクション (ユーザーに関する一連のデータなど) に同時にアクセスする場合に役立ちます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. すべてのキーと値のペアを環境変数としてインポートするすべてのシークレットについて、以下の YAML を envs セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ secret:mysecret }}' 1
    1
    mysecret をターゲットシークレットの名前に置き換えます。

    たとえば、userdetailssecret に保存されているすべてのユーザー データにアクセスするには、次の YAML を使用します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailssecret }}'
  3. 設定を保存します。

6.10.3.6. 設定マップで定義されたすべての値からの環境変数の設定

config map で定義されたすべての値から環境変数を設定できます。以前に config map に格納された値は、実行時に関数によって環境変数としてアクセスできます。これは、config map に格納されている値のコレクション (ユーザーに関する一連のデータなど) に同時にアクセスする場合に役立ちます。

前提条件

  • OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
  • Knative (kn) CLI をインストールしている。
  • 関数を作成している。

手順

  1. 関数の func.yaml ファイルを開きます。
  2. すべてのキーと値のペアを環境変数としてインポートするすべての設定マップについて、以下の YAML を envs セクションに追加します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:myconfigmap }}' 1
    1
    myconfigmap をターゲット設定マップの名前に置き換えます。

    たとえば、userdetailsmap に保存されているすべてのユーザー データにアクセスするには、次の YAML を使用します。

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailsmap }}'
  3. ファイルを保存します。