環境変数を使用して、コードを変更することなく、Function Computeの関数の動作を柔軟に調整できます。 環境変数は、関数設定の一部としてキーと値のペアとして格納されます。 異なる関数は、異なる環境変数を有する。 このトピックでは、環境変数の基本情報と、環境変数を設定してコードで環境変数を使用する方法について説明します。
セキュリティ
Function Computeは、環境変数を作成または更新するときに、環境変数を保存する前にAdvanced Encryption Standard 256 (AES 256) を使用して暗号化します。 関数インスタンスが初期化されると、その環境変数が解読され、関数インスタンスの環境に注入されます。
制限事項
文字セットのルール
キーは文字で始まる必要があり、文字と数字のみを含めることができます。
サイズ
すべての環境変数の合計サイズは4 KBを超えることはできません。
システム環境変数
システムの混乱を防ぐために、環境変数を設定するときに、FC_* 、accessKeyID、accessKeySecret、securityToken、topicなど、Function Computeによって予約されているシステム環境変数を使用することはできません。
次のシステム环境変数を使用できます。
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_SERVICE_NAME: 関数が属するサービスの名前。
FC_CUSTOM_LISTEN_PORT: 関数のカスタムリスニングポート。
FC_INSTANCE_ID: 関数インスタンスのID。
FC_QUALIFIER: 関数が属するサービスのエイリアス。 デフォルト値: LATEST。
重要accessKeyID、accessKeySecret、securityToken、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を使用して環境変数を構成する
前提条件
手順
テスト用のコードディレクトリを作成します。 たとえば、ディレクトリの名前は
test
です。に移動します。Go to the
テスト
という名前のファイルを作成します。index.py
「Function Computeコンソールを使用した環境変数の設定」セクションのコードに基づいています。s.yaml
ファイルを作成します。ファイルの内容:
edition: 1.0.0 name: transform_fun access: default vars: region: cn-shenzhen services: fc-Demo-envdemo: component: devsapp/fc props: region: ${vars.region} service: name: Demo # Declare a service named Demo. internetAccess: true function: name: envdemo # Declare a function named envdemo in the Demo service. handler: index.handler # Configure a handler for the function. runtime: python3 # Specify the runtime for the function. environmentVariables: # Configure the following environment variables for the function: BUCKET_NAME: MY_BUCKET TABLE_NAME: MY_TABLE codeUri: ./ # Deploy the function in the current directory ./. When Serverless Devs deploys the function, Serverless Devs packages and uploads the current directory.
のデプロイ
コマンドを実行してプロジェクトをデプロイします。s deployコマンドを実行した後、Function Computeコンソールにログインして、作成したサービスと関数、および関数用に設定した環境変数を表示できます。
SDKを使用した環境変数の設定
この例では、Python用のSDKが使用されています。 environmentVariablesパラメーターは、環境変数を指定します。 このパラメータの値は、辞書の形式で格納される。 次のサンプルコードは、環境変数を作成、更新、および取得する方法を示しています。
環境変数の作成
# coding: utf-8 import fc2 import os client = fc2.Client( endpoint='your endpoint', # The endpoint. # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a Resource Access Management (RAM) user to call API operations or perform routine O&M. # We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources in your account may be compromised. In this example, the AccessKey pair is stored in environment variables to implement identity authentication. # Configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables in your local environment before you run the sample code. # In runtimes of Function Compute, the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are automatically configured after you configure the execution permissions. accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), # The AccessKey ID, which is created in the RAM console and used for identity authentication. accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') # The AccessKey secret, which is created in the RAM console and used for identity authentication. client.create_service('test') client.create_function( 'test', 'test_env', 'python3', 'main.handler', codeDir='/path/to/code/', environmentVariables={'testKey': 'testValue'}) #test: the name of the service. #test_env: the name of the function. #python3: the runtime. #main.handler: the handler. #codeDir: the code directory. #environmentVariables: the environment variables that you want to configure. 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)
System.out.println("value: "+ System.getenv("key"))
$value = getenv('key');
Console.WriteLine(Environment.GetEnvironmentVariable("key"));