環境変数を使用すると、コードを変更することなく FC 関数の動作を調整できます。環境変数は、関数の構成に保存される文字列のキーと値のペアです。各関数には、独自の環境変数のセットがあります。このトピックでは、環境変数の基本と設定方法について説明します。
セキュリティ
環境変数を作成または更新すると、Function Compute は高度暗号化標準 256 (AES-256) を使用して保存時に暗号化します。関数インスタンスが初期化されると、変数は復号され、インスタンス環境に挿入されます。
制限事項
-
文字セットのルール
-
キーは文字で始まる必要があり、文字、数字、アンダースコア (_) のみを含めることができます。
-
-
サイズ制限
すべての環境変数の合計サイズは 4 KB を超えることはできません。
-
予約済みシステム環境変数
システムの競合を防ぐため、予約済みのプレフィックス FC_* を持つ環境変数は使用できません。
FC は、次のシステム環境変数をサポートしています。
-
FC_FUNC_CODE_PATH:コードのデプロイメントディレクトリ。
-
ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN:関数の実行ロールから取得した一時的な認証情報。AccessKey ID、AccessKey Secret、および一時的なトークンが含まれます。
-
FC_ACCOUNT_ID:ユーザー ID。
-
FC_FUNCTION_HANDLER:関数ハンドラ。
-
FC_FUNCTION_MEMORY_SIZE:関数に設定されたメモリサイズ (MB)。
-
FC_FUNCTION_NAME:関数名。
-
FC_REGION:関数が存在するリージョン。
-
FC_CUSTOM_LISTEN_PORT:関数のカスタムリスニングポート。
-
FC_INSTANCE_ID:関数インスタンスの ID。
-
FC_VER_ID:関数バージョンの ID。この変数は、Debian 10 以前の組み込みランタイムで利用できます。
-
FC_FUNCTION_VERSION:関数バージョンの ID。この変数は、Debian 11 以降の組み込みランタイムで利用できます。
-
利用シーン
-
プラットフォームやサービス間でコードを共有する
環境変数を使用して、テスト環境と本番環境で異なる構成を管理できます。たとえば、異なる Object Storage Service (OSS) バケット、データベース、またはテーブルを指定できます。これにより、同じコードベースを修正することなく、複数のプラットフォームにデプロイできます。
-
認証情報を設定する
データベース接続の認証情報、Alibaba Cloud AccessKey、またはその他の機密性の高い認証情報を環境変数を使用して設定できます。
-
システム変数を設定する
PATH や HOME などのディレクトリを設定することで、システムライブラリをより柔軟に使用できます。
環境変数の設定
コンソール
前提条件
関数が作成されていること。詳細については、「関数の作成」をご参照ください。
操作手順
-
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
上部のナビゲーションバーで、リージョンを選択します。関数リスト ページで、対象の関数をクリックします。
-
関数の詳細ページで、設定 タブをクリックし、詳細設定 セクションで 変更 をクリックします。
-
詳細設定 パネルの 環境変数 で、次のいずれかの方法で変数を設定し、デプロイ をクリックします。
-
フォームエディターを使用する
-
[+ 変数を追加] をクリックします。
-
環境変数のキーと値のペアを設定します。
-
変数:カスタムキーを入力します。
-
値:カスタム値を入力します。
-
-
-
JSON エディターを使用する
-
[JSON 形式を使用して編集] をクリックします。
-
テキストボックスに、次の例のようにキーと値のペアを JSON 形式で入力します。
{ "key": "value" }例:
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
-
-
-
環境変数が有効になったことを確認します。
-
関数の詳細ページで、コード タブをクリックします。
-
コードエディターでコードを記述し、デプロイメントコード をクリックします。デプロイが成功したら、関数のテスト をクリックします。
次の Python イベント関数のサンプルコードは、環境変数を確認する方法を示しています。
# -*- coding: utf-8 -*- import logging import os def handler(event, context): logger = logging.getLogger() value = os.environ.get('BUCKET_NAME') logger.info('BUCKET_NAME: {}'.format(value)) value = os.environ.get('TABLE_NAME') logger.info('TABLE_NAME: {}'.format(value)) return "done" -
コード タブで、ログ出力 を表示します。関数が正常に実行されると、設定された環境変数がログに表示されます。
-
Serverless Devs
前提条件
Serverless Devs がインストールされ、設定されていること。詳細については、「クイックスタート」をご参照ください。
操作手順
-
テスト用のコードディレクトリ (例:
test) を作成します。 -
testディレクトリに移動し、index.pyファイルとs.yamlファイルを作成します。コードディレクトリの構造は次のとおりです。
. ├── code │ └── index.py └── s.yamlindex.pyファイルには、関数コードが含まれています。サンプルコードについては、「コンソール」セクションの例をご参照ください。s.yamlファイルは、関数の構成ファイルです。以下に例を示します。edition: 3.0.0 name: hello-world-app # access: アプリケーションに必要な認証情報を指定します。 # 認証情報の設定方法の詳細については、https://www.serverless-devs.com/serverless-devs/command/config をご参照ください。 # 認証情報の優先順位の詳細については、https://www.serverless-devs.com/serverless-devs/tool#credential-priority-and-specifications をご参照ください。 access: "default" vars: # グローバル変数 region: "cn-hangzhou" resources: hello_world: # hello_world のような特定のサービスに対してのみ操作を実行するには、コマンドでその名前を指定します。例: # hello_world サービスのみをビルドする場合:s hello_world build # サービスを指定せずに s build コマンドを実行すると、Serverless Devs は YAML ファイル内で hello_world と同じレベルにあるすべてのサービスに対してビルド操作を実行します。 component: fc3 # コンポーネント名。Serverless Devs はコンポーネントを使用して機能を拡張します。このコンポーネントは Function Compute の機能を有効にします。 # actions: # カスタム実行ロジック。詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#actions をご参照ください。 props: region: ${vars.region} # 変数の使用方法の詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#variable-assignment をご参照ください。 functionName: envdemo # envdemo という名前の関数を宣言します。 description: 'hello world by serverless devs' runtime: python3 # 関数のランタイムを指定します。 code: ./code handler: index.handler # 関数のハンドラを指定します。 memorySize: 128 timeout: 30 environmentVariables: # 関数に 2 つの環境変数を設定します。 BUCKET_NAME: MY_BUCKET TABLE_NAME: MY_TABLE codeUri: ./ # 現在のディレクトリ「./」から関数をデプロイします。デプロイ中、Serverless Devs は現在のディレクトリをパッケージ化してアップロードします。 -
s deployコマンドを実行してプロジェクトをデプロイします。デプロイが成功したら、Function Compute コンソールにログインして、作成された関数とその環境変数を確認できます。
SDK
次の例では Python SDK を使用します。environmentVariables パラメーターは辞書を受け入れ、環境変数を指定します。サンプルコードは、環境変数の作成、更新、および取得方法を示しています。
-
環境変数の作成
# coding: utf-8 import fc2 import os client = fc2.Client( endpoint='your endpoint', # エンドポイント。 # コードに AccessKey ID と AccessKey Secret を保存しないことを推奨します。 # このような機密情報が漏洩すると、リソースのセキュリティが損なわれる可能性があります。 # この例では、認証に環境変数を使用します。 # このコードを実行する前に、ローカルで ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。 accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), # 認証に使用する AccessKey ID。RAM コンソールで作成および管理できます。 accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') # 認証に使用する AccessKey Secret。RAM コンソールで作成および管理できます。 ) client.create_service('test') client.create_function( 'test', # サービス名。 'test_env', # 関数名。 'python3', # ランタイム。 'main.handler', # ハンドラ。 codeDir='/path/to/code/', # コードディレクトリ。 environmentVariables={'testKey': 'testValue'} # 設定する環境変数。 ) res = client.get_function('test', 'test_env') print(res.data) -
環境変数の更新
client.update_function( 'test', 'test_env', 'python3', 'main.handler', codeDir='/path/to/code/', environmentVariables={'newKey': 'newValue'}) res = client.get_function('test', 'test_env') print(res.data) -
環境変数の取得
resp = client.get_function('test', 'test_env') env = func['environmentVariables']
コードでの環境変数の使用
環境変数 {"key":"val"} を設定したと仮定して、次の例は、さまざまなランタイムでその値を読み取る方法を示しています。
var value = process.env.key
console.log(value)import os
value = os.environ.get('key')
print(value)$value = getenv('key');System.out.println("value: "+ System.getenv("key"));string value = Environment.GetEnvironmentVariable("key");
Console.WriteLine("value: {0}", value);var value = os.Getenv("key")
fmt.Printf("value: %s\n", value)