View a markdown version of this page

環境變數 - AWS Lambda

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

環境變數

環境變數是在執行時間可供應用程式程式碼使用的鍵/值對。針對您想要在不修改程式碼的情況下變更的非敏感組態使用環境變數,例如特徵標記、日誌層級和資源識別符,例如資料庫主機名稱。對於 API 金鑰和資料庫登入資料等敏感值,請勿將其存放在環境變數中。反之,請使用 Secrets Manager 或 AWS Systems Manager 參數存放區,並在執行時間擷取值。

環境變數會在您建立修訂時設定,並在建立後不可變。若要變更環境變數,請建立新的修訂。在新的修訂中,指定每個環境變數和您要保留的每個serviceConfig設定,而不只是變更的值。您省略的設定會採用其預設值,而且不會設定省略的環境變數。

Lambda 會特別針對 Web 函數設定下列環境變數:

  • AWS_LAMBDA_HTTP_ENDPOINT – HTTP 伺服器必須接聽的主機和連接埠,host:port格式為 。Lambda 會設定此變數,並將請求路由到該地址。在您的應用程式程式碼中閱讀它,並完全繫結該主機和連接埠。您無法在修訂版的環境變數中設定此變數。一律繫結至此變數中的地址,而非 localhost或硬式編碼連接埠。執行時間會等待伺服器在此地址接受連線,如果從未接受,初始化會失敗。僅將備用地址用於本機執行。在 Web 函數中,Lambda 一律會設定此變數。

Web 函數也會接收其他 Lambda 執行期環境變數,例如 AWS_LAMBDA_FUNCTION_MEMORY_SIZE、 AWS_LAMBDA_METADATA_API和 AWS_LAMBDA_METADATA_TOKEN。如需一般清單,請參閱 定義執行時間環境變數。如果您的程式碼或程式庫從該清單中讀取變數,請確認 Lambda 在 Web 函數中設定它,然後再依賴它。Web 函數不會接收該清單中的每個變數。

下列環境變數名稱保留給 Lambda Web 函數,無法設定。如果您指定一個,Lambda 會拒絕建立 Web 函數或修訂的請求:

  • AWS_ACCESS_KEY、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SECRET_KEY、AWS_SECURITY_TOKEN 和 AWS_SESSION_TOKEN

  • AWS_DEFAULT_REGION 和 AWS_REGION

  • AWS_LAMBDA_HTTP_ENDPOINT, AWS_LAMBDA_RUNTIME_API, AWS_LAMBDA_INITIALIZATION_TYPE, 和 AWS_LAMBDA_FUNCTION_MEMORY_SIZE

  • AWS_LAMBDA_METADATA_API 和 AWS_LAMBDA_METADATA_TOKEN

有些架構會改為讀取接聽地址的自有環境變數。例如,Next.js獨立模式會讀取 HOSTNAME和 PORT。對於這類架構,請在啟動伺服器AWS_LAMBDA_HTTP_ENDPOINT之前,使用從 設定這些變數的 index.js 項目檔案。

根據預設,執行時間index.js會在部署套件的根目錄載入為應用程式的項目檔案。執行時間不會從 讀取進入點package.json。如果您的項目檔案有不同的名稱或路徑 (例如 dist/index.js),請將AWS_LAMBDA_NODEJS_ENTRYPOINT環境變數設定為相對於套件根目錄的路徑。

下列範例示範如何讀取Node.js應用程式中AWS_LAMBDA_HTTP_ENDPOINT的環境變數:

// Lambda provides the address to bind in AWS_LAMBDA_HTTP_ENDPOINT ("host:port"). // The fallback applies only when running locally. const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':'); app.listen(port, host, () => { console.log(`Server listening on ${host}:${port}`); });

若要設定您自己的環境變數,請在建立修訂時將environmentVariables映射新增至serviceConfig物件,如下列範例所示。如需完整命令,請參閱 建立修訂。

{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role", "environmentVariables": { "DATABASE_URL": "my-database-endpoint", "LOG_LEVEL": "info", "FEATURE_FLAG_NEW_UI": "true" } }

如果您指定客戶受管金鑰,Lambda 會使用該金鑰加密靜態環境變數。如需詳細資訊,請參閱Web 函數的靜態加密。