本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 的詳細資訊,請參閱下列說明: