Invoke - AWS Lambda

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

Invoke

調用 Lambda 函數。您能夠以同步或非同步方式調用函數 (並等待回應)。預設情況下,Lambda 會同步調用您的函數 (即 InvocationType 為 RequestResponse)。若要以非同步方式調用函式,請將 InvocationType 設定為 Event。Lambda 向您函數傳遞的 ClientContext 物件僅會用於同步調用。

對於同步調用,有關函數回應的詳細資訊 (包括錯誤) 都包含在回應主體和標題中。對於任一調用類型,您可以在執行記錄追蹤中找到詳細資訊。

當發生錯誤時,您的函數可能會被多次調用。重試行為會因錯誤類型、用戶端、事件來源和調用類型而有所不同。例如,如果您以非同步方式調用函數並傳回錯誤,Lambda 最多再執行該函數兩次。如需詳細資訊,請參閱 Lambda 中的錯誤處理和自動重試

對於非同步調用,在將事件傳送至函數之前,Lambda 會將函數新增至佇列。如果您的函數沒有足夠的容量跟上佇列,事件可能會遺失。有時候,即使沒有發生錯誤,您的函數也可能會多次收到相同的事件。若要保留未處理的事件,請使用無效字母佇列來設定函數。

API 回應中的狀態碼不會反映函數錯誤。系統會為阻止函數執行的錯誤預留錯誤代碼,例如許可錯誤、配額錯誤、或是函數的程式碼和組態問題。例如,如果執行函數會導致您超過帳戶級別 (ConcurrentInvocationLimitExceeded) 或函數級別 (ReservedFunctionConcurrentInvocationLimitExceeded) 的並行限制,Lambda 會傳回 TooManyRequestsException

對於逾時很久的函數,用戶端可能會在等待回應的同時,在同步調用期間中斷連線。設定您的 HTTP 用戶端、SDK、防火牆、Proxy 或作業系統,以透過逾時或持續作用設定允許長時間連線。

此作業需要 lambda: InvokeFunction 動作的權限。如需如何設定跨帳戶調用許可的詳細資訊,請參閱授予其他帳戶對函數的存取

請求語法

POST /2015-03-31/functions/FunctionName/invocations?Qualifier=Qualifier HTTP/1.1 X-Amz-Invocation-Type: InvocationType X-Amz-Log-Type: LogType X-Amz-Client-Context: ClientContext Payload

URI 請求參數

請求會使用下列 URI 參數。

ClientContext

內容物件中最多 3,583 個位元組的 base64 編碼資料,這些資料與調用用戶端以傳遞到函數有關。Lambda 向您函數傳遞的 ClientContext 物件僅會用於同步調用。

FunctionName

Lambda 函數的名稱,版本或別名。

名稱格式
  • 函數名稱 - my-function (僅名稱),my-function:v1 (具備別名)。

  • 函數 ARN - arn:aws:lambda:us-west-2:123456789012:function:my-function

  • 部分 ARN - 123456789012:function:my-function

您可以將版本號碼或別名附加到任何格式。長度限制條件僅會套用到完整的 ARN。若您僅指定函數名稱,則其長度限制為 64 個字元。

長度限制:長度下限為 1。長度上限為 170。

模式:(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_\.]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?

必要:是

InvocationType

您可以從以下選項中選擇。

  • RequestResponse (預設) - 同步調用函數。保持連線打開,直到函數傳回回應或逾時。API 回應包括函數回應和其他資料。

  • Event - 以非同步方式調用函數。將失敗多次的事件傳送至函數的無效字母佇列 (如果已設定)。API 回應只包含狀態碼。

  • DryRun - 驗證參數值並確認使用者或角色擁有調用函數的許可。

有效值:Event | RequestResponse | DryRun

LogType

設定為 Tail,將執行記錄包含在回應中。僅適用於同步調用的函數。

有效值:None | Tail

Qualifier

指定版本或別名,以調用函數的已發佈版本。

長度限制:長度下限為 1。長度上限為 128。

模式:(|[a-zA-Z0-9$_-]+)

請求主體

請求接受下列二進位資料。

Payload

想要作為輸入提供給您的 Lambda 函數的 JSON。

您可以直接輸入 JSON。例如 --payload '{ "key": "value" }'。您也可以指定檔案路徑。例如 --payload file://payload.json

回應語法

HTTP/1.1 StatusCode X-Amz-Function-Error: FunctionError X-Amz-Log-Result: LogResult X-Amz-Executed-Version: ExecutedVersion Payload

回應元素

如果動作成功,則服務傳回下列 HTTP 回應。

StatusCode

對於成功請求,HTTP 狀態碼在 200 範圍內。對於 RequestResponse 調用類型,狀態碼為 200。對於 Event 調用類型,狀態碼為 202。對於 DryRun 調用類型,狀態碼為 204。

回應會傳回下列 HTTP 標頭。

ExecutedVersion

執行的函數版本。當您調用具有別名的函數時,這表示別名解析到哪個版本。

長度限制:長度下限為 1。長度上限為 1024。

模式:(\$LATEST|[0-9]+)

FunctionError

如果存在,則表示函數執行期間發生錯誤。有關錯誤的詳細資訊包含在回應承載中。

LogResult

執行日誌的最後 4 KB,採用 base64 編碼。

回應傳回以下內容作為 HTTP 主體。

Payload

來自函數的回應,或錯誤物件。

錯誤

如需所有動作常見錯誤的資訊,請參閱常見錯誤

EC2AccessDeniedException

需要其他許可才能對 VPC 進行設定。

HTTP 狀態碼:502

EC2ThrottledException

Lambda 函數初始化期間,Amazon EC2 使用為函數提供的執行角色對 AWS Lambda 進行限流。

HTTP 狀態碼:502

EC2UnexpectedException

設定 Lambda 函數時,AWS Lambda 收到意外的 Amazon EC2 用戶端例外狀況。

HTTP 狀態碼:502

EFSIOException

讀取或寫入連線的檔案系統時發生錯誤。

HTTP 狀態碼:410

EFSMountConnectivityException

Lambda 函數無法對已設定的檔案系統建立網路連線。

HTTP 狀態碼:408

EFSMountFailureException

由於許可或組態問題,Lambda 函數無法掛載已設定的檔案系統。

HTTP 狀態碼:403

EFSMountTimeoutException

Lambda 函數可對已設定的檔案系統建立網路連線,但掛載操作逾時。

HTTP 狀態碼:408

ENILimitReachedException

網路介面已達上限,所以 AWS Lambda 無法於 VPC 中建立被指定為 Lambda 函數組態一部分的彈性網路介面。如需詳細資訊,請參閱 Lambda 配額

HTTP 狀態碼:502

InvalidParameterValueException

要求中的其中一個參數無效。

HTTP 狀態碼:400

InvalidRequestContentException

請求主體無法解析為 JSON。

HTTP 狀態碼:400

InvalidRuntimeException

不支援指定的執行時間或執行時間版本。

HTTP 狀態碼:502

InvalidSecurityGroupIDException

Lambda 函數 VPC 組態中提供的安全群組 ID 無效。

HTTP 狀態碼:502

InvalidSubnetIDException

Lambda 函數 VPC 組態中提供的子網路 ID 無效。

HTTP 狀態碼:502

InvalidZipFileException

AWS Lambda 無法解壓縮部署套件。

HTTP 狀態碼:502

KMSAccessDeniedException

AWS KMS 存取遭拒絕,所以 Lambda 無法解密環境變數。請檢查 Lambda 函數的 KMS 許可。

HTTP 狀態碼:502

KMSDisabledException

使用的 AWS KMS key 已停用,所以 Lambda 無法解密環境變數。請檢查 Lambda 函數的 KMS 金鑰設定。

HTTP 狀態碼:502

KMSInvalidStateException

使用的 AWS KMS key 狀態對解密無效,所以 Lambda 無法解密環境變數。請檢查函數的 KMS 金鑰設定。

HTTP 狀態碼:502

KMSNotFoundException

找不到 AWS KMS key,所以 Lambda 無法解密環境變數。請檢查函數的 KMS 金鑰設定。

HTTP 狀態碼:502

RecursiveInvocationException

Lambda 偵測到函數在遞迴迴圈中被其他 AWS 資源調用,並停止了函數調用。

HTTP 狀態碼:400

RequestTooLargeException

要求承載超過 Invoke 要求主體 JSON 輸入配額。如需詳細資訊,請參閱 Lambda 配額

HTTP 狀態碼:413

ResourceConflictException

資源已存在,或另一個操作正在進行中。

HTTP 狀態碼:409

ResourceNotFoundException

請求中指定的資源不存在。

HTTP 狀態碼:404

ResourceNotReadyException

此函數處於非作用中,且其 VPC 連線不再可用。等待 VPC 連線重新建立,然後再試一次。

HTTP 狀態碼:502

ServiceException

AWS Lambda 服務發生內部錯誤。

HTTP 狀態碼:500

SnapStartException

afterRestore() 執行階段掛鉤發生錯誤。有關更多信息,請查看 Amazon CloudWatch 日誌。

HTTP 狀態碼:400

SnapStartNotReadyException

Lambda 正在初始化您的函數。函數狀態變成 Active 時,您可以調用該函數。

HTTP 狀態碼:409

SnapStartTimeoutException

Lambda 無法在逾時限制內還原快照。

HTTP 狀態碼:408

SubnetIPAddressLimitReachedException

一或多個已設定的子網路沒有可用的 IP 地址,所以 AWS Lambda 無法設定 Lambda 函數的 VPC 存取。

HTTP 狀態碼:502

TooManyRequestsException

超出請求輸送量限制。如需詳細資訊,請參閱 Lambda 配額

HTTP 狀態碼:429

UnsupportedMediaTypeException

Invoke 請求主體的內容類型不是 JSON。

HTTP 狀態碼:415

另請參閱

如需在語言特定的 AWS 開發套件之一中使用此 API 的詳細資訊,請參閱下列說明: