使用 Lambda 環境變數來設定程式碼中的值 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Lambda 環境變數來設定程式碼中的值

您可以使用環境變數來調整函數的行為,而無需更新程式碼。環境變數是存放在函數特定版本組態中的一對字串。Lambda 執行時間可讓程式碼使用環境變數,並設定其他環境變數,這些變數包含函數和調用請求的相關資訊。

注意

為了提高安全性,我們建議您不要使 AWS Secrets Manager 用環境變數來儲存資料庫認證和其他敏感資訊,例如API金鑰或授權 Token。如需詳細資訊,請參閱使用建立和管理密碼 AWS Secrets Manager

在函數調用之前,不會評估環境變數。您定義的任何值都會視為文字字串,而且不會展開。在函數程式碼中執行變數評估。

您可以使用 Lambda 主控台 AWS Command Line Interface (AWS CLI)、 AWS Serverless Application Model (AWS SAM) 或使用 AWS SDK.

Console

您可以在函數的未發佈版本上定義環境變數。當您發佈版本時,會鎖定該版本的環境變數以及其他版本特定組態設定

您可以透過定義索引鍵和值,為函數建立環境變數。函數使用索引鍵的名稱來擷取環境變數的值。

在 Lambda 主控台中設定環境變數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇一個函數。

  3. 選擇 Configuration (組態),然後選擇 Environment variables (環境變數)。

  4. Environment variables (環境變數) 下,選擇 Edit (編輯)。

  5. 選擇 Add environment variable (新增環境變數)。

  6. 輸入索引鍵和值。

    請求
    • 索引鍵需以英文字母為開頭,且至少有兩個字元。

    • 索引鍵僅包含字母、數字和底線字元 (_)。

    • 索引鍵不是由 Lambda 預留

    • 所有環境變數的大小總計不超過 4 KB。

  7. 選擇 Save (儲存)。

在主控台程式碼編輯器中產生環境變數清單

可在 Lambda 程式碼編輯器中產生環境變數清單。這是在編碼時參考環境變數的快速方法。

  1. 選擇 程式碼 標籤。

  2. 選擇環境變數索引標籤。

  3. 選擇工具顯示環境變數

在主控台程式碼編輯器中列出環境變數時,會保持加密狀態。如果在傳輸過程中啟用加密協助程式進行加密,則這些設定會維持不變。如需詳細資訊,請參閱保護 Lambda 環境變數

環境變數清單為唯讀狀態,且只能在 Lambda 主控台中使用。下載函數的 .zip 封存檔時,不會包含此檔案,且您無法透過上傳此檔案來新增環境變數。

AWS CLI

下列範例會在名為 my-function 的函數上設定兩個環境變數。

aws lambda update-function-configuration \ --function-name my-function \ --environment "Variables={BUCKET=amzn-s3-demo-bucket,KEY=file.txt}"

當您使用 update-function-configuration 命令套用環境變數時,會取代 Variables 結構的整個內容。若要在新增環境變數時保留現有的環境變數,請在請求中包含所有現有值。

若要取得目前的組態,請使用 get-function-configuration 命令。

aws lambda get-function-configuration \ --function-name my-function

您應該會看到下列輸出:

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::111122223333:role/lambda-role", "Environment": { "Variables": { "BUCKET": "amzn-s3-demo-bucket", "KEY": "file.txt" } }, "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15", ... }

可以從 get-function-configuration 的輸出中將修訂 ID 作為參數傳遞給 update-function-configuration。這樣可確保在讀取組態和更新組態期間,值不會變更。

若要設定函數的加密金鑰,請設定 KMSKeyARN 選項。

aws lambda update-function-configuration \ --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:111122223333:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
AWS SAM

您可以使用AWS Serverless Application Model來設定函數的環境變數。更新文template.yaml件中的環境變量屬性,然後運行 sam 部署

範例 template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Application Model template describing your function. Resources: my-function: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 120 Handler: index.handler Runtime: nodejs18.x Architectures: - x86_64 EphemeralStorage: Size: 10240 Environment: Variables: BUCKET: amzn-s3-demo-bucket KEY: file.txt # Other function properties...
AWS SDKs

若要使用管理環境變數 AWS SDK,請使用下列API作業。

若要進一步了解,請參閱AWS SDK文件以取得您偏好的程式設計語言。

定義執行時間環境變數

Lambda 執行時間會在初始化期間設定數個環境變數。大多數的環境變數都會提供函數或執行時間的資訊。這些環境變數的索引鍵都已進行預留,無法在您的函數組態中設定。

預留環境變數
  • _HANDLER - 在函數中設定的處理常式位置。

  • _X_AMZN_TRACE_ID - X-Ray 追蹤標頭。此環境變數會隨著每次調用而變更。

    • 未針對僅限作業系統的執行期 (provided 執行期系列) 定義此環境變數。您可以使用 下次調用 中的 Lambda-Runtime-Trace-Id 回應標頭為自訂執行階段設定 _X_AMZN_TRACE_ID

    • 對於 Java 執行期版本 17 及更高版本,不使用此環境變數。相反地,Lambda 會將追蹤資訊儲存在 com.amazonaws.xray.traceHeader 系統屬性中。

  • AWS_DEFAULT_REGION— 執行 Lambda 函數的預設值 AWS 區域 。

  • AWS_REGION— 執行 Lambda 函數的 AWS 區域 位置。若已完成定義,此值便會覆寫 AWS_DEFAULT_REGION

    • 若要取得有關搭配使用 AWS 區域 環境變數的詳細資訊 AWS SDKs,請參閱《AWS SDKs和工具參考指南》中的〈Re AWS gion〉。

  • AWS_EXECUTION_ENV執行時間識別符,字首為 AWS_Lambda_ (例如,AWS_Lambda_java8)。未針對僅限作業系統的執行期 (provided 執行期系列) 定義此環境變數。

  • AWS_LAMBDA_FUNCTION_NAME - 函數的名稱。

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE - 可供函數使用的記憶體量 (MB)。

  • AWS_LAMBDA_FUNCTION_VERSION - 正在執行的函數版本。

  • AWS_LAMBDA_INITIALIZATION_TYPE - 函數的初始化類型,即 on-demandprovisioned-concurrencysnap-start。如需資訊,請參閱設定佈建並行使用 Lambda 改善啟動效能 SnapStart

  • AWS_LAMBDA_LOG_GROUP_NAMEAWS_LAMBDA_LOG_STREAM_NAME — 功能的 Amazon CloudWatch 日誌群組和資料流的名稱。AWS_LAMBDA_LOG_GROUP_NAMEAWS_LAMBDA_LOG_STREAM_NAME環境變數在 Lambda SnapStart 函數中不可用。

  • AWS_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN - 從函數的執行角色中取得的存取金鑰。

  • AWS_LAMBDA_RUNTIME_API— (自訂執行階段) 執行階的主機和連接埠API。

  • LAMBDA_TASK_ROOT - 指向您 Lambda 函數程式碼的路徑。

  • LAMBDA_RUNTIME_DIR - 指向執行時間程式庫的路徑。

下列其他環境變數並未進行預留,可以在您的函數組態中進行擴充。

未預留的環境變數
  • LANG – 執行時間的地區設定 (en_US.UTF-8)。

  • PATH – 執行路徑 (/usr/local/bin:/usr/bin/:/bin:/opt/bin)。

  • LD_LIBRARY_PATH – 系統程式庫路徑 (/var/lang/lib:/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib)。

  • NODE_PATH - (Node.js) Node.js 程式庫路徑 (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules)。

  • PYTHONPATH - (Python 2.7、3.6、3.8) Python 程式庫路徑 ($LAMBDA_RUNTIME_DIR)。

  • GEM_PATH - (Ruby) Ruby 程式庫路徑 ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0)。

  • AWS_XRAY_CONTEXT_MISSING— 對於 X-Ray 追蹤,Lambda 將其設定LOG_ERROR為避免從 X-Ray 擲回執行階段錯誤SDK。

  • AWS_XRAY_DAEMON_ADDRESS - 對於 X-Ray 追蹤,為 X-Ray 常駐程式的 IP 地址和連接埠。

  • AWS_LAMBDA_DOTNET_PREJIT— 對於. NET6 和. NET7 運行時,將此變量設置為啟用或禁用。 NET特定的運行時優化。值包含 alwaysneverprovisioned-concurrency。如需詳細資訊,請參閱設定函數的佈建並行

  • TZ – 環境的時區 (:UTC)。執行環境用NTP來同步系統時鐘。

顯示的範例值會反映最新的執行時間。特定變數或其值是否存在,可能會因先前的執行時間而有所不同。

環境變數的範例案例

您可以使用環境變數,自訂測試環境和生產環境中的函數行為。例如,您可以建立兩個具備相同程式碼,但不同組態的函數。一個函數連接到測試資料庫,另一個函數連接到生產資料庫。在此情況下,可以使用環境變數將資料庫的主機名稱和其他連線詳細資訊傳遞給函數。

以下範例顯示如何將資料庫主機和資料庫名稱定義為環境變數。

Lambda 主控台中的環境變數

如果您希望測試環境產生比實際執行環境更多的偵錯資訊,您可以設定環境變數,以將測試環境設定為使用更詳細的記錄或更詳細的追蹤。