

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

3. 我們將自 **2026 年 1 月 27** 日起刪除您的應用程式。您將無法啟動或操作 Amazon Kinesis Data Analytics for SQL 應用程式。從那時起，Amazon Kinesis Data Analytics for SQL 將不再提供支援。如需詳細資訊，請參閱[Amazon Kinesis Data Analytics for SQL 應用程式終止](discontinuation.md)。

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

# 使用 Lambda 函數作為輸出
<a name="how-it-works-output-lambda"></a>

使用 AWS Lambda 做為目的地，可讓您在將 SQL 結果傳送至最終目的地之前，更輕鬆地執行 SQL 結果的後置處理。常見後續處理任務包括下列：
+ 將多個列彙總到單個記錄中
+ 結合目前結果與過去的結果，以處理延遲到達的資料
+ 根據資訊類型交付到不同目標
+ 記錄格式轉換 (如翻譯成 Protobuf)
+ 字串操作或轉換
+ 分析處理後的資料擴充
+ 地理空間使用案例的自訂處理
+ 資料加密

Lambda 函數可以將分析資訊交付至各種 AWS 服務和其他目的地，包括下列項目：
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)
+ 自訂 ASN
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)
+ [Amazon Aurora](http://aurora.apache.org/)
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/)
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/)
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)

如需有關建立 Lambda 應用程式的詳細資訊，請參閱[入門 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)。

**Topics**
+ [Lambda 作為輸出許可](#how-it-works-output-lambda-perms)
+ [Lambda 作為輸出指標](#how-it-works-output-lambda-metrics)
+ [Lambda 作為輸出事件輸入資料模型和記錄回應模型](#how-it-works-output-lambda-model)
+ [Lambda 輸出調用頻率](#how-it-works-output-lambda-frequency)
+ [新增用作輸出的 Lambda 函數](#how-it-works-output-lambda-procedure)
+ [Lambda 作為輸出之常見故障](#how-it-works-output-lambda-troubleshooting)
+ [為應用程式目的地建立 Lambda 函數](how-it-works-output-lambda-functions.md)

## Lambda 作為輸出許可
<a name="how-it-works-output-lambda-perms"></a>

若要使用 Lambda 做為輸出，應用程式的 Lambda 輸出 IAM 角色需要下列許可政策：

```
{
   "Sid": "UseLambdaFunction",
   "Effect": "Allow",
   "Action": [
       "lambda:InvokeFunction",
       "lambda:GetFunctionConfiguration"
   ],
   "Resource": "{{FunctionARN}}"
}
```

## Lambda 作為輸出指標
<a name="how-it-works-output-lambda-metrics"></a>

您可以使用 Amazon CloudWatch 來監控已發送的位元組數目、成功與失敗情況等。如需 Kinesis Data Analytics 使用 Lambda 作為輸出所發出的 CloudWatch 指標相關資訊，請參閱 [Amazon Kinesis Analytics 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html)。

## Lambda 作為輸出事件輸入資料模型和記錄回應模型
<a name="how-it-works-output-lambda-model"></a>

若要傳送 Kinesis Data Analytics 輸出記錄，您的 Lambda 函數必須符合所需的事件輸入資料和記錄回應模型。

### 事件輸入資料模型
<a name="how-it-works-output-lambda-model-request"></a>

Kinesis Data Analytics 會持續將輸出記錄從應用程式傳送至 Lambda，這些輸出紀錄用作輸出函數，並具有下列要求模型。在函數中，迭代列表並應用業務邏輯來完成輸出需求（例如，在發送到最終目的地之前的資料轉換）。


<table>
<thead>
  <tr><th>欄位</th><th>Description</th></tr>
</thead>
<tbody>
  <tr><td>invocationId</td><td>Lambda 調用 ID (隨機 GUID)。</td></tr>
  <tr><td>applicationArn</td><td>Kinesis Data Analytics 應用程式的 Amazon Resource Name (ARN)。</td></tr>
  <tr><td colspan="2">紀錄 [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/how-it-works-output-lambda.html) </td></tr>
</tbody>
</table>


**注意**  
`retryHint` 值在每次交付失敗都會增加。此值不會長期存在，如果應用程式中斷，則會重設。

### 紀錄回應模型
<a name="how-it-works-output-lambda-model-response"></a>

傳送至 Lambda 做為輸出函數 (含記錄 ID) 的每筆記錄，都必須使用 `Ok` 或 `DeliveryFailed` 來確認，且必須包含下列參數。否則，Kinesis Data Analytics 會將它們視為交付失敗。


| 欄位 | Description | 
| --- | --- | 
| 紀錄 [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| recordId | 在調用期間，記錄 ID 會從 Kinesis Data Analytics 傳遞至 Lambda。原始記錄與經確認記錄的 ID 若有任何不符，就會視為幾交付失敗。 | 
| result | 記錄交付的狀態。以下是可能的值：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 

## Lambda 輸出調用頻率
<a name="how-it-works-output-lambda-frequency"></a>

Kinesis Data Analytics 應用程式會緩衝輸出記錄，並經常調用 AWS Lambda 目標函數。
+ 如果記錄以輪轉時段的形式發射到資料分析應用程式中的目的地應用程式內串流，則會在每次輪轉時段觸發時叫用 AWS Lambda 目的地函數。例如，如果使用 60 秒的輪轉窗口將記錄發送到目的地應用程式內串流，則每 60 秒會調用 Lambda 函數一次。
+ 如果記錄以連續查詢或滑動窗口的形式，發送到應用程式的目的地應用程式內串流，則每秒大約會調用一次 Lambda 目的地函數。

**注意**  
適用[每個 Lambda 函數調用要求承載大小限制](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)。超過這些限制會導致輸出記錄分割，並跨越多個 Lambda 函數呼叫傳送。

## 新增用作輸出的 Lambda 函數
<a name="how-it-works-output-lambda-procedure"></a>

以下程序說明如何將 Lambda 函數新增為 Kinesis Data Analytics 應用程式的輸出。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/kinesisanalytics](https://console.aws.amazon.com/kinesisanalytics) 開啟 Managed Service for Apache Flink 主控台。

1. 選擇清單中的應用程式，然後選擇**應用程式詳細資訊**。

1. 在**目的地**區段中，選擇**連接新目的地**。

1. 針對**目的地**項目，選擇 **AWS Lambda 函數**。

1. 在**交付記錄至 AWS Lambda** 區段中，選擇現有的 Lambda 函數和版本，或選擇**建立新的**。

1. 如果您要建立新 Lambda 函數，請執行下列動作：

   1. 選擇其中一個範本。如需詳細資訊，[為應用程式目的地建立 Lambda 函數](how-it-works-output-lambda-functions.md)。

   1. **建立函數** 頁面在 Web 瀏覽器的新瀏覽器標籤中開啟。在**名稱**方塊中，為函數指定一個有意義的名稱 (例如 **myLambdaFunction**)。

   1. 用後續處理功能為應用程式更新範本。如需建立 Lambda 函數的詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的 [入門](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)。

   1. 在 Kinesis Data Analytics 主控台的 **Lambda 函數**清單中，選擇您剛建立的 Lambda 函數。為 Lambda 函數版本選擇 **$LATEST**。

1. 在**應用程式內串流**區段，選擇**選擇現有的應用程式內串流**。針對**應用程式內串流名稱**，選擇應用程式的輸出串流。所選輸出串流的結果會傳送至 Lambda 輸出函數。

1. 將表格的其餘部分保留為預設值，然後選擇**儲存並繼續**。

您的應用程式現在會將記錄從應用程式內串流傳送到 Lambda 函數。您可以在 Amazon CloudWatch 主控台中查看預設範本的結果。監控 `AWS/KinesisAnalytics/LambdaDelivery.OkRecords` 指標，以查看交付至 Lambda 函數的記錄數。

## Lambda 作為輸出之常見故障
<a name="how-it-works-output-lambda-troubleshooting"></a>

以下是交付至 Lambda 函數可能會失敗的常見原因。
+ 並非所有傳送至 Lambda 函數的批次記錄 (具有記錄 ID) 都會傳回 Kinesis Data Analytics 服務。
+ 回應遺失記錄 ID 或狀態欄位。
+ Lambda 函數逾時不足以完成 Lambda 函數中的業務邏輯。
+ Lambda 函數中的業務邏輯不會擷取所有錯誤，導致未處理的例外狀況造成逾時和背壓。這些通常被稱為「毒丸」訊息。

對於資料傳遞失敗，Kinesis Data Analytics 會繼續在同一組記錄上重試 Lambda 調用，直到成功為止。若要深入瞭解故障情況，您可以監控下列 CloudWatch 指標：
+ Kinesis Data Analytics 應用程式 Lambda 作為輸出 CloudWatch 指標：指出成功和失敗的次數，以及其他統計資料。如需詳細資訊，請參閱[Amazon Kinesis Analytics 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html)。
+ AWS Lambda 函數 CloudWatch 指標和日誌。