

在仔細考慮之後，我們決定停止 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-functions"></a>

您的 Kinesis Data Analytics 應用程式可以使用 AWS Lambda 函數做為輸出。Kinesis Data Analytics 提供範本，可讓您建立 Lambda 函數作為應用程式的目的地使用。使用這些範本做為應用程式後續處理輸出的起點。

**Topics**
+ [在 Node.js 中建立一個 Lambda 函數目的地](#how-it-works-lambda-dest-nodejs)
+ [在 Python 中建立一個 Lambda 函數目的地](#how-it-works-lambda-dest-python)
+ [在 Java 中建立一個 Lambda 函數目的地](#how-it-works-lambda-dest-java)
+ [在 .NET 中建立一個 Lambda 函數目的地](#how-it-works-lambda-net)

## 在 Node.js 中建立一個 Lambda 函數目的地
<a name="how-it-works-lambda-dest-nodejs"></a>

主控台提供在 Node.js 中建立目的地 Lambda 函數的下列範本：


| Lambda 作為輸出藍圖 | 語言與版本 | Description | 
| --- | --- | --- | 
| kinesis-analytics-output | Node.js 12.x | 將輸出記錄從 Kinesis Data Analytics 應用程式傳送至自訂目的地。 | 

## 在 Python 中建立一個 Lambda 函數目的地
<a name="how-it-works-lambda-dest-python"></a>

主控台提供在 Python 中建立目的地 Lambda 函數的下列範本：


| Lambda 作為輸出藍圖 | 語言與版本 | Description | 
| --- | --- | --- | 
| kinesis-analytics-output-sns | Python 2.7 | 將輸出記錄從 Kinesis Data Analytics 應用程式傳送至 Amazon SNS。 | 
| kinesis-analytics-output-ddb | Python 2.7 | 將輸出記錄從 Kinesis Data Analytics 應用程式傳送至 Amazon DynamoDB。 | 

## 在 Java 中建立一個 Lambda 函數目的地
<a name="how-it-works-lambda-dest-java"></a>

如要在 Java 中建立目的地 Lambda 函數，請使用 [Java 事件](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events)類別。

下列程式碼會示範使用 Java 的範例目的地 Lambda 函數：

```
public class LambdaFunctionHandler
        implements RequestHandler<KinesisAnalyticsOutputDeliveryEvent, KinesisAnalyticsOutputDeliveryResponse> {

    @Override
    public KinesisAnalyticsOutputDeliveryResponse handleRequest(KinesisAnalyticsOutputDeliveryEvent event,
            Context context) {
        context.getLogger().log("InvocatonId is : " + event.invocationId);
        context.getLogger().log("ApplicationArn is : " + event.applicationArn);

        List<KinesisAnalyticsOutputDeliveryResponse.Record> records = new ArrayList<KinesisAnalyticsOutputDeliveryResponse.Record>();
        KinesisAnalyticsOutputDeliveryResponse response = new KinesisAnalyticsOutputDeliveryResponse(records);

        event.records.stream().forEach(record -> {
            context.getLogger().log("recordId is : " + record.recordId);
            context.getLogger().log("record retryHint is :" + record.lambdaDeliveryRecordMetadata.retryHint);
            // Add logic here to transform and send the record to final destination of your choice.
            response.records.add(new Record(record.recordId, KinesisAnalyticsOutputDeliveryResponse.Result.Ok));
        });
        return response;
    }

}
```

## 在 .NET 中建立一個 Lambda 函數目的地
<a name="how-it-works-lambda-net"></a>

如要在 .NET 中建立目的地 Lambda 函數，請使用 [.NET 事件](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)類別。

下列程式碼會示範使用 C\$1 的範例目的地 Lambda 函數：

```
public class Function
    {
        public KinesisAnalyticsOutputDeliveryResponse FunctionHandler(KinesisAnalyticsOutputDeliveryEvent evnt, ILambdaContext context)
        {
            context.Logger.LogLine($"InvocationId: {evnt.InvocationId}");
            context.Logger.LogLine($"ApplicationArn: {evnt.ApplicationArn}");

            var response = new KinesisAnalyticsOutputDeliveryResponse
            {
                Records = new List<KinesisAnalyticsOutputDeliveryResponse.Record>()
            };

            foreach (var record in evnt.Records)
            {
                context.Logger.LogLine($"\tRecordId: {record.RecordId}");
                context.Logger.LogLine($"\tRetryHint: {record.RecordMetadata.RetryHint}");
                context.Logger.LogLine($"\tData: {record.DecodeData()}");

                // Add logic here to send to the record to final destination of your choice.

                var deliveredRecord = new KinesisAnalyticsOutputDeliveryResponse.Record
                {
                    RecordId = record.RecordId,
                    Result = KinesisAnalyticsOutputDeliveryResponse.OK
                };
                response.Records.Add(deliveredRecord);
            }
            return response;
        }
    }
```

如需在 .NET 中建立用於預先處理和目的地的 Lambda 函數詳細資訊，請參閱 [https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)。