すべてのプロダクト
Search
ドキュメントセンター

Function Compute:環境変数

最終更新日:Sep 06, 2024

環境変数を使用して、コードを変更することなく、Function Computeの関数の動作を柔軟に調整できます。 環境変数は、関数設定の一部としてキーと値のペアとして格納されます。 異なる関数は、異なる環境変数を有する。 このトピックでは、環境変数の基本情報と、環境変数を設定してコードで環境変数を使用する方法について説明します。

セキュリティ

Function Computeは、環境変数を作成または更新するときに、環境変数を保存する前にAdvanced Encryption Standard 256 (AES 256) を使用して暗号化します。 関数インスタンスが初期化されると、その環境変数が解読され、関数インスタンスの環境に注入されます。

制限事項

  • 文字セットのルール

    • キーは文字で始まる必要があり、文字と数字のみを含めることができます。

  • サイズ

    すべての環境変数の合計サイズは4 KBを超えることはできません。

  • システム環境変数

    システムの混乱を防ぐために、環境変数を設定するときに、FC_*accessKeyIDaccessKeySecretsecurityTokentopicなど、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。

    重要

    accessKeyIDaccessKeySecretsecurityTokenALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET、およびALIBABA_CLOUD_SECURITY_TOKENを含むシステム環境変数は一時的な機密情報です。 これらの変数を第三者に開示しないでください。

シナリオ

  • プラットフォームまたはサービス間でコードを共有する

    同じコードの構成は、テスト環境と本番環境とで異なる場合があります。 環境変数を使用して、さまざまなObject Storage Service (OSS) バケット、データベース、またはテーブルを選択できます。 これにより、関数コードを変更せずにさまざまなプラットフォームに展開できます。

  • AccessKey ペアの設定

    環境変数を使用して、Alibaba Cloud AccessKeyペアなどのセキュリティに敏感な認証情報、およびデータベースへの接続に使用されるユーザー名とパスワードを設定できます。

  • システム変数の設定

    システムディレクトリでPATH変数とHOME変数を設定できます。

Function Computeコンソールを使用して環境変数を設定する

前提条件

関数が作成されます。 詳細については、「関数の管理」トピックの「関数の作成」セクションをご参照ください。

手順

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。

  3. 関数ページで、変更した関数を見つけてクリックします。設定で、アクション列を作成します。

  4. では、環境変数関数の詳細ページのセクションで、環境変数を設定する方法を選択し、保存 をクリックします。

    • フォームエディタ (デフォルト)

      1. [+ 変数の追加] をクリックします。

      2. 環境変数のキーと値のペアを設定します。

        • 変数: カスタム変数を入力します。

        • : 変数値を入力します。

        サンプルコード:

        sc_edit_environment_variables

    • JSONエディター

      1. [JSONエディター] をクリックします。

      2. コードエディターで、次のJSON形式でキーと値のペアを入力します。

        {
            "key": "value"
        }

        サンプルコード:

        {
            "BUCKET_NAME": "MY_BUCKET",
            "TABLE_NAME": "MY_TABLE"
        }
  5. 環境変数が作成されているかどうかを確認します。

    1. 関数の詳細ページで、コードタブをクリックします。

    2. コードエディターで関数コードを記述し、[保存してデプロイ] をクリックします。 関数のデプロイ後、[関数のテスト] をクリックします。

      次のサンプルコードは、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"
    3. [コード] タブで、ログを表示できます。

      印刷されたログからわかるように、環境変数が作成されます。

Serverless Devsを使用して環境変数を構成する

前提条件

手順

  1. テスト用のコードディレクトリを作成します。 たとえば、ディレクトリの名前はtestです。

  2. に移動します。Go to theテストという名前のファイルを作成します。index.py「Function Computeコンソールを使用した環境変数の設定」セクションのコードに基づいています。

  3. 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.
  4. のデプロイコマンドを実行してプロジェクトをデプロイします。

    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"));

トラブルシューティング

関数のバージョンごとに異なる環境変数を設定できますか?

はい。 LATESTバージョンの関数の環境変数を設定してバージョンを公開した後、LATESTバージョンの環境変数を変更できます。 このように、LATESTバージョンと公開バージョンとの間の関数の環境変数は異なる。

環境変数の値を平文で表示したくない場合はどうすればよいですか? 関数の環境変数を設定するときに機密データを暗号化する方法を教えてください。

Key Management Serviceで環境変数を暗号化および保存できます。 環境変数をKMSに保存する前に、必ず暗号化してください。 関数を実行する前に、KMS APIを呼び出して環境変数を復号化し、関数のランタイムで変数を設定できます。 詳細については、「KMSとは何ですか?」をご参照ください。