本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Amazon S3 部署 Web 函數程式碼
您可以在 Amazon S3 儲存貯體中提供 Lambda Web 函數程式碼做為 .zip 部署套件。這是為 Web 函數提供程式碼的唯一方法。當您建立 Web 函數或修訂時,請在 s3Object 欄位中指定物件,該物件會巢狀在請求的 codeConfig內buildConfig。在 中s3Object,包含儲存貯體、金鑰和選用的 versionId。Lambda 會直接從您的儲存貯體參考您的程式碼。由於 Lambda 會將每個修訂釘選為特定物件版本,因此您的部署可以重現。您可以在帳戶和 AWS 區域之間重複使用單一部署套件。
先決條件
從 Amazon S3 部署 Web 函數程式碼之前,請確定您的儲存貯體和部署套件符合下列要求:
- S3 版本控制
-
儲存貯體必須啟用 S3 版本控制。Lambda 使用物件版本來追蹤修訂使用的程式碼版本。
- 版本 ID
-
versionId參數在請求中是選用的。如果您省略它,Lambda 會在建立時使用最新版本的物件。無論哪種方式,Lambda 都會將修訂綁定到特定物件版本。 - 最大部署套件大小
-
512 MB (解壓縮)。
- 項目檔案
-
部署套件必須包含您應用程式的項目檔案。根據預設,執行時間
index.js會在套件的根目錄載入。若要使用不同的項目檔案,請將修訂版上的AWS_LAMBDA_NODEJS_ENTRYPOINT環境變數設定為相對於套件根目錄的檔案路徑。載入項目檔案後,執行時間會等待 HTTP 伺服器開始接聽AWS_LAMBDA_HTTP_ENDPOINT來自環境變數的主機和連接埠。如果執行時間無法解析項目檔案,或伺服器從未開始接聽,初始化會失敗,且對端點的請求會失敗。Lambda 不會確認您的伺服器在建立或更新端點以使用修訂時開始接聽。
Active在這些情況下,修訂和端點仍然可以顯示。每次部署後,傳送測試請求並檢查您的應用程式日誌。 - 儲存貯體位置
-
儲存貯體可以位於與 Web 函數不同的 AWS 帳戶和區域 AWS 。儲存貯體必須與 Web 函數位於相同的 AWS 分割區中。儲存貯體不能位於選擇加入區域 (預設為未啟用的區域)。如果不符合任一條件,Lambda 會拒絕請求。跨區域物件擷取會產生額外的 Amazon S3 資料傳輸成本。如需定價的詳細資訊,請參閱 Amazon S3 定價
。
所需的許可
若要從 Amazon S3 部署 Web 函數程式碼,您必須設定呼叫身分和 Lambda 服務主體的許可。
來電者許可
若要建立 Web 函數或修訂,您的 IAM 身分需要 S3 物件的下列許可:
-
s3:GetObject -
s3:GetObjectVersion
對於跨帳戶儲存貯體,儲存貯體政策也必須授予對物件的呼叫身分存取權。
Lambda 的儲存貯體政策
儲存貯體政策必須授予 Lambda 服務主體 (lambda.amazonaws.com) s3:GetObject和 s3:GetObjectVersion 許可。使用符合修訂 ARN 模式aws:SourceArn的條件來範圍政策。使用 ArnLike 搭配萬用字元做為修訂 ID,因為 Lambda 會在您建立修訂時產生修訂 ID。
如果物件使用 AWS KMS 金鑰 (SSE-KMS) 加密,則金鑰政策也必須允許 lambda.amazonaws.com 對該金鑰kms:Decrypt呼叫 。當您建立修訂時,Lambda 會檢查服務主體的存取權,並在缺少存取權時拒絕請求。
下列範例儲存貯體政策授予 Lambda 讀取部署套件的存取權,以用於指定 Web 函數的任何修訂。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaWebFunctionCodeAccess", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } } ] }
若要限制存取存放部署套件的金鑰字首,請將Resource值變更為 arn:aws:s3:::,其中 my-bucket/my-prefix/*my-bucket 是您的儲存貯體名稱,my-prefix 是金鑰字首。將 保留/*在字首的結尾。請勿在 中變更revision/*萬用字元aws:SourceArn。
使用來自 Amazon S3 的程式碼建立 Web 函數
您可以在 的 codeConfig區段中指定 S3 部署套件buildConfig。下列程序說明如何建立 Web 函數,以及如何使用 建立新的修訂 AWS CLI。
使用來自 Amazon S3 的程式碼建立 Web 函數 (AWS CLI)
-
執行下列命令來建立參考 Amazon S3 中 .zip 部署套件的 Web 函數。
aws lambda-web create-web-function \ --function-namemy-web-app\ --revision-config '{ "buildConfig": { "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'當您省略 時
versionId,Lambda 會在建立時使用最新版本的物件。
使用特定物件版本建立新的修訂 (AWS CLI)
-
執行下列命令來建立使用特定版本部署套件的新修訂版。
aws lambda-web create-web-function-revision \ --function-namemy-web-app\ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip", "versionId": "abc123def456" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'透過指定
versionId,您可以將修訂鎖定到物件的確切版本,而不是最新版本。
物件生命週期
請勿刪除 S3 物件或移除作用中修訂的 Lambda 存取權
Lambda 參考來自 Amazon S3 儲存貯體的程式碼。如果您刪除修訂使用的 S3 物件,或修訂使用的特定物件版本,則當 Lambda 下次驗證物件的存取權時,修訂會移至 Failed 狀態,然後無法再為流量提供服務。保留您仍在使用的所有修訂的物件版本。
移除 Lambda 服務主體對儲存貯體的存取權具有相同的效果。如果您修改儲存貯體政策以拒絕或移除 的 s3:GetObject和 s3:GetObjectVersion許可lambda.amazonaws.com,參考該儲存貯體中物件的現有修訂會移至 Failed 狀態。只要任何修訂參考這些物件,即可同時維護物件和 Lambda 服務主體的讀取存取權。
Failed 狀態為永久性。還原已刪除的物件或儲存貯體許可不會將修訂版傳回 Active 狀態。若要復原,請建立參考可用物件版本的新修訂,然後更新端點的修訂權重,以將流量路由到該版本。如需部署模式,請參閱 部署模式。
Lambda 不會自動將流量移離Failed修訂版。以 HTTP 狀態碼 409 和 的lambda-web-error-type回應標頭拒絕端點路由至Failed修訂的請求Platform.RevisionNotActive。如果端點對多個修訂的流量進行加權,則只會影響路由至Failed修訂的請求共用;路由至正常運作修訂的請求會正常提供。若要停止失敗,請更新端點的修訂權重以移除Failed修訂。
使用新的上傳覆寫物件會建立新的 S3 版本。這不會影響現有的修訂:當您建立修訂時,Lambda 會解析並鎖定確切的物件版本,即使您省略 versionId。不過,如果您刪除修訂參考的舊物件版本,則該修訂會移至 Failed 狀態。上傳替換物件沒有幫助,因為替換是具有不同版本 ID 的新版本。
多區域部署
對於具有 MultiRegion或 PerRegion端點的 Web 函數,Lambda 會從您指定的儲存貯體讀取來源物件,位於儲存貯體所在的任何區域中。然後,Lambda 會將從該物件衍生的準備程式碼成品複寫到其他區域。您不需要將部署套件複製到其他 區域中的儲存貯體。如需 Lambda 複寫項目的詳細資訊,請參閱 Lambda 複寫的內容。