11.8. func.yaml の関数プロジェクト設定
func.yaml
ファイルには、関数プロジェクトの設定が含まれます。kn func
コマンドを実行すると、func.yaml
に指定された値が使用されます。たとえば、kn func build
コマンドを実行すると、build
フィールドの値が使用されます。一部のケースでは、この値はコマンドラインフラグまたは環境変数で上書きできます。
11.8.1. func.yaml の設定可能なフィールド
func.yaml
のフィールドの多くは、関数の作成、ビルド、およびデプロイ時に自動的に生成されます。ただし、関数名またはイメージ名などの変更用に手動で変更するフィールドもあります。
11.8.1.1. buildEnvs
buildEnvs
フィールドを使用すると、関数をビルドする環境で利用できる環境変数を設定できます。envs
を使用して設定する変数とは異なり、buildEnv
を使用して設定する変数は、関数の実行時には使用できません。
buildEnv
変数を値から直接設定できます。以下の例では、EXAMPLE1
という名前の buildEnv
変数に値 one
が直接割り当てられます。
buildEnvs: - name: EXAMPLE1 value: one
また、ローカルの環境変数から buildEnv
変数を設定することもできます。以下の例では、EXAMPLE2
という名前の buildEnv
変数にローカル環境変数 LOCAL_ENV_VAR
の値が割り当てられます。
buildEnvs: - name: EXAMPLE1 value: '{{ env:LOCAL_ENV_VAR }}'
11.8.1.2. envs
envs
フィールドを使用すると、ランタイム時に関数で使用できるように環境変数を設定できます。環境変数は、複数の異なる方法で設定できます。
- 値から直接設定します。
- ローカル環境変数に割り当てられた値から設定します。詳細は、func.yaml フィールドからのローカル環境変数の参照のセクションを参照してください。
- シークレットまたは設定マップに格納されているキーと値のペアから設定します。
- 作成された環境変数の名前として使用されるキーを使用して、シークレットまたは設定マップに格納されているすべてのキーと値のペアをインポートすることもできます。
以下の例は、環境変数を設定するさまざまな方法を示しています。
name: test namespace: "" runtime: go ... envs: - name: EXAMPLE1 1 value: value - name: EXAMPLE2 2 value: '{{ env:LOCAL_ENV_VALUE }}' - name: EXAMPLE3 3 value: '{{ secret:mysecret:key }}' - name: EXAMPLE4 4 value: '{{ configMap:myconfigmap:key }}' - value: '{{ secret:mysecret2 }}' 5 - value: '{{ configMap:myconfigmap2 }}' 6
11.8.1.3. builder
builder
フィールドは、機能がイメージを構築するために使用する戦略を指定します。pack
または s2i
の値を受け入れます。
11.8.1.4. build
build
フィールドは、機能を構築する方法を示します。値 local
は、機能がマシン上でローカルに構築されていることを示します。値 git
は、機能が git
フィールドで指定された値を使用してクラスター上に構築されていることを示します。
11.8.1.5. volumes
以下の例のように、volumes
フィールドを使用すると、指定したパスで関数にアクセスできるボリュームとしてシークレットと設定マップをマウントできます。
name: test namespace: "" runtime: go ... volumes: - secret: mysecret 1 path: /workspace/secret - configMap: myconfigmap 2 path: /workspace/configmap
11.8.1.6. オプション
options
フィールドを使用すると、自動スケーリングなど、デプロイされた関数の Knative Service プロパティーを変更できます。これらのオプションが設定されていない場合は、デフォルトのオプションが使用されます。
これらのオプションを利用できます。
scale
-
min
: レプリカの最小数。負ではない整数でなければなりません。デフォルトは 0 です。 -
max
: レプリカの最大数。負ではない整数でなければなりません。デフォルトは 0 で、これは制限がないことを意味します。 -
metric
: Autoscaler によって監視されるメトリクスタイプを定義します。これは、デフォルトのconcurrency
、またはrps
に設定できます。 -
target
: 同時に受信する要求の数に基づくスケールアップのタイミングの推奨。target
オプションは、0.01 より大きい浮動小数点値を指定できます。options.resources.limits.concurrency
が設定されていない限り、デフォルトは 100 になります。この場合、target
はデフォルトでその値になります。 -
utilization
: スケールアップする前に許可された同時リクエスト使用率のパーセンテージ。1 から 100 までの浮動小数点値を指定できます。デフォルトは 70 です。
-
resources
requests
-
cpu
: デプロイされた関数を持つコンテナーの CPU リソース要求。 -
memory
: デプロイされた関数を持つコンテナーのメモリーリソース要求。
-
limits
-
cpu
: デプロイされた関数を持つコンテナーの CPU リソース制限。 -
memory
: デプロイされた関数を持つコンテナーのメモリーリソース制限。 -
concurrency
: 単一レプリカによって処理される同時要求のハード制限。0 以上の整数値を指定できます。デフォルトは 0 です (制限なしを意味します)。
-
これは、scale
オプションの設定例です。
name: test namespace: "" runtime: go ... options: scale: min: 0 max: 10 metric: concurrency target: 75 utilization: 75 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 1000m memory: 256Mi concurrency: 100
11.8.1.7. image
image
フィールドは、関数がビルドされた後の関数のイメージ名を設定します。このフィールドは必要に応じて変更できます。変更する場合、次に kn func build
または kn func deploy
を実行すると、関数イメージは新しい名前で作成されます。
11.8.1.8. imageDigest
imageDigest
フィールドには、関数のデプロイ時のイメージマニフェストの SHA256 ハッシュが含まれます。この値は変更しないでください。
11.8.1.9. labels
labels
フィールドを使用すると、デプロイされた関数にラベルを設定できます。
値から直接ラベルを設定できます。以下の例では、role
キーを持つラベルに backend
の値が直接割り当てられます。
labels: - key: role value: backend
ローカル環境変数からラベルを設定することもできます。以下の例では、author
キーの付いたラベルに USER
ローカル環境変数の値が割り当てられます。
labels: - key: author value: '{{ env:USER }}'
11.8.1.10. name
name
フィールドは、関数の名前を定義します。この値は、デプロイ時に Knative サービスの名前として使用されます。このフィールドを変更して、後続のデプロイメントで関数の名前を変更できます。
11.8.1.11. namespace
namespace
フィールドは、関数がデプロイされる namespace を指定します。
11.8.1.12. runtime
runtime
フィールドは、関数の言語ランタイムを指定します (例: python
)。
11.8.2. func.yaml フィールドからのローカル環境変数の参照
API キーなどの機密情報を関数設定に保存したくない場合は、ローカル環境で使用可能な環境変数への参照を追加できます。これを行うには、func.yaml
ファイルの envs
フィールドを変更します。
前提条件
- 関数プロジェクトを作成する必要があります。
- ローカル環境には、参照する変数が含まれている必要があります。
手順
ローカル環境変数を参照するには、以下の構文を使用します。
{{ env:ENV_VAR }}
ENV_VAR
を、使用するローカル環境の変数の名前に置き換えます。たとえば、ローカル環境で
API_KEY
変数が利用可能な場合があります。その値をMY_API_KEY
変数に割り当てることができます。これにより、関数内で直接使用できます。関数の例
name: test namespace: "" runtime: go ... envs: - name: MY_API_KEY value: '{{ env:API_KEY }}' ...