

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

# Invoke
<a name="API_Invoke"></a>

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

對於[同步調用](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html)，有關函數回應的詳細資訊 (包括錯誤) 都包含在回應主體和標題中。對於任一調用類型，您可以在[執行記錄](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html)和[追蹤](https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html)中找到詳細資訊。

當發生錯誤時，您的函數可能會被多次調用。重試行為會因錯誤類型、用戶端、事件來源和調用類型而有所不同。例如，如果您以非同步方式調用函數並傳回錯誤，Lambda 最多再執行該函數兩次。如需詳細資訊，請參閱 [Lambda 中的錯誤處理和自動重試](https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html)。

對於[非同步調用](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)，在將事件傳送至函數之前，Lambda 會將函數新增至佇列。如果您的函數沒有足夠的容量跟上佇列，事件可能會遺失。有時候，即使沒有發生錯誤，您的函數也可能會多次收到相同的事件。若要保留未處理的事件，請使用[無效字母佇列](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq)來設定函數。

API 回應中的狀態碼不會反映函數錯誤。系統會為阻止函數執行的錯誤預留錯誤代碼，例如許可錯誤、[配額](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)錯誤、或是函數的程式碼和組態問題。例如，如果執行函數會導致您超過帳戶級別 (`ConcurrentInvocationLimitExceeded`) 或函數級別 (`ReservedFunctionConcurrentInvocationLimitExceeded`) 的並行限制，Lambda 會傳回 `TooManyRequestsException`。

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

此作業需要 [lambda: InvokeFunction](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html) 動作的權限。如需如何設定跨帳戶調用許可的詳細資訊，請參閱[授予其他帳戶對函數的存取](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke)。

## 請求語法
<a name="API_Invoke_RequestSyntax"></a>

```
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 請求參數
<a name="API_Invoke_RequestParameters"></a>

請求會使用下列 URI 參數。

 ** [ClientContext](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-ClientContext"></a>
內容物件中最多 3,583 個位元組的 base64 編碼資料，這些資料與調用用戶端以傳遞到函數有關。Lambda 向您函數傳遞的 `ClientContext` 物件僅會用於同步調用。

 ** [FunctionName](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-FunctionName"></a>
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](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-InvocationType"></a>
您可以從以下選項中選擇。  
+  `RequestResponse` (預設) - 同步調用函數。保持連線打開，直到函數傳回回應或逾時。API 回應包括函數回應和其他資料。
+  `Event` - 以非同步方式調用函數。將失敗多次的事件傳送至函數的無效字母佇列 (如果已設定)。API 回應只包含狀態碼。
+  `DryRun` - 驗證參數值並確認使用者或角色擁有調用函數的許可。
有效值:`Event | RequestResponse | DryRun` 

 ** [LogType](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-LogType"></a>
設定為 `Tail`，將執行記錄包含在回應中。僅適用於同步調用的函數。  
有效值:`None | Tail` 

 ** [Qualifier](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-Qualifier"></a>
指定版本或別名，以調用函數的已發佈版本。  
長度限制：長度下限為 1。長度上限為 128。  
模式：`(|[a-zA-Z0-9$_-]+)`

## 請求主體
<a name="API_Invoke_RequestBody"></a>

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

 ** [Payload](#API_Invoke_RequestSyntax) **   <a name="lambda-Invoke-request-Payload"></a>
想要作為輸入提供給您的 Lambda 函數的 JSON。  
您可以直接輸入 JSON。例如 `--payload '{ "key": "value" }'`。您也可以指定檔案路徑。例如 `--payload file://payload.json`。

## 回應語法
<a name="API_Invoke_ResponseSyntax"></a>

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

Payload
```

## 回應元素
<a name="API_Invoke_ResponseElements"></a>

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

 ** [StatusCode](#API_Invoke_ResponseSyntax) **   <a name="lambda-Invoke-response-StatusCode"></a>
對於成功請求，HTTP 狀態碼在 200 範圍內。對於 `RequestResponse` 調用類型，狀態碼為 200。對於 `Event` 調用類型，狀態碼為 202。對於 `DryRun` 調用類型，狀態碼為 204。

回應會傳回下列 HTTP 標頭。

 ** [ExecutedVersion](#API_Invoke_ResponseSyntax) **   <a name="lambda-Invoke-response-ExecutedVersion"></a>
執行的函數版本。當您調用具有別名的函數時，這表示別名解析到哪個版本。  
長度限制：長度下限為 1。長度上限為 1024。  
模式：`(\$LATEST|[0-9]+)`

 ** [FunctionError](#API_Invoke_ResponseSyntax) **   <a name="lambda-Invoke-response-FunctionError"></a>
如果存在，則表示函數執行期間發生錯誤。有關錯誤的詳細資訊包含在回應承載中。

 ** [LogResult](#API_Invoke_ResponseSyntax) **   <a name="lambda-Invoke-response-LogResult"></a>
執行日誌的最後 4 KB，採用 base64 編碼。

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

 ** [Payload](#API_Invoke_ResponseSyntax) **   <a name="lambda-Invoke-response-Payload"></a>
來自函數的回應，或錯誤物件。

## 錯誤
<a name="API_Invoke_Errors"></a>

如需所有動作常見錯誤的資訊，請參閱[常見錯誤](CommonErrors.md)。

 ** 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 配額](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)。  
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 配額](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)。  
HTTP 狀態碼：413

 ** ResourceConflictException **   
資源已存在，或另一個操作正在進行中。  
HTTP 狀態碼：409

 ** ResourceNotFoundException **   
請求中指定的資源不存在。  
HTTP 狀態碼：404

 ** ResourceNotReadyException **   
此函數處於非作用中，且其 VPC 連線不再可用。等待 VPC 連線重新建立，然後再試一次。  
HTTP 狀態碼：502

 ** ServiceException **   
AWS Lambda 服務發生內部錯誤。  
HTTP 狀態碼：500

 ** SnapStartException **   
`afterRestore()` [執行階段掛鉤](https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks.html)發生錯誤。有關更多信息，請查看 Amazon CloudWatch 日誌。  
HTTP 狀態碼：400

 ** SnapStartNotReadyException **   
Lambda 正在初始化您的函數。[函數狀態](https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html)變成 `Active` 時，您可以調用該函數。  
HTTP 狀態碼：409

 ** SnapStartTimeoutException **   
Lambda 無法在逾時限制內還原快照。  
HTTP 狀態碼：408

 ** SubnetIPAddressLimitReachedException **   
 一或多個已設定的子網路沒有可用的 IP 地址，所以 AWS Lambda 無法設定 Lambda 函數的 VPC 存取。  
HTTP 狀態碼：502

 ** TooManyRequestsException **   
超出請求輸送量限制。如需詳細資訊，請參閱 [Lambda 配額](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#api-requests)。  
HTTP 狀態碼：429

 ** UnsupportedMediaTypeException **   
`Invoke` 請求主體的內容類型不是 JSON。  
HTTP 狀態碼：415

## 另請參閱
<a name="API_Invoke_SeeAlso"></a>

如需在語言特定的 AWS 開發套件之一中使用此 API 的詳細資訊，請參閱下列說明：
+  [AWS 命令列介面](https://docs.aws.amazon.com/goto/aws-cli/lambda-2015-03-31/Invoke) 
+  [適用於 .NET 的 AWS 軟體開發套件](https://docs.aws.amazon.com/goto/DotNetSDKV3/lambda-2015-03-31/Invoke) 
+  [適用於 C\$1\$1 的 AWS 開發套件](https://docs.aws.amazon.com/goto/SdkForCpp/lambda-2015-03-31/Invoke) 
+  [適用於 Go 的 AWS 軟體開發套件](https://docs.aws.amazon.com/goto/SdkForGoV1/lambda-2015-03-31/Invoke) 
+  [適用於 Java 的 AWS 軟體開發套件第 2 版](https://docs.aws.amazon.com/goto/SdkForJavaV2/lambda-2015-03-31/Invoke) 
+  [AWS適用於 JavaScript V3 的 SDK](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/lambda-2015-03-31/Invoke) 
+  [適用於 PHP 的 AWS 軟體開發套件第 3 版](https://docs.aws.amazon.com/goto/SdkForPHPV3/lambda-2015-03-31/Invoke) 
+  [適用於 Python 的 AWS 開發套件](https://docs.aws.amazon.com/goto/boto3/lambda-2015-03-31/Invoke) 
+  [適用於 Ruby 的 AWS 軟體開發套件第 3 版](https://docs.aws.amazon.com/goto/SdkForRubyV3/lambda-2015-03-31/Invoke) 