FC では、コードを変更することなく、環境変数を使用して関数の動作を柔軟に調整できます。環境変数は、キーと値のペアとして関数の構成に保存されます。すべての関数は、独自の環境変数のセットを使用して動作します。このトピックでは、環境変数の概要と構成方法について説明します。
セキュリティ
環境変数を作成および更新すると、Function Compute は、保存前に高度暗号化標準 256(AES 256)を使用してこれらの変数を暗号化します。関数インスタンスが初期化されると、その環境変数が復号化され、インスタンス環境に挿入されます。
制限
文字セット
キーは文字で始まり、文字と数字のみを含める必要があります。
サイズ
すべての環境変数の合計サイズは 4 KB を超えることはできません。
システム環境変数
システムの混乱を防ぐため、環境変数を構成する際には、予約済みのシステム環境変数 FC_* を使用しないでください。
次のシステム環境変数を使用できます。
FC_FUNC_CODE_PATH: コードのデプロイディレクトリ。
ALIBABA_CLOUD_ACCESS_KEY_ID: ロールの AccessKey ID。
ALIBABA_CLOUD_ACCESS_KEY_SECRET: ロールの AccessKey シークレット。
ALIBABA_CLOUD_SECURITY_TOKEN: ロールのテンポラリトークン。
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: Debian 10 以前の組み込みランタイムの関数バージョンの ID。
FC_FUNCTION_VERSION: Debian 11 以降の組み込みランタイムの関数バージョンの ID。
重要ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN には、第三者に開示してはならない資格情報に関連する機密情報が含まれています。
シナリオ
プラットフォームまたはサービス間でコードを共有する
同じコードベースの構成は、テスト環境と本番環境で異なる場合があります。環境変数を使用して、コードを保存するさまざまな Object Storage Service (OSS) バケット、データベース、またはテーブルを選択できます。これにより、事前の変更なしに、さまざまなプラットフォームにコードをシームレスにデプロイできます。
AccessKey ペアを構成する
環境変数を使用して、Alibaba Cloud AccessKey ペアやデータベース接続のユーザー名とパスワードのペアなど、機密性の高い認証情報を構成できます。
システム変数を構成する
システムディレクトリ内の PATH 変数と HOME 変数を構成できます。
Function Compute コンソールで環境変数を構成する
前提条件
関数の作成が完了していること。詳細については、「関数の作成」をご参照ください。
手順
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 がインストールされていること。詳細については、「クイックスタート」をご参照ください。
Serverless Devs が構成されていること。詳細については、「Serverless Devs の構成」をご参照ください。
手順
テスト用のコードディレクトリを作成します。この例では、
testディレクトリが作成されます。testディレクトリに移動し、index.pyファイルとs.yamlファイルを作成します。次のサンプルコードは、コードディレクトリを示しています。
. ├── code │ └── index.py └── s.yamlindex.pyファイルはコードファイルです。サンプルコードについては、「Function Compute コンソールで環境変数を構成する」をご参照ください。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# をご覧ください。 access: "default" vars: # グローバル変数。 region: "cn-hangzhou" resources: hello_world: # hello_world に対してのみ操作を実行する場合は、コマンドラインに hello_world を追加できます。例: # hello_world のみをビルドする: s hello_world build # hello_world を追加せずに s build コマンドを実行すると、Serverless Devs は、現在の YAML ファイル内の hello_world と同じレベルにあるすべてのビジネスモジュール (次のコメントの next_function モジュールなど) に対してビルド操作を実行します。 component: fc3 # コンポーネントの名前。Serverless Devs はゲームコンソールと考えることができ、コンポーネントがなければ特定のビジネス機能はありません。ただし、ゲームコンソールをさまざまなゲームカードで拡張できるのと同じように、Serverless Devs はさまざまなコンポーネントで拡張できます。各コンポーネントはゲームカードのようなもので、異なるビジネス機能の実装を可能にします。さまざまなコンポーネントを組み合わせることで、ゲームコンソールがさまざまなカードでさまざまなゲームをプレイできるのと同じように、幅広いビジネス機能を実現できます。 # actions: # カスタム実行ロジック。actions の詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions をご覧ください。 props: region: ${vars.region} # 変数の使用方法の詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC をご覧ください。 functionName: envdemo # envdemo という名前の関数を宣言します。 description: 'hello world by serverless devs' runtime: python3 # 関数のランタイムを構成します。 code: ./code handler: index.handler # 関数のハンドラを構成します。 memorySize: 128 timeout: 30 environmentVariables: # 関数に次の環境変数を構成します。 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 シークレットをプロジェクトコードに保存することは避けることをお勧めします。この機密情報が漏洩した場合、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。 # この例では、ID 認証を実装するために、AccessKey ペアが環境変数に保存されています。 # サンプルコードを実行する前に、オンプレミス環境で ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を構成します。 # Function Compute ランタイムでは、実行権限を構成した後、ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が自動的に構成されます。 accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), # AccessKey ID。Resource Access Management (RAM) コンソールで作成され、ID 認証に使用されます。 accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') # AccessKey シークレット。RAM コンソールで作成され、ID 認証に使用されます。 client.create_service('test') client.create_function( 'test', 'test_env', 'python3', 'main.handler', codeDir='/path/to/code/', environmentVariables={'testKey': 'testValue'}) #test: サービス名。 #test_env: 関数名。 #python3: ランタイム。 #main.handler: ハンドラ。 #codeDir: コードディレクトリ。 #environmentVariables: 使用する環境変数。 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']
コードで環境変数を使用する
コードで環境変数を使用する方法の詳細については、「コードで環境変数を使用する」をご参照ください。