返回文章列表

Java Kinesis Lambda 函式實作

本文介紹如何使用 Java 實作一個 Lambda 函式,並設定其在 Kinesis 資料流新增記錄時被觸發。文章涵蓋了必要的準備工作、Lambda 專案的建立、程式碼解析、佈署和測試步驟,以及如何使用 AWS CLI 進行相關操作,例如建立事件源對映和驗證函式呼叫。

伺服器less Java

在雲端環境中,利用伺服器less 架構處理串流資料變得越來越普遍。本文將引導您使用 Java 建立一個 Lambda 函式,並將其與 Kinesis 資料流整合,實作事件驅動的資料處理。透過 AWS Kinesis SDK for Java,Lambda 函式可以有效地處理 Kinesis 資料流中的新增記錄,並執行相應的邏輯。文章將逐步說明如何設定專案、撰寫程式碼、佈署函式,並透過 AWS CLI 進行測試和驗證,確保函式能正確回應 Kinesis 事件。


title: “AWS CLI 操作 Amazon ML 二元分類別” date: 2026-05-06T12:00:00+08:00 author: “玄貓(BlackCat)” categories: [“機器學習”, “雲端服務”] tags: [“AWS CLI”, “Amazon Machine Learning”, “二元分類別”, “資料來源”, “模型訓練”] draft: false math: true summary: “本文說明如何使用 AWS CLI 操作 Amazon Machine Learning (Amazon ML) 進行二元分類別任務。文章涵蓋了準備資料、建立資料來源、使用 CLI 輸入範本、執行 CLI 命令、檢視資料來源狀態等步驟,並提供程式碼解析和內容解密,幫助讀者理解每個步驟的意義和作用。”

透過 AWS CLI 操作 Amazon Machine Learning 服務,可以更有效率地管理和執行機器學習任務。本文將重點介紹如何使用 AWS CLI 進行二元分類別,從資料準備到模型訓練,提供完整的操作流程和程式碼範例。文章詳細說明瞭如何使用 CLI 命令建立資料來源、設定訓練引數,並監控任務執行狀態。此外,文章也解析了關鍵程式碼和設定,幫助讀者深入理解 Amazon ML 的運作機制,並能根據自身需求調整引數和流程。


title: “AWS Machine Learning 二元分類別預測實作” date: 2028-11-04T18:00:00+08:00 author: “玄貓(BlackCat)” categories: [“機器學習”, “雲端服務”] tags: [“AWS Machine Learning”, “二元分類別”, “預測”, “模型評估”, “即時預測”] draft: false math: true summary: “本文介紹如何使用 AWS Machine Learning 進行二元分類別預測。文章涵蓋了準備資料、建立 S3 資料來源、建立機器學習模型、評估模型、建立即時預測端點以及進行預測等步驟。每個步驟都提供 AWS CLI 命令範例和詳細的程式碼解析,幫助讀者快速上手並理解 AWS Machine Learning 的使用方法。”

AWS Machine Learning 提供了簡便易用的工具和服務,讓開發者可以快速構建和佈署機器學習模型。本文將逐步示範如何使用 AWS Machine Learning 進行二元分類別預測,從資料準備到模型佈署,涵蓋了整個機器學習流程。文章提供了詳細的 AWS CLI 命令範例和說明,幫助讀者瞭解如何建立資料來源、訓練模型、評估模型效能,以及最終佈署模型並進行即時預測。透過本文的指引,讀者可以快速掌握 AWS Machine Learning 的核心功能,並將其應用於實際的機器學習任務中。

使用 Java 實作 Kinesis 事件觸發的 Lambda 函式

本章節將介紹如何使用 Java 實作一個 Lambda 函式,該函式會在 Kinesis 資料流中有新記錄新增時被觸發。

準備工作

要完成本章節的實作,您需要具備以下條件:

  • 一個有效的 AWS 帳戶。
  • 按照「Your first AWS Lambda」和「Your first Lambda with AWS CLI」章節的指示,設定 Java、Maven、父專案 serverless-cookbook-parent-aws-java 和 AWS CLI。
  • 建立一個名為 kinesis-stream-for-event 的 Kinesis 資料流。

步驟1:建立 Lambda 專案(Java)

我們將建立一個沒有服務類別的 Lambda 函式。首先,在 pom.xml 檔案中新增 AWS Kinesis SDK for Java 的依賴項,如下所示:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-kinesis</artifactId>
    <version>${aws.sdk.version}</version>
</dependency>

LambdaKinesisEventHandler.java 的實作如下:

public final class LambdaKinesisEventHandler implements RequestHandler<KinesisEvent, Boolean> {
    public Boolean handleRequest(final KinesisEvent kinesisEvent, final Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("Received Kinesis event: " + kinesisEvent);
        logger.log("Number of records: " + kinesisEvent.getRecords().size());
        try {
            kinesisEvent.getRecords().forEach(r -> {
                final KinesisEvent.Record kr = r.getKinesis();
                logger.log("Record: " + kr.toString());
                logger.log("Data: " + StandardCharsets.UTF_8.decode(kr.getData()).toString());
            });
        } catch (final Exception e) {
            logger.log("There was an exception: " + e.getMessage());
            return false;
        }
        return true;
    }
}

程式碼解析:

  1. LambdaKinesisEventHandler 類別實作了 RequestHandler 介面,用於處理 Kinesis 事件並傳回布林值。
  2. handleRequest 方法接收 KinesisEventContext 物件作為引數,並使用 LambdaLogger 輸出事件資訊。
  3. 遍歷 KinesisEvent 中的記錄,並輸出每筆記錄的詳細資訊,包括記錄資料。
  4. 例外處理:捕捉並記錄任何異常,傳回 false 表示處理失敗。

步驟2:佈署和測試 Lambda(使用 AWS CLI)

  1. 構建 Uber JAR:在 Lambda 專案根目錄下執行 mvn clean package
  2. 上傳 Uber JAR 至 S3
  3. 建立具有適當信任關係的 IAM Role,例如 lambda-invoke-kinesis-event-role
  4. 附加必要的許可權政策,包括基本日誌許可權和 Kinesis 相關許可權。

Kinesis 相關許可權政策檔案範例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:GetRecords",
                "kinesis:GetShardIterator",
                "kinesis:DescribeStream",
                "kinesis:ListStreams"
            ],
            "Resource": [
                "arn:aws:kinesis:*:*:*"
            ]
        }
    ]
}
  1. 建立 Lambda 函式
aws lambda create-function \
    --function-name lambda-invoke-kinesis-event \
    --runtime java8 \
    --role arn:aws:iam::<account id>:role/lambda-invoke-kinesis-event-role \
    --handler tech.heartin.books.serverlesscookbook.LambdaKinesisEventHandler::handleRequest \
    --code S3Bucket=serverless-cookbook,S3Key=lambda-invoke-kinesis-event-0.0.1-SNAPSHOT.jar \
    --timeout 15 \
    --memory-size 512 \
    --region us-east-1 \
    --profile admin
  1. 建立事件源對映
aws lambda create-event-source-mapping \
    --event-source-arn arn:aws:kinesis:us-east-1:<account id>:stream/kinesis-stream-for-event \
    --function-name lambda-invoke-kinesis-event \
    --starting-position LATEST \
    --batch-size 3 \
    --region us-east-1 \
    --profile admin
  1. 驗證 Lambda 函式的呼叫:向 Kinesis 資料流傳送訊息,並檢查 CloudWatch 日誌。

使用 AWS CLI 進行二元分類別的 Amazon ML 服務操作

Amazon Machine Learning (Amazon ML) 是 Amazon Web Services (AWS) 提供的一項機器學習服務,能夠幫助開發者建立和佈署機器學習模型。本章節將介紹如何使用 AWS CLI 來進行二元分類別任務。

準備資料

首先,我們需要準備一份 CSV 檔案作為訓練資料。在這個範例中,我們將使用 AWS 提供的範例資料 banking.csv,該檔案已經上傳到 S3 的 s3://aml-sample-data/ 路徑下。

建立資料來源

接下來,我們需要建立一個資料來源。資料來源是指用於訓練或測試機器學習模型的資料。在這個範例中,我們將使用同一個資料來源進行訓練和測試,但在實際應用中,建議將資料分成兩個部分:訓練資料和測試資料。

步驟1:產生 CLI 輸入範本

aws machinelearning create-data-source-from-s3 --generate-cli-skeleton input

步驟2:準備輸入 JSON 檔案

根據產生的範本,建立一個名為 create-data-source-from-s3-cli-input.json 的 JSON 檔案,並填入實際的值。

{
  "DataSourceId": "my-first-s3-ds-id",
  "DataSourceName": "My First S3 DataSource",
  "DataSpec": {
    "DataLocationS3": "s3://aml-sample-data/banking.csv",
    "DataRearrangement": "{\"splitting\":{\"percentBegin\":10,\"percentEnd\":60}}",
    "DataSchemaLocationS3": "s3://aml-sample-data/banking.csv.schema"
  },
  "ComputeStatistics": true
}

步驟3:執行建立資料來源的命令

aws machinelearning create-data-source-from-s3 --cli-input-json file://create-data-source-from-s3-cli-input.json --region us-east-1 --profile admin

程式碼解析:

  1. aws machinelearning create-data-source-from-s3 命令:此命令用於從 S3 建立一個新的資料來源。
  2. --cli-input-json 引數:指定輸入 JSON 檔案的路徑,這裡是 file://create-data-source-from-s3-cli-input.json
  3. --region us-east-1 引數:指定 AWS 區域為 us-east-1
  4. --profile admin 引數:指定使用名為 admin 的 AWS 組態檔。

內容解密:

  • 使用 create-data-source-from-s3 命令可以將 S3 中的 CSV 資料來源轉換為 Amazon ML 可以使用的格式。
  • 在 JSON 輸入檔案中,DataLocationS3 指定了 S3 中的資料位置,而 DataSchemaLocationS3 指定了資料的結構描述檔案位置。
  • ComputeStatistics 設定為 true 表示在建立資料來源時計算統計資訊。

檢視資料來源狀態

可以使用以下命令來檢視資料來源的狀態:

aws machinelearning describe-data-sources --region us-east-1 --profile admin

或者,使用以下命令來檢視特定資料來源的詳細資訊:

aws machinelearning get-data-source --data-source-id my-first-s3-ds-id --region us-east-1 --profile admin

程式碼解析:

  1. aws machinelearning describe-data-sources 命令:列出所有資料來源的資訊。
  2. aws machinelearning get-data-source 命令:取得特定資料來源的詳細資訊。

內容解密:

  • 使用 describe-data-sources 可以檢視所有已建立的資料來源狀態。
  • 使用 get-data-source 可以檢視特定 ID 的資料來源詳細資訊,有助於監控其狀態和除錯。

使用 AWS Machine Learning 進行二元分類別預測

AWS Machine Learning(AML)是一種全託管的服務,能夠幫助開發者建立機器學習模型並進行預測。在本篇文章中,我們將介紹如何使用 AWS Machine Learning 進行二元分類別預測。

準備資料

首先,我們需要準備資料。在本例中,我們使用了一個 CSV 檔案,其中包含了客戶的相關資訊,例如年齡、工作、婚姻狀況等。我們將這個檔案上傳到 Amazon S3。

建立 S3 資料來源

接下來,我們需要建立一個 S3 資料來源。使用以下命令建立一個名為 my-first-s3-ds-id 的資料來源:

aws machinelearning create-data-source \
--data-source-id 'my-first-s3-ds-id' \
--data-source-name 'My First S3 Data Source' \
--data-location-s3 's3://your-bucket/your-data.csv' \
--region us-east-1 \
--profile admin

內容解密:

  • create-data-source 命令用於建立一個新的資料來源。
  • --data-source-id 指定了資料來源的 ID。
  • --data-source-name 指定了資料來源的名稱。
  • --data-location-s3 指定了資料檔案在 S3 中的位置。
  • --region 指定了 AWS 區域。
  • --profile 指定了使用的 AWS 組態檔。

建立機器學習模型

建立好資料來源後,我們可以建立一個機器學習模型。使用以下命令建立一個名為 my-first-ml-model-id 的二元分類別模型:

aws machinelearning create-ml-model \
--ml-model-id 'my-first-ml-model-id' \
--ml-model-name 'My First ML Model' \
--ml-model-type 'BINARY' \
--training-data-source-id 'my-first-s3-ds-id' \
--region us-east-1 \
--profile admin

內容解密:

  • create-ml-model 命令用於建立一個新的機器學習模型。
  • --ml-model-id 指定了模型的 ID。
  • --ml-model-name 指定了模型的名稱。
  • --ml-model-type 指定了模型的型別(在本例中為二元分類別)。
  • --training-data-source-id 指定了用於訓練模型的資料來源 ID。

評估模型

建立好模型後,我們需要評估其效能。使用以下命令建立一個名為 my-first-ml-evaluation-id 的評估:

aws machinelearning create-evaluation \
--evaluation-id 'my-first-ml-evaluation-id' \
--evaluation-name 'My First ML Evaluation' \
--ml-model-id 'my-first-ml-model-id' \
--evaluation-data-source-id 'my-first-s3-ds-id' \
--region us-east-1 \
--profile admin

內容解密:

  • create-evaluation 命令用於建立一個新的評估。
  • --evaluation-id 指定了評估的 ID。
  • --evaluation-name 指定了評估的名稱。
  • --ml-model-id 指定了要評估的模型 ID。
  • --evaluation-data-source-id 指定了用於評估的資料來源 ID。

建立即時預測端點

評估完模型後,我們可以建立一個即時預測端點。使用以下命令建立一個即時預測端點:

aws machinelearning create-realtime-endpoint \
--ml-model-id 'my-first-ml-model-id' \
--region us-east-1 \
--profile admin

內容解密:

  • create-realtime-endpoint 命令用於建立一個新的即時預測端點。
  • --ml-model-id 指定了要使用的模型 ID。

進行預測

最後,我們可以使用建立好的即時預測端點進行預測。使用以下命令進行預測:

aws machinelearning predict \
--ml-model-id 'my-first-ml-model-id' \
--record 'age=44,job=blue-collar,marital=married,education=basic.4y,default=unknown,housing=yes,loan=no,contact=cellular,month=aug,day_of_week=thu,duration=210,campaign=1,pdays=999,previous=0,poutcome=nonexistent,emp_var_rate=1.4,cons_price_idx=93.444,cons_conf_idx=-36.1,euribor3m=4.963,nr_employed=5228.1' \
--predict-endpoint 'https://realtime.machinelearning.us-east-1.amazonaws.com' \
--region us-east-1 \
--profile admin

內容解密:

  • predict 命令用於進行預測。
  • --ml-model-id 指定了要使用的模型 ID。
  • --record 指定了要預測的資料記錄。
  • --predict-endpoint 指定了即時預測端點的 URL。