環境変数を使用して、コードを変更することなく、Function Computeの関数の動作を柔軟に調整できます。 環境変数は、関数設定の一部としてキーと値のペアとして格納されます。 異なる関数は、異なる環境変数を有する。 このトピックでは、環境変数に関する基本情報と、環境変数を設定および使用する方法について説明します。 サンプルコードはこのトピックで提供されます。
セキュリティ
環境変数を作成および更新する場合、Function Computeは、環境変数を保存する前に、Advanced Encryption Standard 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。
重要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" }
環境変数が作成されているかどうかを確認します。
関数の設定ページで、コードタブをクリックします。
コードエディターでコードを記述し、[デプロイ] をクリックします。 コードのデプロイ後、[Test Function] をクリックします。
次のサンプルコードは、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を使用して環境変数を構成する
前提条件
サーバーレスのDevsと依存関係がインストールされます。 詳細については、「Serverless Devsと依存関係のインストール」をご参照ください。
サーバーレスDevsが設定されています。 詳細については、「Serverless Devsの設定」をご参照ください。
手順
テスト用のコードディレクトリを作成します。 この例では、
test
ディレクトリが作成されます。test
ディレクトリに移動し、index.py
ファイルとs.yaml
ファイルを作成します。次のサンプルコードは、コードディレクトリを示しています。
. ├── code │ │ └── index.py └── s.yaml
index.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ビルド # hello_worldを追加せずにs buildコマンドを実行すると、Serverless Devsは、次のコメントのnext_functionモジュールなど、現在のYAMLファイルのhello_worldと同じレベルのすべてのビジネスモジュールでビルド操作を実行します。 component: fc3 # コンポーネントの名前。 Serverless Devsはゲームコンソールに似ており、特定のビジネス機能はありません。 コンポーネントはゲームカードに似ています。 ゲームコンソールにさまざまなゲームカードを挿入して、さまざまなゲームをプレイできます。 同様に、さまざまなコンポーネントを使用してさまざまなビジネス機能を実装できます。 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が関数をデプロイすると、Serverless Devsは現在のディレクトリをパッケージ化してアップロードします。
コマンドを実行してプロジェクトをデプロイします。s deploy
コマンドの実行後、Function Computeコンソールにログインして、作成された関数とその関数に設定された2つの環境変数を表示できます。
SDKを使用した環境変数の設定
この例では、Python用のSDKが使用されています。 environmentVariablesパラメーターは、環境変数を指定します。 このパラメータの値は、辞書の形式で格納される。 次のコードスニペットは、環境変数を作成、更新、および取得する方法の例を示しています。
環境変数の作成
# コーディング: utf-8 import fc2 import os client = fc2.Client( endpoint='your endpoint', # エンドポイント。 # プロジェクトコードにAccessKey IDとAccessKey secretを保存しないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 この例では、ID検証を実装するためにAccessKeyペアが環境変数に格納されます。 # サンプルコードを実行する前に、オンプレミス環境でALIBABA_CLOUD_ACCESS_KEY_ID環境変数とALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数を設定します。 # Function Computeのランタイムでは、実行権限を設定すると、環境変数と環境変数が自動的に設定されます。 accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、# RAMコンソールで作成され、ID認証に使用されるAccessKey ID。 accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') # RAMコンソールで作成され、ID認証に使用されるAccessKeyシークレット。 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']
コードでの環境変数の使用
環境変数として {"key":"val"}
を設定したとします。 次のコードは、各ランタイムが変数の値を読み取り、出力する方法を示しています。
var value = process.env.key
console.log(value)
import os
value = os.environ.get('key')
print(valu
System.out.println("value: " + System.getenv("key"));
$value = getenv('key');