Managed Service for Apache Flink 的早期版本資訊 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。

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

Managed Service for Apache Flink 的早期版本資訊

注意

Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們現在計劃結束對 Amazon Managed Service for Apache Flink 中這些版本的支援。從 2024 年 11 月 5 日起,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。

對於除中國區域和 以外的所有區域 AWS GovCloud (US) Regions,從 2025 年 2 月 5 日起,您將無法再在 Amazon Managed Service for Apache Flink 中使用這些版本的 Apache Flink 建立、啟動或執行應用程式。

對於中國區域和 AWS GovCloud (US) Regions,從 2025 年 3 月 19 日起,您將無法再在 Amazon Managed Service for Apache Flink 中使用這些版本的 Apache Flink 建立、啟動或執行應用程式。

您可以使用 Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱針對 Apache Flink 使用就地版本升級

Managed Service for Apache Flink 支援 Apache Flink 1.15.2 和 1.13.2 版,但 Apache Flink 社群不再支援。

將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用

1.11 版之前的 Apache Flink 中不包含 Apache Flink Kinesis 串流連接器。若要讓應用程式能夠將 Apache Flink Kinesis 連接器與先前版本的 Apache Flink 搭配使用,必須下載、編譯並安裝該應用程式所使用的 Apache Flink 版本。此連接器用於取用作為應用程式來源的 Kinesis 串流中的資料,或將資料寫入作為應用程式輸出的 Kinesis 串流。

注意

請確定您正在使用 0KPL.14.0 版或更新版本建置連接器。

若要下載並安裝 Apache Flink 1.8.2 版來源程式碼,請執行下列動作:

  1. 請確定您已安裝 Apache Maven,且JAVA_HOME環境變數指向 JDK而非 JRE。您可以使用以下命令來測試 Apache Maven 安裝:

    mvn -version
  2. 下載 Apache Flink 版本 1.8.2 來源程式碼:

    wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
  3. 解壓縮 Apache Flink 來源程式碼:

    tar -xvf flink-1.8.2-src.tgz
  4. 切換到 Apache Flink 來源程式碼目錄:

    cd flink-1.8.2
  5. 編譯並安裝 Apache Flink:

    mvn clean install -Pinclude-kinesis -DskipTests
    注意

    如果您在 Microsoft 視窗中編譯 Flink,則需要添加 -Drat.skip=true 參數。

使用 Apache Flink 1.8.2 建置應用程式

本節包含您用來建置與 Apache Flink 1.8.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。

將下列元件版本用於 Managed Service for Apache Flink 應用程式:

元件 版本
Java 1.8 (建議使用)
Apache Flink 1.8.2
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) 1.0.1
Managed Service for Apache Flink Flink Connectors (aws-kinesisanalytics-flink) 1.0.1
Apache Maven 3.1

若要編譯使用 Apache Flink 1.8.2 版的應用程式,請使用下列參數執行 Maven:

mvn package -Dflink.version=1.8.2

如需使用 Apache Flink 1.8.2 版的 Managed Service for Apache Flink 應用程式的 pom.xml 檔案範例,請參閱 Managed Service for Apache Flink 1.8.2 入門

如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊,請參閱建立應用程式

使用 Apache Flink 1.6.2 建置應用程式

本節包含您用來建置與 Apache Flink 1.6.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。

將下列元件版本用於 Managed Service for Apache Flink 應用程式:

元件 版本
Java 1.8 (建議使用)
AWS Java SDK 1.11.379
Apache Flink 1.6.2
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) 1.0.1
Managed Service for Apache Flink Flink Connectors (aws-kinesisanalytics-flink) 1.0.1
Apache Maven 3.1
Apache Beam 不支援用於 Apache Flink 1.6.2。
注意

使用 Managed Service for Apache Flink 執行期 1.0.1 版時,可以在 pom.xml 檔案中指定 Apache Flink 的版本,而不是在編譯應用程式程式碼時使用 -Dflink.version 參數。

如需使用 Apache Flink 1.6.2 版的 Managed Service for Apache Flink 應用程式的 pom.xml 檔案範例,請參閱 Managed Service for Apache Flink 1.6.2 入門

如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊,請參閱建立應用程式

升級應用程式

若要升級 Amazon Managed Service for Apache Flink 應用程式的 Apache Flink 版本,請使用 AWS CLI AWS SDK、 AWS CloudFormation或 使用就地 Apache Flink 版本升級功能 AWS Management Console。如需詳細資訊,請參閱針對 Apache Flink 使用就地版本升級

您可以搭配 Amazon Managed Service for Apache Flink 處於 READYRUNNING 狀態的任何現有應用程式使用此功能。

Apache Flink 1.6.2 和 1.8.2 中的可用連接器

Apache Flink 架構包含用於存取各種來源之資料的連接器。

入門:Flink 1.13.2

本節將介紹 Managed Service for Apache Flink 和 的基本概念 DataStream API。它描述了建立和測試應用程式的可用選項。此外,它還提供了相關指示,以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。

Managed Service for Apache Flink 應用程式的元件

為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件:

  • 執行期屬性:您可以使用執行期屬性來設定應用程式,無需重新編譯應用程式的程式碼。

  • 來源:應用程式使用來源來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊,請參閱新增串流資料來源

  • 運算子:應用程式會使用一或多個運算子來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊,請參閱運算子

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊,請參閱使用接收器寫入資料

建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。

完成練習的先決條件

若要完成本指南中的步驟,您必須執行下列各項:

開始執行,請移至 設定 AWS 帳戶並建立管理員使用者

步驟 1:設定 AWS 帳戶並建立管理員使用者

註冊 AWS 帳戶

如果您沒有 AWS 帳戶,請完成下列步驟以建立 。

若要註冊 AWS 帳戶
  1. 開啟https://portal.aws.amazon.com/billing/註冊

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/ 並選擇我的帳戶 來檢視目前的帳戶活動和管理帳戶

建立具有管理存取權的使用者

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 為您的根使用者開啟多重要素驗證 (MFA)。

    如需指示,請參閱 IAM 使用者指南 中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置

建立具有管理存取權的使用者
  1. 啟用IAM身分中心。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用預設值設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。

    如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立遵循套用最低權限許可最佳實務的許可集。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

授與程式設計存取權

如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。

若要授與使用者程式設計存取權,請選擇下列其中一個選項。

哪個使用者需要程式設計存取權? By

人力身分

(在 IAM Identity Center 中管理的使用者)

使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

IAM 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 請遵循 IAM 使用者指南 中的將臨時憑證與 AWS 資源搭配使用的指示。
IAM

(不建議使用)

使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

下一步驟

設定 AWS Command Line Interface (AWS CLI)

下一步驟

步驟 2:設定 AWS Command Line Interface (AWS CLI)

步驟 2:設定 AWS Command Line Interface (AWS CLI)

在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

注意

本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser) 來執行操作。

注意

如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:

aws --version

本教學課程中的練習需要下列 AWS CLI 版本或更新版本:

aws-cli/1.16.63
若要設定 AWS CLI
  1. 下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:

  2. 在 AWS CLI config 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時,使用此設定檔。如需具名描述檔的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的具名描述檔

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    如需可用 AWS 區域的清單,請參閱中的區域和端點Amazon Web Services 一般參考

    注意

    本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

  3. 在命令提示字元中輸入下列 help 命令,以驗證設定:

    aws help

設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。

下一步驟

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。

建立兩個 Amazon Kinesis 資料串流

在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流

建立資料串流 (AWS CLI)
  1. 若要建立第一個串流 (ExampleInputStream),請使用下列 Amazon Kinesis create-stream AWS CLI 命令。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為 ExampleOutputStream

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 在教學課程後半段,您會執行 stock.py 指令碼來傳送資料至應用程式。

    $ python stock.py

下載並檢查 Apache Flink 串流 Java 程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. 導覽至 amazon-kinesis-data-analytics-java-examples/GettingStarted 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • 專案物件模型 (pom.xml) 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.java 檔案包含定義應用程式功能的 main 方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 您的應用程式會建立來源與目的地連接器,以使用 StreamExecutionEnvironment 物件來存取外部資源。

  • 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。

    如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

編譯應用程式程式碼

在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件

編譯應用程式的程式碼
  1. 若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:

    • 使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的pom.xml檔案:

      mvn package -Dflink.version=1.13.2
    • 設定開發環境。如需詳細資訊,請參閱您的開發環境文件。

      注意

      提供的來源程式碼依賴於 Java 11 中的程式庫。

    您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。

  2. 如果編譯時發生錯誤,請確認您的 JAVA_HOME 環境變數是否正確設定。

如果應用程式成功編譯,則會建立下列檔案:

target/aws-kinesis-analytics-java-apps-1.0.jar

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

上傳應用程式的程式碼
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項步驟中,保留原有設定並選擇 Next (下一步)

  5. 設定許可步驟中,保留原有設定並選擇 Next (下一步)

  6. 選擇建立儲存貯體

  7. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。選擇 Next (下一步)

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

注意

當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本下拉式清單保留為 Apache Flink 1.13 版

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 監控下,確保監控指標層級設為應用程式

  6. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  7. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

在頁面上MyApplication,選擇停止 。確認動作。

更新應用程式

使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。

在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新

建立和執行應用程式 (AWS CLI)

在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2 AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) (012345678901) 中的帳戶 ID 取代為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

注意

若要存取其他 Amazon 服務,您可以使用 AWS SDK for Java。Managed Service for Apache Flink 會自動將 所需的憑證設定為與您應用程式相關聯的SDK服務執行IAM角色的憑證。無須採取額外的步驟。

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收端串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色建立角色

  3. 選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)

    選擇下一步:許可

  4. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  5. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策。

  6. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立 Managed Service for Apache Flink 應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (username) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 CreateApplication 動作以建立應用程式:

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您會透過 StartApplication 動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節,您會使用該 StopApplication 動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "test" }
  2. 以停止應用程式的上述請求,執行 StopApplication 動作:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄

更新環境屬性

在本節中,您可以使用 UpdateApplication 動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication AWS CLI 動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication、指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

下一步驟

步驟 4:清除 AWS 資源

步驟 4:清除 AWS 資源

本節包含在入門教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式

  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流

  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源

  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

下一步驟

步驟 5:後續步驟

步驟 5:後續步驟

現在您已建立並執行 Managed Service for Apache Flink 應用程式,請參閱下列資源,取得更進階的 Managed Service for Apache Flink 解決方案。

  • 適用於 Amazon Kinesis 的 AWS 串流資料解決方案適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務,以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供串流 end-to-endETL範例,示範對模擬的紐約計程車資料執行分析操作的真實世界應用程式。解決方案會設定所有必要 AWS 的資源,例如IAM角色和政策、 CloudWatch 儀表板和 CloudWatch 警示。

  • AWS 適用於 Amazon 的串流資料解決方案MSK適用於 Amazon 的 AWS 串流資料解決方案MSK提供 AWS CloudFormation 範本,其中資料流經生產者、串流儲存體、消費者和目的地。

  • 使用 Apache Flink 和 Apache Kafka 的點擊流實驗室:點擊流使用案例的端對端實驗室,使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存,使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。

  • Amazon Managed Service for Apache Flink 研討會在本研討會中,您可以建置 end-to-end串流架構,以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。

  • 了解 Flink:實際操作訓練:正式介紹 Apache Flink 訓練,可讓您開始撰寫可擴展串流ETL、分析和事件驅動應用程式。

    注意

    請注意,Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。

入門:Flink 1.11.1 - 取代

注意

Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級

本主題包含使用 Apache Flink 1.11.1 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。

本節向您介紹 Managed Service for Apache Flink 和 的基本概念 DataStream API。它描述了建立和測試應用程式的可用選項。此外,它還提供了相關指示,以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。

Managed Service for Apache Flink 應用程式的元件

為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件:

  • 執行期屬性:您可以使用執行期屬性來設定應用程式,無需重新編譯應用程式的程式碼。

  • 來源:應用程式使用來源來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊,請參閱新增串流資料來源

  • 運算子:應用程式會使用一或多個運算子來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊,請參閱運算子

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊,請參閱使用接收器寫入資料

建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。

完成練習的先決條件

若要完成本指南中的步驟,您必須執行下列各項:

開始執行,請移至 設定 AWS 帳戶並建立管理員使用者

步驟 1:設定 AWS 帳戶並建立管理員使用者

註冊 AWS 帳戶

如果您沒有 AWS 帳戶,請完成下列步驟以建立 。

若要註冊 AWS 帳戶
  1. 開啟https://portal.aws.amazon.com/billing/註冊

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/ 並選擇我的帳戶 來檢視目前的帳戶活動和管理帳戶

建立具有管理存取權的使用者

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 為您的根使用者開啟多重要素驗證 (MFA)。

    如需指示,請參閱 IAM 使用者指南 中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置

建立具有管理存取權的使用者
  1. 啟用IAM身分中心。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。

    如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立遵循套用最低權限許可最佳實務的許可集。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

授與程式設計存取權

如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。

若要授與使用者程式設計存取權,請選擇下列其中一個選項。

哪個使用者需要程式設計存取權? By

人力身分

(在 IAM Identity Center 中管理的使用者)

使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

IAM 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 遵循 IAM 使用者指南 中的使用臨時憑證與 AWS 資源的指示。
IAM

(不建議使用)

使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

下一步驟

設定 AWS Command Line Interface (AWS CLI)

步驟 2:設定 AWS Command Line Interface (AWS CLI)

在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

注意

本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser) 來執行操作。

注意

如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:

aws --version

本教學課程中的練習需要下列 AWS CLI 版本或更新版本:

aws-cli/1.16.63
若要設定 AWS CLI
  1. 下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:

  2. 在 AWS CLI config 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時,使用此設定檔。如需具名描述檔的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的具名描述檔

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    如需可用 AWS 區域的清單,請參閱中的區域和端點Amazon Web Services 一般參考

    注意

    本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

  3. 在命令提示字元中輸入下列 help 命令,以驗證設定:

    aws help

設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。

下一步驟

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。

建立兩個 Amazon Kinesis 資料串流

在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流

建立資料串流 (AWS CLI)
  1. 若要建立第一個串流 (ExampleInputStream),請使用下列 Amazon Kinesis create-stream AWS CLI 命令。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為 ExampleOutputStream

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 在教學課程後半段,您會執行 stock.py 指令碼來傳送資料至應用程式。

    $ python stock.py

下載並檢查 Apache Flink 串流 Java 程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. 導覽至 amazon-kinesis-data-analytics-java-examples/GettingStarted 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • 專案物件模型 (pom.xml) 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.java 檔案包含定義應用程式功能的 main 方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 您的應用程式會建立來源與目的地連接器,以使用 StreamExecutionEnvironment 物件來存取外部資源。

  • 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。

    如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

編譯應用程式程式碼

在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件

編譯應用程式的程式碼
  1. 若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:

    • 使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的pom.xml檔案:

      mvn package -Dflink.version=1.11.3
    • 設定開發環境。如需詳細資訊,請參閱您的開發環境文件。

      注意

      提供的來源程式碼依賴於 Java 11 中的程式庫。確保您專案的 Java 版本是 11。

    您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。

  2. 如果編譯時發生錯誤,請確認您的 JAVA_HOME 環境變數是否正確設定。

如果應用程式成功編譯,則會建立下列檔案:

target/aws-kinesis-analytics-java-apps-1.0.jar

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

上傳應用程式的程式碼
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項步驟中,保留原有設定並選擇 Next (下一步)

  5. 設定許可步驟中,保留原有設定並選擇 Next (下一步)

  6. 選擇建立儲存貯體

  7. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。選擇 Next (下一步)

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

注意

當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本下拉式清單保留為 Apache Flink 1.11 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,為群組 ID輸入 ProducerConfigProperties

  5. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  6. 監控下,確保監控指標層級設為應用程式

  7. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  8. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

在頁面上MyApplication,選擇停止 。確認動作。

更新應用程式

使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。

MyApplication頁面上,選擇設定 。更新應用程式設定,然後選擇更新

建立和執行應用程式 (AWS CLI)

在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 會使用 kinesisanalyticsv2 AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) (012345678901) 中的帳戶 ID 取代為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

注意

若要存取其他 Amazon 服務,您可以使用 AWS SDK for Java。Managed Service for Apache Flink 會自動將 所需的憑證設定為與您應用程式相關聯的SDK服務執行IAM角色的憑證。無須採取額外的步驟。

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色建立角色

  3. 選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)

    選擇下一步:許可

  4. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  5. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策。

  6. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立 Managed Service for Apache Flink 應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (username) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_11", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 CreateApplication 動作以建立應用程式:

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您會透過 StartApplication 動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節,您會使用該 StopApplication 動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "test" }
  2. 以停止應用程式的上述請求,執行 StopApplication 動作:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄

更新環境屬性

在本節中,您可以使用 UpdateApplication 動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication AWS CLI 動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication、指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

下一步驟

步驟 4:清除 AWS 資源

步驟 4:清除 AWS 資源

本節包含在入門教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式

  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流

  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除 Rour IAM 資源

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源

  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

下一步驟

步驟 5:後續步驟

步驟 5:後續步驟

現在您已建立並執行 Managed Service for Apache Flink 應用程式,請參閱下列資源,取得更進階的 Managed Service for Apache Flink 解決方案。

  • 適用於 Amazon Kinesis 的 AWS 串流資料解決方案適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務,以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供串流 end-to-endETL範例,示範對模擬的紐約計程車資料執行分析操作的真實世界應用程式。解決方案會設定所有必要 AWS 的資源,例如IAM角色和政策、 CloudWatch 儀表板和 CloudWatch 警示。

  • AWS 適用於 Amazon 的串流資料解決方案MSK適用於 Amazon 的 AWS 串流資料解決方案MSK提供 AWS CloudFormation 範本,其中資料流經生產者、串流儲存體、消費者和目的地。

  • 使用 Apache Flink 和 Apache Kafka 的點擊流實驗室:點擊流使用案例的端對端實驗室,使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存,使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。

  • Amazon Managed Service for Apache Flink 研討會在本研討會中,您可以建置 end-to-end串流架構,以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。

  • 了解 Flink:實際操作訓練正式介紹 Apache Flink 訓練,可讓您開始撰寫可擴展的串流ETL、分析和事件驅動應用程式。

    注意

    請注意,Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。

  • Apache Flink 程式碼範例各種 Apache Flink 應用程式範例的 GitHub 儲存庫。

入門:Flink 1.8.2 - 取代

注意

Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級

本主題包含使用 Apache Flink 1.8.2 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。

Managed Service for Apache Flink 應用程式的元件

為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件:

  • 執行期屬性:您可以使用執行期屬性來設定應用程式,無需重新編譯應用程式的程式碼。

  • 來源:應用程式使用來源來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊,請參閱新增串流資料來源

  • 運算子:應用程式會使用一或多個運算子來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊,請參閱運算子

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊,請參閱使用接收器寫入資料

建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。

完成練習的先決條件

若要完成本指南中的步驟,您必須執行下列各項:

開始執行,請移至 步驟 1:設定 AWS 帳戶並建立管理員使用者

步驟 1:設定 AWS 帳戶並建立管理員使用者

註冊 AWS 帳戶

如果您沒有 AWS 帳戶,請完成下列步驟以建立 。

若要註冊 AWS 帳戶
  1. 開啟https://portal.aws.amazon.com/billing/註冊

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/ 並選擇我的帳戶 ,以檢視您目前的帳戶活動並管理您的帳戶

建立具有管理存取權的使用者

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 為您的根使用者開啟多重要素驗證 (MFA)。

    如需指示,請參閱 IAM 使用者指南 中的為 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置

建立具有管理存取權的使用者
  1. 啟用IAM身分中心。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。

    如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立遵循套用最低權限許可最佳實務的許可集。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

授與程式設計存取權

如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。

若要授與使用者程式設計存取權,請選擇下列其中一個選項。

哪個使用者需要程式設計存取權? By

人力身分

(在 IAM Identity Center 中管理的使用者)

使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

IAM 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 請遵循 IAM 使用者指南 中的將臨時憑證與 AWS 資源搭配使用中的指示。
IAM

(不建議使用)

使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

步驟 2:設定 AWS Command Line Interface (AWS CLI)

在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

注意

本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser) 來執行操作。

注意

如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:

aws --version

本教學課程中的練習需要下列 AWS CLI 版本或更新版本:

aws-cli/1.16.63
若要設定 AWS CLI
  1. 下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:

  2. 在 AWS CLI config 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時,使用此設定檔。如需具名描述檔的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的具名描述檔

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    如需可用區域的清單,請參閱 Amazon Web Services 一般參考 中的區域與端點

    注意

    本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用不同的 AWS 區域,請將本教學課程程式碼和命令中的 區域變更為您要使用的 區域。

  3. 在命令提示字元中輸入下列 help 命令,以驗證設定:

    aws help

設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。

下一步驟

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。

建立兩個 Amazon Kinesis 資料串流

在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流

建立資料串流 (AWS CLI)
  1. 若要建立第一個串流 (ExampleInputStream),請使用下列 Amazon Kinesis create-stream AWS CLI 命令。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為 ExampleOutputStream

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 在教學課程後半段,您會執行 stock.py 指令碼來傳送資料至應用程式。

    $ python stock.py

下載並檢查 Apache Flink 串流 Java 程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. 導覽至 amazon-kinesis-data-analytics-java-examples/GettingStarted_1_8 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • 專案物件模型 (pom.xml) 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.java 檔案包含定義應用程式功能的 main 方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 您的應用程式會建立來源與目的地連接器,以使用 StreamExecutionEnvironment 物件來存取外部資源。

  • 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。

    如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

編譯應用程式程式碼

在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件

注意

若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink,你需要下載、建置和安裝 Apache Maven。如需詳細資訊,請參閱 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用

編譯應用程式的程式碼
  1. 若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:

    • 使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的pom.xml檔案:

      mvn package -Dflink.version=1.8.2
    • 設定開發環境。如需詳細資訊,請參閱您的開發環境文件。

      注意

      提供的來源程式碼依賴於 Java 1.8 中的程式庫。確保您專案的 Java 版本是 1.8。

    您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。

  2. 如果編譯時發生錯誤,請確認您的 JAVA_HOME 環境變數是否正確設定。

如果應用程式成功編譯,則會建立下列檔案:

target/aws-kinesis-analytics-java-apps-1.0.jar

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

上傳應用程式的程式碼
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項步驟中,保留原有設定並選擇 Next (下一步)

  5. 設定許可步驟中,保留原有設定並選擇 Next (下一步)

  6. 選擇建立儲存貯體

  7. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。選擇 Next (下一步)

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

注意

當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本下拉式清單保留為 Apache Flink 1.8 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 監控下,確保監控指標層級設為應用程式

  6. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  7. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

執行應用程式
  1. 在頁面上MyApplication,選擇執行 。確認動作。

  2. 應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)

停止應用程式

在頁面上MyApplication,選擇停止 。確認動作。

更新應用程式

使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。

在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新

建立和執行應用程式 (AWS CLI)

在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2 AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) (012345678901) 中的帳戶 ID 取代為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

注意

若要存取其他 Amazon 服務,您可以使用 AWS SDK for Java。Managed Service for Apache Flink 會自動將 所需的憑證設定為與您應用程式相關聯的SDK服務執行IAM角色的憑證。無須採取額外的步驟。

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色建立角色

  3. 選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)

    選擇下一步:許可

  4. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  5. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策。

  6. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立 Managed Service for Apache Flink 應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (username) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_8", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 CreateApplication 動作以建立應用程式:

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您會透過 StartApplication 動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節,您會使用該 StopApplication 動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "test" }
  2. 以停止應用程式的上述請求,執行 StopApplication 動作:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄

更新環境屬性

在本節中,您可以使用 UpdateApplication 動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication AWS CLI 動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication、指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

下一步驟

步驟 4:清除 AWS 資源

步驟 4:清除 AWS 資源

本節包含在入門教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式

  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 選擇設定

  4. 快照區段中,選擇停用,然後選擇更新

  5. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流

  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源

  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

入門:Flink 1.6.2 - 取代

注意

Apache Flink 社群已超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級

本主題包含使用 Apache Flink 1.6.2 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。

Managed Service for Apache Flink 應用程式的元件

為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件:

  • 執行期屬性:您可以使用執行期屬性來設定應用程式,無需重新編譯應用程式的程式碼。

  • 來源:應用程式使用來源來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊,請參閱新增串流資料來源

  • 運算子:應用程式會使用一或多個運算子來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊,請參閱運算子

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊,請參閱使用接收器寫入資料

建立、編譯和封裝應用程式後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。

完成練習的先決條件

若要完成本指南中的步驟,您必須執行下列各項:

開始執行,請移至 步驟 1:設定 AWS 帳戶並建立管理員使用者

步驟 1:設定 AWS 帳戶並建立管理員使用者

註冊 AWS 帳戶

如果您沒有 AWS 帳戶,請完成下列步驟以建立 。

若要註冊 AWS 帳戶
  1. 開啟https://portal.aws.amazon.com/billing/註冊

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/ 並選擇我的帳戶 來檢視目前的帳戶活動和管理帳戶

建立具有管理存取權的使用者

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 為您的根使用者開啟多重要素驗證 (MFA)。

    如需指示,請參閱 IAM 使用者指南 中的為 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置

建立具有管理存取權的使用者
  1. 啟用IAM身分中心。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。

    如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立遵循套用最低權限許可最佳實務的許可集。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

授與程式設計存取權

如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。

若要授與使用者程式設計存取權,請選擇下列其中一個選項。

哪個使用者需要程式設計存取權? By

人力身分

(在 IAM Identity Center 中管理的使用者)

使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

IAM 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 遵循 IAM 使用者指南 中的使用臨時憑證與 AWS 資源的指示。
IAM

(不建議使用)

使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。

請依照您要使用的介面所提供的指示操作。

步驟 2:設定 AWS Command Line Interface (AWS CLI)

在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

注意

本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser) 來執行操作。

注意

如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:

aws --version

本教學課程中的練習需要下列 AWS CLI 版本或更新版本:

aws-cli/1.16.63
若要設定 AWS CLI
  1. 下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:

  2. 在 AWS CLI config 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時,使用此設定檔。如需具名描述檔的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的具名描述檔

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    如需可用 AWS 區域的清單,請參閱中的區域和端點Amazon Web Services 一般參考

    注意

    本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

  3. 在命令提示字元中輸入下列 help 命令,以驗證設定:

    aws help

設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。

下一步驟

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

步驟 3:建立和執行 Managed Service for Apache Flink 應用程式

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。

建立兩個 Amazon Kinesis 資料串流

在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流

建立資料串流 (AWS CLI)
  1. 若要建立第一個串流 (ExampleInputStream),請使用下列 Amazon Kinesis create-stream AWS CLI 命令。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為 ExampleOutputStream

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 在教學課程後半段,您會執行 stock.py 指令碼來傳送資料至應用程式。

    $ python stock.py

下載並檢查 Apache Flink 串流 Java 程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. 導覽至 amazon-kinesis-data-analytics-java-examples/GettingStarted_1_6 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • 專案物件模型 (pom.xml) 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.java 檔案包含定義應用程式功能的 main 方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 您的應用程式會建立來源與目的地連接器,以使用 StreamExecutionEnvironment 物件來存取外部資源。

  • 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。

    如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

編譯應用程式程式碼

在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件

注意

若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink,您需要下載連接器的來源程式碼,並如 Apache Flink 文件所述建置

編譯應用程式的程式碼
  1. 若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:

    • 使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的pom.xml檔案:

      mvn package
      注意

      Managed Service for Apache Flink Runtime 1.0.1 版本不需要 -Dflink.version 參數;只有版本 1.1.0 及更新版本才需要此參數。如需詳細資訊,請參閱指定應用程式的 Apache Flink 版本

    • 設定開發環境。如需詳細資訊,請參閱您的開發環境文件。

    您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。

  2. 如果編譯時發生錯誤,請確認您的 JAVA_HOME 環境變數是否正確設定。

如果應用程式成功編譯,則會建立下列檔案:

target/aws-kinesis-analytics-java-apps-1.0.jar

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

上傳應用程式的程式碼
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項步驟中,保留原有設定並選擇 Next (下一步)

  5. 設定許可步驟中,保留原有設定並選擇 Next (下一步)

  6. 選擇建立儲存貯體

  7. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。選擇 Next (下一步)

  9. 設定許可步驟中,保留原有設定。選擇 Next (下一步)

  10. 設定屬性步驟中,保留原有設定。選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

注意

當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.8.2 或 1.6.2 版。

    • 將版本下拉式清單變更為 Apache Flink 1.6

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 java-getting-started-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 監控下,確保監控指標層級設為應用程式

  6. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  7. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

執行應用程式
  1. 在頁面上MyApplication,選擇執行 。確認動作。

  2. 應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)

停止應用程式

在頁面上MyApplication,選擇停止 。確認動作。

更新應用程式

使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。

在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新

建立和執行應用程式 (AWS CLI)

在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2 AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。

建立許可政策

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) (012345678901) 中的帳戶 ID 取代為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

注意

若要存取其他 Amazon 服務,您可以使用 AWS SDK for Java。Managed Service for Apache Flink 會自動將 所需的憑證設定為與您應用程式相關聯的SDK服務執行IAM角色的憑證。無須採取額外的步驟。

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收端串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色建立角色

  3. 選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)

    選擇下一步:許可

  4. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  5. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策。

  6. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立 Managed Service for Apache Flink 應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (username) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_6", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 CreateApplication 動作以建立應用程式:

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您會透過 StartApplication 動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節,您會使用該 StopApplication 動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "test" }
  2. 以停止應用程式的上述請求,執行 StopApplication 動作:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄

更新環境屬性

在本節中,您可以使用 UpdateApplication 動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication AWS CLI 動作。

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication,指定相同的 Amazon S3 儲存貯體和物件名稱。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }

步驟 4:清除 AWS 資源

本節包含在入門教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式

  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 選擇設定

  4. 快照區段中,選擇停用,然後選擇更新

  5. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流

  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源

  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

Managed Service for Apache Flink 的較早版本 (舊版) 範例

本節提供在 Managed Service for Apache Flink 中建立及使用應用程式的範例。其中包含範例程式碼和 step-by-step指示,可協助您建立 Managed Service for Apache Flink 應用程式並測試結果。

在探索這些範例之前,建議先檢閱以下內容:

注意

這些範例假設您使用美國西部 (奧勒岡) 區域 (us-west-2)。如果您使用的是不同的區域,請適當更新應用程式程式碼、命令和IAM角色。

DataStream API 範例

下列範例示範如何使用 Apache Flink 建立應用程式 DataStream API。

範例:緩衝時段

在本練習中,您將使用輪轉視窗建立可彙總資料的 Managed Service for Apache Flink 應用程式。彙總在 Flink 中預設為啟用。可使用下列命令將其停用:

sink.producer.aggregation-enabled' = 'false'
注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • 兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStreamExampleOutputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/TumblingWindow 目錄。

應用程式的程式碼位於 TumblingWindowStreamingJob.java 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 新增以下 import 陳述式:

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • 該應用程式使用 timeWindow 運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子,並將彙總的資料傳送至新的 Kinesis Data Streams 接收器:

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 監控下,確保監控指標層級設為應用程式

  5. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  6. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

執行應用程式
  1. 在頁面上MyApplication,選擇執行 。保持選取不使用快照執行選項,然後確認動作。

  2. 應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

清除 AWS 資源

本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:滑動視窗

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • 兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStreamExampleOutputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/SlidingWindow 目錄。

應用程式的程式碼位於 SlidingWindowStreamingJobWithParallelism.java 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 該應用程式使用 timeWindow 運算子在按 5 秒滑動的 10 秒視窗內尋找每個股票代碼的最小值。下列程式碼會建立運算子,並將彙總的資料傳送至新的 Kinesis Data Streams 接收器:

  • 新增以下 import 陳述式:

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • 該應用程式使用 timeWindow 運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子,並將彙總的資料傳送至新的 Kinesis Data Streams 接收器:

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 監控下,確保監控指標層級設為應用程式

  5. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  6. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

設定應用程式平行處理

此應用程式範例使用任務的平行執行。下列應用程式的程式碼會設定 min 運算子的平行處理層級:

.setParallelism(3) // Set parallelism for the min operator

應用程式平行處理層級不能大於佈建的平行處理層級 (預設值為 1)。若要增加應用程式的平行處理,請使用下列 AWS CLI 動作:

aws kinesisanalyticsv2 update-application --application-name MyApplication --current-application-version-id <VersionId> --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"

您可以使用 DescribeApplicationListApplications動作來擷取目前的應用程式版本 ID。

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

清除 AWS 資源

本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:寫入 Amazon S3 儲存貯體

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將 Kinesis 資料串流作為來源,將 Amazon S3 儲存貯體作為接收器。使用接收器,您就可以驗證 Amazon S3 主控台的應用程式輸出。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 之前,先建立下列相依資源:

  • Kinesis 資料串流 (ExampleInputStream)。

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼和輸出 (ka-app-code-<username>)

注意

Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。在 Amazon S3 儲存貯體中建立兩個資料夾 (codedata)。

如果下列 CloudWatch 資源尚未存在,應用程式會建立這些資源:

  • 名為 /AWS/KinesisAnalytics-java/MyApplication 的日誌群組。

  • 名為 kinesis-analytics-log-stream 的日誌串流。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/S3Sink 目錄。

應用程式的程式碼位於 S3StreamingSinkJob.java 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 您需要新增以下 import 陳述式:

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
  • 該應用程式使用 Apache Flink S3 接收器寫入 Amazon S3。

    接收器會在輪轉視窗中讀取訊息、將訊息編碼到 S3 儲存貯體物件,並將編碼的物件傳送至 S3 接收器。下列程式碼會對傳送至 Amazon S3 的物件進行編碼:

    input.map(value -> { // Parse the JSON JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class); return new Tuple2<>(jsonNode.get("ticker").toString(), 1); }).returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v -> v.f0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.minutes(1))) .sum(1) // Count the appearances by ticker per partition .map(value -> value.f0 + " count: " + value.f1.toString() + "\n") .addSink(createS3SinkFromStaticConfig());
注意

該應用程式使用 Flink StreamingFileSink 物件寫入 Amazon S3。如需 的詳細資訊StreamingFileSink,請參閱 StreamingFileSink Apache Flink 文件中的

修改應用程式碼

在本節中,您要修改應用程式的程式碼,以將輸出寫入 Amazon S3 儲存貯體。

使用您的使用者名稱更新下列行,以指定應用程式的輸出位置:

private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3

編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

注意

提供的來源程式碼依賴於 Java 11 中的程式庫。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,導覽至程式碼資料夾,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

    注意

    當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本保留為 Apache Flink 1.15.2 版 (建議版本)

  6. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  7. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。使用您的使用者名稱取代 <username>。

    { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:%LOG_STREAM_PLACEHOLDER%" ] } , { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 code/aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 監控下,確保監控指標層級設為應用程式

  5. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  6. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

執行應用程式
  1. 在頁面上MyApplication,選擇執行 。保持選取不使用快照執行選項,然後確認動作。

  2. 應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)

驗證應用程式輸出

在 Amazon S3 主控台中開啟 S3 儲存貯體中的 data 資料夾。

幾分鐘後,將顯示包含來自應用程式之彙總資料的物件。

注意

彙總在 Flink 中預設為啟用。可使用下列命令將其停用:

sink.producer.aggregation-enabled' = 'false'
選用:自訂來源和接收器

在本節中,您將自訂來源和接收器物件的設定。

注意

在變更以下各節中描述的程式碼區段之後,請執行下列動作以重新載入應用程式的程式碼:

  • 重複編譯應用程式程式碼一節中的步驟,以編譯更新的應用程式程式碼。

  • 重複上傳 Apache Flink 串流 Java 程式碼一節中的步驟,以上傳更新的應用程式程式碼。

  • 在主控台的應用程式頁面,選擇設定,然後選擇更新,以將更新的應用程式程式碼重新載入您的應用程式。

設定資料分割

在本節中,您可以設定串流檔案接收器在 S3 儲存貯體中建立的資料夾名稱。若要執行此作業,請將儲存貯體指派者新增至串流檔案接收器。

若要自訂 S3 儲存貯體中建立的資料夾之名稱,請執行以下動作:

  1. 將以下 import 陳述式新增到 S3StreamingSinkJob.java 檔案的開頭:

    import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy; import org.apache.flink.streaming.api.functions.sink.filesystem.bucketassigners.DateTimeBucketAssigner;
  2. 將程式碼中的 createS3SinkFromStaticConfig() 方法更新為如下所示:

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy(DefaultRollingPolicy.create().build()) .build(); return sink; }

上述程式碼範例使用自訂日期格式的 DateTimeBucketAssigner 在 S3 儲存貯體中建立資料夾。DateTimeBucketAssigner 使用目前的系統時間建立儲存貯體名稱。如果您想要建立自訂儲存貯體指派器,以進一步自訂建立的資料夾名稱,您可以建立實作 的類別BucketAssigner。您可以使用 getBucketId 方法實作自訂邏輯。

BucketAssigner 的自訂實作可以使用 Context 參數取得記錄的詳細資訊,以判定其目的地資料夾。

設定讀取頻率

在本節中,您可以設定來源串流的讀取頻率。

依預設,Kinesis 串流取用者每秒會從來源串流讀取五次。如果有多個用戶端從串流讀取,或應用程式需要重試讀取記錄,則此頻率會造成問題。您可以設定取用者的讀取頻率來避免這些問題。

若要設定 Kinesis 取用者的讀取頻率,請設定 SHARD_GETRECORDS_INTERVAL_MILLIS 設定。

下列程式碼範例會將 SHARD_GETRECORDS_INTERVAL_MILLIS 設定設為 1 秒:

kinesisConsumerConfig.setProperty(ConsumerConfigConstants.SHARD_GETRECORDS_INTERVAL_MILLIS, "1000");
設定寫入緩衝

在本節中,您要設定接收器的寫入頻率和其他設定。

依預設,應用程式會每分鐘寫入目的地儲存貯體。您可以設定 DefaultRollingPolicy 物件來變更此間隔和其他設定。

注意

每次應用程式建立檢查點時,Apache Flink 串流檔案接收器都會寫入其輸出儲存貯體。應用程式預設每分鐘建立一個檢查點。若要增加 S3 接收器的寫入間隔,必須也增加檢查點間隔。

若要設定 DefaultRollingPolicy 物件,請執行下列動作:

  1. 增加應用程式的 CheckpointInterval 設定。 UpdateApplication 動作的下列輸入會將檢查點間隔設定為 10 分鐘:

    { "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "CheckpointConfigurationUpdate": { "ConfigurationTypeUpdate" : "CUSTOM", "CheckpointIntervalUpdate": 600000 } } }, "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 5 }

    若要使用上述程式碼,請指定目前的應用程式版本。您可以使用 ListApplications動作來擷取應用程式版本。

  2. 將以下 import 陳述式新增到 S3StreamingSinkJob.java 檔案的開頭:

    import java.util.concurrent.TimeUnit;
  3. S3StreamingSinkJob.java 檔案中的 createS3SinkFromStaticConfig 方法更新為如下所示:

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy( DefaultRollingPolicy.create() .withRolloverInterval(TimeUnit.MINUTES.toMillis(8)) .withInactivityInterval(TimeUnit.MINUTES.toMillis(5)) .withMaxPartSize(1024 * 1024 * 1024) .build()) .build(); return sink; }

    上述程式碼範例會將寫入 Amazon S3 儲存貯體的頻率設定為 8 分鐘。

如需設定 Apache Flink 串流檔案接收器的詳細資訊,請參閱 Apache Flink 文件中的資料列編碼格式

清除 AWS 資源

本節包含在 Amazon S3 教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面上,選擇刪除 Kinesis Stream,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

教學課程:使用 Managed Service for Apache Flink 應用程式將資料從MSK叢集中的一個主題複寫到 中的另一個主題 VPC

下列教學課程示範如何使用 Amazon MSK叢集和兩個主題建立 VPC Amazon,以及如何建立 Managed Service for Apache Flink 應用程式,從一個 Amazon MSK主題讀取並寫入另一個主題。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

VPC 使用 Amazon MSK叢集建立 Amazon

若要建立從 Managed Service for Apache Flink 應用程式存取的範例VPC和 Amazon MSK叢集,請遵循開始使用 Amazon MSK教學課程。

完成教學課程時,請注意以下事項:

  • 步驟 3:建立主題中,重複 kafka-topics.sh --create 命令以建立名為 AWSKafkaTutorialTopicDestination 的目的地主題:

    bin/kafka-topics.sh --create --zookeeper ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWS KafkaTutorialTopicDestination
  • 記錄叢集的啟動伺服器清單。您可以使用下列命令取得引導伺服器清單 (取代 ClusterArn 使用MSK叢集ARN的 ):

    aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn {... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }
  • 遵循教學課程中的步驟時,請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。

建立應用程式碼

在本節中,您將下載和編譯應用程式JAR檔案。我們建議使用 Java 11。

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 應用程式的程式碼位於 amazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.java 檔案中。您可以檢查程式碼,以熟悉 Managed Service for Apache Flink 應用程式程式碼的結構。

  4. 使用命令列 Maven 工具或偏好的開發環境來建立JAR檔案。若要使用命令列 Maven 工具編譯JAR檔案,請輸入下列內容:

    mvn package -Dflink.version=1.15.3

    如果建置成功,會建立下列檔案:

    target/KafkaGettingStartedJob-1.0.jar
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。如果您使用的是開發環境,

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 一節建立的 Amazon S3 儲存貯體。

注意

如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳應用程式碼JAR檔案 步驟。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 KafkaGettingStartedJob-1.0.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 針對​執行期,選擇 ​Apache Flink 1.15.2 版

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 KafkaGettingStartedJob-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

    注意

    當您使用主控台 (例如 CloudWatch Logs 或 Amazon VPC) 指定應用程式資源時,主控台會修改您的應用程式執行角色,以授予存取這些資源的許可。

  4. 屬性下,選擇新增群組。輸入下列屬性:

    群組 ID 金鑰
    KafkaSource 主題 AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers The bootstrap server list you saved previously
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    注意

    預設憑證的 ssl.truststore.password 是「changeit」;如果您使用預設憑證,不需要變更此值。

    再次選擇新增群組。輸入下列屬性:

    群組 ID 金鑰
    KafkaSink 主題 AWS KafkaTutorialTopicDestination
    KafkaSink bootstrap.servers The bootstrap server list you saved previously
    KafkaSink security.protocol SSL
    KafkaSink ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSink ssl.truststore.password changeit
    KafkaSink transaction.timeout.ms 1000

    應用程式程式碼會讀取上述應用程式屬性,以設定用於與您的 和 Amazon MSK叢集互動的來源VPC和接收。如需如何使用屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

  5. 快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。

  6. 監控下,確保監控指標層級設為應用程式

  7. 對於CloudWatch 記錄 ,請選擇啟用核取方塊。

  8. 虛擬私有雲端 (VPC) 區段中,選擇要與您的應用程式VPC建立關聯的 。選擇與 相關聯的子網路和安全群組VPC,讓應用程式用來存取VPC資源。

  9. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

測試應用程式。

在本節中,您將記錄寫入來源主題。應用程式會從來源主題讀取記錄,並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄,以確認應用程式是否正常運作。

若要從主題寫入和讀取記錄,請遵循開始使用 Amazon MSK教學課程中的步驟 6:產生和使用資料

若要讀取目的地主題,請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱:

bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning

如果目的地主題中未顯示任何記錄,請參閱 疑難排解 Apache Flink 的受管理服務 主題中的無法訪問中的資源 VPC一節。

範例:搭配 Kinesis 資料串流使用EFO取用者

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,該應用程式使用增強型扇出 (EFO) 取用者從 Kinesis 資料串流讀取。如果 Kinesis 取用者使用 EFO,Kinesis Data Streams 服務會提供自己的專用頻寬,而不是讓取用者與其他從串流讀取的取用者共用串流的固定頻寬。

如需EFO搭配 Kinesis 取用者使用 的詳細資訊,請參閱 FLIP-128: Enhanced Fan Out for Kinesis Consumers

您在此範例中建立的應用程式使用 AWS Kinesis 連接器 (flink-connector-kinesis) 1.15.3。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • 兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStreamExampleOutputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/EfoConsumer 目錄。

應用程式的程式碼位於 EfoApplication.java 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 您可以在 Kinesis EFO取用者上設定下列參數來啟用取用者:

    • RECORD_PUBLISHER_TYPE:將此參數設定為 EFO ,讓您的應用程式使用EFO取用者存取 Kinesis Data Stream 資料。

    • EFO_CONSUMER_NAME:將此參數設定為此串流的取用者中唯一的字串值。在相同的 Kinesis 資料串流中重複使用取用者名稱,將導致先前使用該名稱的使用者遭到終止。

  • 下列程式碼範例示範如何將值指派給取用者組態屬性,以使用EFO取用者從來源串流讀取:

    consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO"); consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 aws-kinesis-analytics-java-apps-1.0.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    注意

    這些許可授予應用程式存取EFO取用者的能力。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "AllStreams", "Effect": "Allow", "Action": [ "kinesis:ListShards", "kinesis:ListStreamConsumers", "kinesis:DescribeStreamSummary" ], "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/*" }, { "Sid": "Stream", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:RegisterStreamConsumer", "kinesis:DeregisterStreamConsumer" ], "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" }, { "Sid": "Consumer", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": [ "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app", "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app:*" ] } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 aws-kinesis-analytics-java-apps-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇建立群組

  5. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    ConsumerConfigProperties flink.stream.recordpublisher EFO
    ConsumerConfigProperties flink.stream.efo.consumername basic-efo-flink-app
    ConsumerConfigProperties INPUT_STREAM ExampleInputStream
    ConsumerConfigProperties flink.inputstream.initpos LATEST
    ConsumerConfigProperties AWS_REGION us-west-2
  6. 屬性下,選擇建立群組

  7. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    ProducerConfigProperties OUTPUT_STREAM ExampleOutputStream
    ProducerConfigProperties AWS_REGION us-west-2
    ProducerConfigProperties AggregationEnabled false
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  10. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

您也可以在資料串流的增強型扇出標籤中,檢查 Kinesis Data Streams 主控台,查看取用者的名稱 (basic-efo-flink-app)。

清除 AWS 資源

本節包含在 efo Window 教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除 Amazon S3 物件與儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:寫入 Firehose

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,該應用程式具有 Kinesis 資料串流作為來源,以及 Firehose 串流作為接收器。使用接收器,您就可以驗證 Amazon S3 儲存貯體的應用程式輸出。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 之前,先建立下列相依資源:

  • Kinesis 資料串流 (ExampleInputStream)

  • 應用程式將輸出寫入 () 的 Firehose 串流ExampleDeliveryStream

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以使用主控台建立 Kinesis 串流、Amazon S3 儲存貯體和 Firehose 串流。如需建立這些資源的相關指示,請參閱以下主題:

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查 Apache Flink 串流 Java 程式碼

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. 導覽至 amazon-kinesis-data-analytics-java-examples/FirehoseSink 目錄。

應用程式的程式碼位於 FirehoseSinkStreamingJob.java 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 應用程式使用 Firehose 接收器將資料寫入 Firehose 串流。下列程式碼片段會建立 Firehose 接收器:

    private static KinesisFirehoseSink<String> createFirehoseSinkFromStaticConfig() { Properties sinkProperties = new Properties(); sinkProperties.setProperty(AWS_REGION, region); return KinesisFirehoseSink.<String>builder() .setFirehoseClientProperties(sinkProperties) .setSerializationSchema(new SimpleStringSchema()) .setDeliveryStreamName(outputDeliveryStreamName) .build(); }
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件

  2. 若要將 Kinesis 連接器用於以下應用程式,您需要下載、建置並安裝 Apache Maven。如需詳細資訊,請參閱 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用

  3. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

上傳應用程式的程式碼
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  3. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 java-getting-started-1.0.jar 檔案。

  4. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

注意

當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式會使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流和 Firehose 串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶的所有執行個體 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteDeliveryStream", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream" } ] }
設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 java-getting-started-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 監控下,確保監控指標層級設為應用程式

  5. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  6. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

在頁面上MyApplication,選擇停止 。確認動作。

更新應用程式

使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。

在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新

注意

若要更新主控台上的應用程式程式碼,您必須變更 的物件名稱JAR、使用不同的 S3 儲存貯體,或使用 AWS CLI ,如 更新應用程式的程式碼 節所述。如果檔案名稱或儲存貯體未變更,當您在設定頁面上選擇更新時,不會重新載入應用程式的程式碼。

建立和執行應用程式 (AWS CLI)

在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。

建立許可政策

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。Replace (取代) username 使用您將用來建立 Amazon S3 儲存貯體以存放應用程式碼的使用者名稱。將 Amazon Resource Names (ARNs) (012345678901) 中的帳戶 ID 取代為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteDeliveryStream", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

注意

若要存取其他 Amazon 服務,您可以使用 AWS SDK for Java。Managed Service for Apache Flink 會自動將 所需的憑證設定為與您應用程式相關聯的SDK服務執行IAM角色的憑證。無須採取額外的步驟。

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收端串流。

Managed Service for Apache Flink 如果沒有許可,將無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接了兩個政策。信任政策會授與 Managed Service for Apache Flink 許可以擔任角色。許可政策決定了 Managed Service for Apache Flink 在擔任角色之後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色建立角色

  3. 選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)

    選擇下一步:許可

  4. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  5. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策。

  6. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策

您現在已建立應用程式將用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立 Managed Service for Apache Flink 應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體ARN尾碼取代為您在 建立相依資源章節 (.) 中選擇的尾碼ka-app-code-<username>。取代範例帳戶 ID (012345678901) 位於服務執行角色中,並提供您的帳戶 ID。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" } } } }
  2. 使用前述請求執行 CreateApplication 動作以建立應用程式:

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您會透過 StartApplication 動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節,您會使用該 StopApplication 動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "test" }
  2. 以停止應用程式的上述請求,執行 StopApplication 動作:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch Logs 與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄

更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication AWS CLI 動作。

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication,指定相同的 Amazon S3 儲存貯體和物件名稱。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>) 加上您在 建立相依資源區段中選擇的字尾。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }
清除 AWS 資源

本節包含在入門教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 選擇設定

  4. 快照區段中,選擇停用,然後選擇更新

  5. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

刪除 Firehose 串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Firehose 面板中,選擇 ExampleDeliveryStream

  3. ExampleDeliveryStream頁面中,選擇刪除 Firehose 串流,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

  4. 如果您為 Firehose 串流的目的地建立 Amazon S3 儲存貯體,請同時刪除該儲存貯體。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 如果您為 Firehose 串流建立新的政策,請同時刪除該政策。

  7. 在導覽列中,選擇角色

  8. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  9. 選擇刪除角色,然後確認刪除。

  10. 如果您為 Firehose 串流建立新的角色,請同時刪除該角色。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:從不同帳戶中的 Kinesis 串流讀取

本範例示範如何建立可從不同帳戶的 Kinesis 串流讀取資料的 Managed Service for Apache Flink 應用程式。在此範例中,您將一個帳戶用於來源 Kinesis 串流,將另一個帳戶用於 Managed Service for Apache Flink 應用程式和接收器 Kinesis 串流。

必要條件
  • 在本教學課程中,您將修改入門範例,從不同帳戶的 Kinesis 串流讀取資料。請完成教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程後再繼續。

  • 您需要兩個 AWS 帳戶才能完成本教學課程:一個用於來源串流,另一個用於應用程式和接收器串流。使用您用於應用程式和接收器串流入門教學 AWS 的帳戶。對來源串流使用不同的 AWS 帳戶。

設定

您可以使用具名設定檔來存取兩個 AWS 帳戶。修改您的 AWS 憑證和組態檔案,以包含兩個設定檔,其中包含兩個帳戶的 區域和連線資訊。

下列範例憑證檔案包含兩個具名的設定檔 ka-source-stream-account-profileka-sink-stream-account-profile。將用於入門教學課程的帳戶用於接收器串流帳戶。

[ka-source-stream-account-profile] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [ka-sink-stream-account-profile] aws_access_key_id=AKIAI44QH8DHBEXAMPLE aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

下列範例組態檔案包含具有區域和輸出格式資訊的相同具名設定檔。

[profile ka-source-stream-account-profile] region=us-west-2 output=json [profile ka-sink-stream-account-profile] region=us-west-2 output=json
注意

本教學課程不使用 ka-sink-stream-account-profile。其中包含如何使用設定檔存取兩個不同 AWS 帳戶的範例。

如需搭配 使用具名設定檔的詳細資訊 AWS CLI,請參閱 AWS Command Line Interface 文件中的具名設定檔

建立來源 Kinesis 串流

在本節中,您將在來源帳戶中建立 Kinesis 串流。

輸入下列命令建立 Kinesis 串流,供應用程式用來輸入。請注意,--profile 參數會指定要使用的帳戶設定檔。

$ aws kinesis create-stream \ --stream-name SourceAccountExampleInputStream \ --shard-count 1 \ --profile ka-source-stream-account-profile
建立和更新IAM角色和政策

若要允許跨 AWS 帳戶存取物件,您可以在來源帳戶中建立IAM角色和政策。然後,您可以修改 sink 帳戶中IAM的政策。如需建立IAM角色和政策的相關資訊,請參閱 AWS Identity and Access Management 使用者指南 中的下列主題:

接收帳戶角色和政策
  1. 從入門教學課程編輯 kinesis-analytics-service-MyApplication-us-west-2 策略。此政策允許應用程式擔任來源帳戶中的角色,以讀取來源串流。

    注意

    使用主控台建立應用程式時,主控台會建立名為 kinesis-analytics-service-<application name>-<application region> 的政策和名為 kinesisanalytics-<application name>-<application region> 的角色。

    將下面反白顯示的部分新增至政策。取代範例帳戶 ID (SOURCE01234567) 搭配您要用於來源串流的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRoleInSourceAccount", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role" }, { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] } ] }
  2. 開啟kinesis-analytics-MyApplication-us-west-2角色,並記下其 Amazon Resource Name (ARN)。您會在下一節中用到它。此角色ARN看起來如下所示。

    arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2
來源帳戶角色和政策
  1. 在名為的 KA-Source-Stream-Policy 來源帳戶中建立策略。針對 政策使用下列 JSON 。使用來源帳戶 ID 取代範例帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadInputStream", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:us-west-2:SOURCE123456784:stream/SourceAccountExampleInputStream" } ] }
  2. 在名為的 MF-Source-Stream-Role 來源帳戶中建立角色。執行下列動作,以使用受管 Flink 使用案例建立角色:

    1. 在IAM管理主控台中,選擇建立角色

    2. 建立角色頁面上選擇 AWS 服務。在服務清單中,選擇 Kinesis

    3. 選取使用案例區塊中,選擇 Managed Service for Apache Flink

    4. 選擇下一步:許可

    5. 新增您在上個步驟中建立的 KA-Source-Stream-Policy 許可政策:選擇 Next: Add Tags (下一步:新增標籤)

    6. 選擇下一步:檢閱

    7. 將角色命名為 KA-Source-Stream-Role。您的應用程式將使用此角色來存取來源串流。

  3. kinesis-analytics-MyApplication-us-west-2 ARN 從接收端帳戶新增至來源帳戶中KA-Source-Stream-Role角色的信任關係:

    1. 在IAM主控台KA-Source-Stream-Role中開啟 。

    2. 選取 Trust Relationships (信任關係) 索引標籤。

    3. 選擇 Edit trust relationship (編輯信任關係)

    4. 將下列程式碼用於信任關係。取代範例帳戶 ID (SINK012345678) 與您的 sink 帳戶 ID。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2" }, "Action": "sts:AssumeRole" } ] }
更新 Python 指令碼

在本節中,您將更新產生範例資料的 Python 指令碼,以使用來源帳戶設定檔。

使用下列反白顯示的變更更新 stock.py 指令碼。

import json import boto3 import random import datetime import os os.environ['AWS_PROFILE'] ='ka-source-stream-account-profile' os.environ['AWS_DEFAULT_REGION'] = 'us-west-2' kinesis = boto3.client('kinesis') def getReferrer(): data = {} now = datetime.datetime.now() str_now = now.isoformat() data['event_time'] = str_now data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']) price = random.random() * 100 data['price'] = round(price, 2) return data while True: data = json.dumps(getReferrer()) print(data) kinesis.put_record( StreamName="SourceAccountExampleInputStream", Data=data, PartitionKey="partitionkey")
更新 Java 應用程式

在本節中,您將更新 Java 應用程式的程式碼,以便在從來源串流讀取時擔任來源帳戶角色。

BasicStreamingJob.java 檔案進行下列變更。取代範例來源帳戶號碼 (SOURCE01234567) 與您的來源帳戶號碼。

package com.amazonaws.services.managed-flink; import com.amazonaws.services.managed-flink.runtime.KinesisAnalyticsRuntime; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisConsumer; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisProducer; import org.apache.flink.streaming.connectors.kinesis.config.ConsumerConfigConstants; import org.apache.flink.streaming.connectors.kinesis.config.AWSConfigConstants; import java.io.IOException; import java.util.Map; import java.util.Properties; /** * A basic Managed Service for Apache Flink for Java application with Kinesis data streams * as source and sink. */ public class BasicStreamingJob { private static final String region = "us-west-2"; private static final String inputStreamName = "SourceAccountExampleInputStream"; private static final String outputStreamName = ExampleOutputStream; private static final String roleArn = "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role"; private static final String roleSessionName = "ksassumedrolesession"; private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) { Properties inputProperties = new Properties(); inputProperties.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, "ASSUME_ROLE"); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_ARN, roleArn); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_SESSION_NAME, roleSessionName); inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region); inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST"); return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties)); } private static KinesisStreamsSink<String> createSinkFromStaticConfig() { Properties outputProperties = new Properties(); outputProperties.setProperty(AWSConfigConstants.AWS_REGION, region); return KinesisStreamsSink.<String>builder() .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema()) .setStreamName(outputProperties.getProperty("OUTPUT_STREAM", "ExampleOutputStream")) .setPartitionKeyGenerator(element -> String.valueOf(element.hashCode())) .build(); } public static void main(String[] args) throws Exception { // set up the streaming execution environment final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> input = createSourceFromStaticConfig(env); input.addSink(createSinkFromStaticConfig()); env.execute("Flink Streaming Java API Skeleton"); } }
建置、上傳和執行應用程式

執行下列動作以更新並執行應用程式:

  1. 在包含 pom.xml 檔案的目錄中,執行下列命令來再次建置應用程式。

    mvn package -Dflink.version=1.15.3
  2. 從 Amazon Simple Storage Service (Amazon S3) 儲存貯體中刪除先前的JAR檔案,然後將新aws-kinesis-analytics-java-apps-1.0.jar檔案上傳至 S3 儲存貯體。

  3. 在 Managed Service for Apache Flink 主控台的應用程式頁面中,選擇設定 更新以重新載入應用程式JAR檔案。

  4. 執行 stock.py 指令碼,以將資料傳送至來源串流。

    python stock.py

應用程式現在會從另一個帳戶的 Kinesis 串流讀取資料。

您可以檢查 ExampleOutputStream 串流的 PutRecords.Bytes 指標,以驗證應用程式是否正在運作。如果輸出串流中有活動,表示應用程式運作正常。

教學課程:搭配 Amazon 使用自訂信任存放區 MSK

目前的資料來源 APIs

如果您使用的是目前的資料來源 APIs,您的應用程式可以利用此處所述的 Amazon MSK Config Providers 公用程式。 https://github.com/aws-samples/msk-config-providers這可讓 KafkaSource 函數存取 Amazon S3 TLS中相互的金鑰存放區和信任存放區。

... // define names of config providers: builder.setProperty("config.providers", "secretsmanager,s3import"); // provide implementation classes for each provider: builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider"); builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider"); String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString(); String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString(); String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString(); String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString(); String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString(); String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString(); String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString(); // region, etc.. builder.setProperty("config.providers.s3import.param.region", region); // properties builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}"); builder.setProperty("ssl.keystore.type", "PKCS12"); builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}"); builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); ...

詳細資訊和逐步導覽可以在此處找到。

舊版 SourceFunction APIs

如果您使用的是舊版 SourceFunction APIs,您的應用程式將使用自訂序列化和還原序列化結構描述,覆寫載入自訂信任存放區open的方法。這讓應用程式在重新啟動或取代執行緒之後可以使用信任存放區。

可使用以下程式碼檢索和存儲自訂信任存放區:

public static void initializeKafkaTruststore() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL inputUrl = classLoader.getResource("kafka.client.truststore.jks"); File dest = new File("/tmp/kafka.client.truststore.jks"); try { FileUtils.copyURLToFile(inputUrl, dest); } catch (Exception ex) { throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex); } }
注意

Apache Flink 要求信任存放區採用 JKS 格式

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。

以下教學課程示範如何安全地連線 (傳輸中加密) 到使用由自訂、私有甚至自託管憑證授權機構 (CA) 發行的伺服器憑證之 Kafka 叢集。

若要將任何 Kafka 用戶端安全地連接到 Kafka TLS 叢集,Kafka 用戶端 (如範例 Flink 應用程式) 必須信任 Kafka 叢集伺服器憑證 (從發出 CA 到根層級 CA) 提供的完整信任鏈。作為自訂信任存放區的範例,我們將使用啟用相互 TLS(MTLS) 身分驗證的 Amazon MSK叢集。這表示MSK叢集節點使用由 AWS Certificate Manager Private Certificate Authority (ACM Private CA) 發行的伺服器憑證,該憑證為您的帳戶和區域私有,因此不受執行 Flink 應用程式之 Java Virtual Machine (JVM) 的預設信任存放區所信任。

注意
  • 金鑰存放區用於存放私有金鑰,以及應用程式應同時呈現給伺服器或用戶端進行驗證的身分憑證。

  • 信任存放區用於儲存來自認證機構 (CA) 的憑證,以驗證SSL連線中伺服器提供的憑證。

您也可以使用本教學課程中的技術,在 Managed Service for Apache Flink 應用程式與其他 Apache Kafka 來源之間進行互動,例如:

VPC 使用 Amazon MSK叢集建立

若要建立從 Managed Service for Apache Flink 應用程式存取的範例VPC和 Amazon MSK叢集,請遵循開始使用 Amazon MSK 教學課程。

完成教學課程時,請注意以下事項:

  • 步驟 3:建立主題中,重複 kafka-topics.sh --create 命令以建立名為 AWS KafkaTutorialTopicDestination 的目的地主題:

    bin/kafka-topics.sh --create --bootstrap-server ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopicDestination
    注意

    如果 kafka-topics.sh 命令傳回 ZooKeeperClientTimeoutException,請確認 Kafka 叢集的安全群組具有一項傳入規則,即允許來自用戶端執行個體私有 IP 地址的所有流量。

  • 記錄叢集的啟動伺服器清單。您可以使用下列命令取得引導伺服器清單 (取代 ClusterArn 使用MSK叢集ARN的 ):

    aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn {... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }
  • 遵循本教學課程中的步驟和先決條件教學課程時,請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。

建立自訂信任存放區並將其套用至叢集

在本節中,您可以建立自訂憑證授權機構 (CA)、使用它來產生自訂信任存放區,並將其套用至MSK叢集。

若要建立和套用您的自訂信任存放區,請按照 Amazon Managed Streaming for Apache Kafka 開發人員指南中的用戶端身分驗證教學課程操作。

建立應用程式碼

在本節中,您可以下載和編譯應用程式JAR檔案。

此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 應用程式的程式碼位於 amazon-kinesis-data-analytics-java-examples/CustomKeystore 檔案中。您可以檢查程式碼,以熟悉 Managed Service for Apache Flink 程式碼的結構。

  4. 使用命令列 Maven 工具或您偏好的開發環境來建立 JAR 檔案。若要使用命令列 Maven 工具編譯JAR檔案,請輸入下列內容:

    mvn package -Dflink.version=1.15.3

    如果建置成功,會建立下列檔案:

    target/flink-app-1.0-SNAPSHOT.jar
    注意

    提供的來源程式碼依賴於 Java 11 中的程式庫。

上傳 Apache Flink 串流 Java 程式碼

在本節中,您會將應用程式的程式碼上傳至在教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 一節建立的 Amazon S3 儲存貯體。

注意

如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳應用程式碼JAR檔案 步驟。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 flink-app-1.0-SNAPSHOT.jar 檔案。

  3. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 針對​執行期,選擇 ​Apache Flink 1.15.2 版

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 flink-app-1.0-SNAPSHOT.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

    注意

    當您使用主控台 (例如日誌或 VPC) 指定應用程式資源時,主控台會修改您的應用程式執行角色,以授予存取這些資源的許可。

  4. 屬性下,選擇新增群組。輸入下列屬性:

    群組 ID 金鑰
    KafkaSource 主題 AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers The bootstrap server list you saved previously
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    注意

    預設憑證的 ssl.truststore.password 是「changeit」;如果您使用預設憑證,不需要變更此值。

    再次選擇新增群組。輸入下列屬性:

    群組 ID 金鑰
    KafkaSink 主題 AWS KafkaTutorialTopicDestination
    KafkaSink bootstrap.servers The bootstrap server list you saved previously
    KafkaSink security.protocol SSL
    KafkaSink ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSink ssl.truststore.password changeit
    KafkaSink transaction.timeout.ms 1000

    應用程式程式碼會讀取上述應用程式屬性,以設定用於與您的 和 Amazon MSK叢集互動的來源VPC和接收。如需如何使用屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性

  5. 快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。

  6. 監控下,確保監控指標層級設為應用程式

  7. 對於CloudWatch 記錄 ,請選擇啟用核取方塊。

  8. 虛擬私有雲端 (VPC) 區段中,選擇要與您的應用程式VPC建立關聯的 。選擇與 相關聯的子網路和安全群組VPC,讓應用程式用來存取VPC資源。

  9. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。

執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

測試應用程式。

在本節中,您將記錄寫入來源主題。應用程式會從來源主題讀取記錄,並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄,以確認應用程式是否正常運作。

若要從主題寫入和讀取記錄,請遵循開始使用 Amazon MSK教學課程中的步驟 6:產生和使用資料

若要讀取目的地主題,請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱:

bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning

如果目的地主題中未顯示任何記錄,請參閱 疑難排解 Apache Flink 的受管理服務 主題中的無法訪問中的資源 VPC一節。

Python 範例

下列範例示範如何使用 Python 與 Apache Flink 資料表 建立應用程式API。

範例:在 Python 中建立管道窗口

在本練習中,您將使用輪轉視窗建立可彙總資料的適用於 Python 的 Managed Service for Apache Flink 應用程式。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • 兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStreamExampleOutputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
注意

本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:

aws configure
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/python/TumblingWindow 目錄。

應用程式的程式碼位於 tumbling-windows.py 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 create_table 函數來建立 Kinesis 資料表來源:

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_table 函數使用 SQL命令來建立由串流來源支援的資料表:

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos)
  • 應用程式使用 Tumble 運算子來彙總指定的輪轉視窗中的記錄,並將彙總記錄作為資料表物件傳回:

    tumbling_window_table = ( input_table.window( Tumble.over("10.seconds").on("event_time").alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
  • 應用程式使用來自 flink-sql-connector-kinesis-1.15.2.jar 的Kinesis Flink 連接器。

壓縮並上傳 Apache Flink 串流 Python 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 使用偏好的壓縮應用程式來壓縮 tumbling-windows.pyflink-sql-connector-kinesis-1.15.2.jar 檔案。命名存檔 myapp.zip

  2. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  3. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 myapp.zip 檔案。

  4. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 myapp.zip

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入下列資料:

    群組 ID 金鑰
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,再次選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. 屬性下,再次選擇新增群組。針對群組 ID,輸入 kinesis.analytics.flink.run.options。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱指定您的程式碼檔案

  9. 輸入下列資料:

    群組 ID 金鑰
    kinesis.analytics.flink.run.options python tumbling-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis-1.15.2.jar
  10. 監控下,確保監控指標層級設為應用程式

  11. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  12. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

清除 AWS 資源

本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:在 Python 中建立滑動視窗

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • 兩個 Kinesis 資料串流 (ExampleInputStreamExampleOutputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (ka-app-code-<username>)

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStreamExampleOutputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
注意

本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:

aws configure
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/>amazon-kinesis-data-analytics-java-examples
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/python/SlidingWindow 目錄。

應用程式的程式碼位於 sliding-windows.py 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 create_input_table 函數來建立 Kinesis 資料表來源:

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_input_table 函數使用 SQL命令來建立由串流來源支援的資料表:

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos) }
  • 應用程式會使用 Slide 運算子來彙總指定滑動視窗內的記錄,並將彙總記錄作為資料表物件傳回:

    sliding_window_table = ( input_table .window( Slide.over("10.seconds") .every("5.seconds") .on("event_time") .alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time") )
  • 應用程式使用來自 flink-sql-connector-kinesis-1.15.2.jar 檔案的 Kinesis Flink 連接器。

壓縮並上傳 Apache Flink 串流 Python 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

本節說明如何封裝 Python 應用程式。

  1. 使用偏好的壓縮應用程式來壓縮 sliding-windows.pyflink-sql-connector-kinesis-1.15.2.jar 檔案。命名存檔 myapp.zip

  2. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  3. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 myapp.zip 檔案。

  4. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 myapp.zip

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,再次選擇新增群組

  7. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. 屬性下,再次選擇新增群組。針對群組 ID,輸入 kinesis.analytics.flink.run.options。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱 指定您的程式碼檔案

  9. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    kinesis.analytics.flink.run.options python sliding-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis_1.15.2.jar
  10. 監控下,確保監控指標層級設為應用程式

  11. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  12. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

清除 AWS 資源

本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:在 Python 中將串流資料傳送至 Amazon S3

在本練習中,您將建立適用於 Python 的 Managed Service for Apache Flink 應用程式,將資料串流傳輸到 Amazon Simple Storage Service 接收器。

注意

若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:

  • Kinesis 資料串流 (ExampleInputStream)

  • Amazon S3 儲存貯體,用來儲存應用程式的程式碼和輸出 (ka-app-code-<username>)

注意

Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:

  • 《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流 ExampleInputStream 命名。

  • 《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體透過附加登入名稱 (例如 ka-app-code-<username>),為 Amazon S3 儲存貯體提供全域唯一的名稱。

將範例記錄寫入輸入串流

在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

注意
注意

本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:

aws configure
  1. 使用下列內容建立名為 stock.py 的檔案:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 執行 stock.py 指令碼:

    $ python stock.py

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/python/S3Sink 目錄。

應用程式的程式碼位於 streaming-file-sink.py 檔案中。請留意下列與應用程式的程式碼相關的資訊:

  • 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 create_source_table 函數來建立 Kinesis 資料表來源:

    table_env.execute_sql( create_source_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_source_table 函數使用 SQL命令來建立由串流來源支援的資料表

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  • 應用程式會使用 filesystem 連接器將記錄傳送至 Amazon S3 儲存貯體:

    def create_sink_table(table_name, bucket_name): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time VARCHAR(64) ) PARTITIONED BY (ticker) WITH ( 'connector'='filesystem', 'path'='s3a://{1}/', 'format'='json', 'sink.partition-commit.policy.kind'='success-file', 'sink.partition-commit.delay' = '1 min' ) """.format(table_name, bucket_name)
  • 應用程式使用來自 flink-sql-connector-kinesis-1.15.2.jar 檔案的 Kinesis Flink 連接器。

壓縮並上傳 Apache Flink 串流 Python 程式碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 使用您偏好的壓縮應用程式壓縮 streaming-file-sink.pyflink-sql-connector-kinesis-1.15.2.jar 檔案。命名存檔 myapp.zip

  2. 在 Amazon S3 主控台中,選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  3. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 myapp.zip 檔案。

  4. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行 Managed Service for Apache Flink 應用程式

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於​執行期,選擇 ​Apache Flink

      注意

      Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。

    • 將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 myapp.zip

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,再次選擇新增群組。針對群組 ID,輸入 kinesis.analytics.flink.run.options。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱 指定您的程式碼檔案

  7. 輸入以下應用程式屬性和數值:

    群組 ID 金鑰
    kinesis.analytics.flink.run.options python streaming-file-sink.py
    kinesis.analytics.flink.run.options jarfile S3Sink/lib/flink-sql-connector-kinesis-1.15.2.jar
  8. 屬性下,再次選擇新增群組。針對群組 ID,輸入 sink.config.0。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱指定您的程式碼檔案

  9. 輸入下列應用程式屬性和值:(取代 bucket-name Amazon S3 儲存貯體的實際名稱。)

    群組 ID 金鑰
    sink.config.0 output.bucket.name bucket-name
  10. 監控下,確保監控指標層級設為應用程式

  11. 對於CloudWatch 記錄 ,選取啟用核取方塊。

  12. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯IAM政策

編輯IAM政策以新增存取 Kinesis 資料串流的許可。

  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteObjects", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

清除 AWS 資源

本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

Scala 範例

下列範例示範如何搭配使用 Scala 與 Apache Flink 來建立應用程式。

範例:在 Scala 中建立隆隆時段

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性

在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入輸出 Kinesis 串流。

注意

若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/scala/TumblingWindow 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • build.sbt 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.scala 檔案包含定義應用程式功能的主要方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    應用程式也會使用 Kinesis 接收器寫入結果串流。以下程式碼片段會建立 Kinesis 目的地:

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • 該應用程式使用視窗運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子,並將彙總的資料傳送至新的 Kinesis Data Streams 接收器:

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Int](jsonNode.get("ticker").toString, 1) } .returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v => v.f0) // Logically partition the stream for each ticker .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) .sum(1) // Sum the number of tickers per partition .map { value => value.f0 + "," + value.f1.toString + "\n" } .sinkTo(createSink)
  • 應用程式會建立來源和接收連接器,以使用 StreamExecutionEnvironment 物件存取外部資源。

  • 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱執行期屬性

編譯和上傳應用程式的程式碼

在本節中,您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

編譯應用程式的程式碼

使用SBT建置工具來建置應用程式的 Scala 程式碼。若要安裝 SBT,請參閱使用 cs 設定 安裝 sbt。您也需要安裝 Java 開發套件 (JDK)。請參閱完成練習的先決條件

  1. 若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:

    sbt assembly
  2. 如果應用程式成功編譯,則會建立下列檔案:

    target/scala-3.2.0/tumbling-window-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼

在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項中,保留原有設定並選擇下一步

  5. 設定許可步驟中,保留原有設定並選擇下一步

  6. 選擇建立儲存貯體

  7. 選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 tumbling-window-scala-1.0.jar 檔案。

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My Scala test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式

請使用下列程序設定應用程式。

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 tumbling-window-scala-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入下列資料:

    群組 ID 金鑰
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,再次選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄 ,請選擇啟用核取方塊。

  10. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

編輯IAM政策

編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。

編輯IAM政策以新增 S3 儲存貯體許可
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/tumbling-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。

建立和執行應用程式 (CLI)

在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,您的應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)為您的帳戶 ID。MF-stream-rw-role 服務執行角色應根據客戶特定角色而打造。

{ "ApplicationName": "tumbling_window", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收端串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接了兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色,然後選擇建立角色

  3. 選取可信身分類型下,選擇 AWS 服務

  4. 選擇將使用此角色的服務下,選擇 Kinesis

  5. 選取使用案例下,選擇 Managed Service for Apache Flink

  6. 選擇下一步:許可

  7. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  8. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策

  9. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇 AKReadSourceStreamWriteSinkStream 政策,然後選擇連接政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立應用程式

將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。ServiceExecutionRole 應包含您在上一節中建立IAM的使用者角色。

"ApplicationName": "tumbling_window", "ApplicationDescription": "Scala getting started application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

CreateApplication 使用下列請求執行 以建立應用程式:

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您可以使用 StartApplication動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "tumbling_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節中,您可以使用 StopApplication動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "tumbling_window" }
  2. 使用前述請求執行 StopApplication 動作以停止應用程式:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch 日誌的資訊,請參閱設定應用程式日誌。

更新環境屬性

在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplicationCLI動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,並呼叫 UpdateApplication,指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "tumbling-window-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源

本節包含清除在管道窗口教學課程中建立 AWS 之資源的程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:在 Scala 中建立滑動視窗

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性

在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入輸出 Kinesis 串流。

注意

若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/scala/SlidingWindow 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • build.sbt 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.scala 檔案包含定義應用程式功能的主要方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    應用程式也會使用 Kinesis 接收器寫入結果串流。以下程式碼片段會建立 Kinesis 目的地:

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • 該應用程式使用視窗運算子在按 5 秒滑動的 10 秒視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子,並將彙總的資料傳送至新的 Kinesis Data Streams 接收器:

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Double](jsonNode.get("ticker").toString, jsonNode.get("price").asDouble) } .returns(Types.TUPLE(Types.STRING, Types.DOUBLE)) .keyBy(v => v.f0) // Logically partition the stream for each word .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .min(1) // Calculate minimum price per ticker over the window .map { value => value.f0 + String.format(",%.2f", value.f1) + "\n" } .sinkTo(createSink)
  • 應用程式會建立來源和接收連接器,以使用 StreamExecutionEnvironment 物件存取外部資源。

  • 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱執行期屬性

編譯和上傳應用程式的程式碼

在本節中,您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

編譯應用程式的程式碼

使用SBT建置工具來建置應用程式的 Scala 程式碼。若要安裝 SBT,請參閱使用 cs 設定 安裝 sbt。您也需要安裝 Java 開發套件 (JDK)。請參閱完成練習的先決條件

  1. 若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:

    sbt assembly
  2. 如果應用程式成功編譯,則會建立下列檔案:

    target/scala-3.2.0/sliding-window-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼

在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項中,保留原有設定並選擇下一步

  5. 設定許可步驟中,保留原有設定並選擇下一步

  6. 選擇建立儲存貯體

  7. 選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 sliding-window-scala-1.0.jar 檔案。

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My Scala test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式

請使用下列程序設定應用程式。

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 sliding-window-scala-1.0.jar.

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入下列資料:

    群組 ID 金鑰
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,再次選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄 ,請選擇啟用核取方塊。

  10. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

編輯IAM政策

編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。

編輯IAM政策以新增 S3 儲存貯體許可
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/sliding-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。

建立和執行應用程式 (CLI)

在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)為您的帳戶 ID。

{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色,然後選擇建立角色

  3. 選取可信身分類型下,選擇 AWS 服務

  4. 選擇將使用此角色的服務下,選擇 Kinesis

  5. 選取使用案例下,選擇 Managed Service for Apache Flink

  6. 選擇下一步:許可

  7. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  8. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策

  9. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇 AKReadSourceStreamWriteSinkStream 政策,然後選擇連接政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立應用程式

將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding_window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

CreateApplication 使用下列請求執行 以建立應用程式:

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您可以使用 StartApplication動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    { "ApplicationName": "sliding_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節中,您可以使用 StopApplication動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "sliding_window" }
  2. 使用前述請求執行 StopApplication 動作以停止應用程式:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的相關資訊,請參閱設定應用程式日誌記錄

更新環境屬性

在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplicationCLI動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication、指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源

本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。

範例:在 Scala 中將串流資料傳送至 Amazon S3

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性

在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入 S3。

注意

若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。您只需在 Amazon S3 儲存貯data/體中建立額外的資料夾 ka-app-code-<username>

下載並檢查應用程式程式碼

此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:

  1. 如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git

  2. 使用以下指令複製遠端儲存庫:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 導覽至 amazon-kinesis-data-analytics-java-examples/scala/S3Sink 目錄。

請留意下列與應用程式的程式碼相關的資訊:

  • build.sbt 檔案包含應用程式的組態和相依性資訊,包括 Managed Service for Apache Flink 程式庫。

  • BasicStreamingJob.scala 檔案包含定義應用程式功能的主要方法。

  • 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    應用程式也會使用 StreamingFileSink 寫入 Amazon S3 儲存貯體:`

    def createSink: StreamingFileSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val s3SinkPath = applicationProperties.get("ProducerConfigProperties").getProperty("s3.sink.path") StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder[String]("UTF-8")) .build() }
  • 應用程式會建立來源和接收連接器,以使用 StreamExecutionEnvironment 物件存取外部資源。

  • 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱執行期屬性

編譯和上傳應用程式的程式碼

在本節中,您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

編譯應用程式的程式碼

使用SBT建置工具來建置應用程式的 Scala 程式碼。若要安裝 SBT,請參閱使用 cs 設定 安裝 sbt。您也需要安裝 Java 開發套件 (JDK)。請參閱完成練習的先決條件

  1. 若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:

    sbt assembly
  2. 如果應用程式成功編譯,則會建立下列檔案:

    target/scala-3.2.0/s3-sink-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼

在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱欄位中,輸入 ka-app-code-<username>。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)

  4. 設定選項中,保留原有設定並選擇下一步

  5. 設定許可步驟中,保留原有設定並選擇下一步

  6. 選擇建立儲存貯體

  7. 選擇 ka-app-code-<username> 儲存貯體,然後選擇上傳

  8. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 s3-sink-scala-1.0.jar 檔案。

  9. 您不需要變更物件的任何設定,因此請選擇上傳

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

建立和執行應用程式 (主控台)

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式

  3. Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:

    • 應用程式名稱中,輸入 MyApplication

    • 對於 Description (說明),輸入 My java test app

    • 對於​執行期,選擇 ​Apache Flink

    • 將版本保留為 Apache Flink 1.15.2 版 (建議版本)

  4. 針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  5. 選擇建立應用程式

注意

當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:

  • 政策:kinesis-analytics-service-MyApplication-us-west-2

  • 角色:kinesisanalytics-MyApplication-us-west-2

設定應用程式

請使用下列程序設定應用程式。

設定應用程式
  1. 在頁面上MyApplication,選擇設定

  2. 設定應用程式頁面,提供程式碼位置

    • 對於 Amazon S3 儲存貯體,請輸入 ka-app-code-<username>

    • 對於 Amazon S3 物件的路徑,請輸入 s3-sink-scala-1.0.jar

  3. 存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色 kinesis-analytics-MyApplication-us-west-2

  4. 屬性下,選擇新增群組

  5. 輸入下列資料:

    群組 ID 金鑰
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    選擇 Save (儲存)。

  6. 屬性下,選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties s3.sink.path s3a://ka-app-code-<user-name>/data
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄 ,請選擇啟用核取方塊。

  10. 選擇更新

注意

當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

  • 日誌群組:/aws/kinesis-analytics/MyApplication

  • 日誌串流:kinesis-analytics-log-stream

編輯IAM政策

編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。

編輯IAM政策以新增 S3 儲存貯體許可
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 選擇政策。選擇主控台為您在上一節所建立的 kinesis-analytics-service-MyApplication-us-west-2 政策。

  3. 摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。

  4. 將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(012345678901) 搭配您的帳戶 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" } ] }
執行應用程式

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。

停止應用程式

若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。

建立和執行應用程式 (CLI)

在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。

建立許可政策
注意

您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)為您的帳戶 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/getting-started-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策

建立 IAM 角色

在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。

Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

建立 IAM 角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色,然後選擇建立角色

  3. 選取可信身分類型下,選擇 AWS 服務

  4. 選擇將使用此角色的服務下,選擇 Kinesis

  5. 選取使用案例下,選擇 Managed Service for Apache Flink

  6. 選擇下一步:許可

  7. 連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。

  8. 建立角色頁面,輸入 MF-stream-rw-role 作為角色名稱。選擇建立角色

    現在您已建立名為 的新IAM角色MF-stream-rw-role。您接著會更新角色的信任和許可政策

  9. 將 許可政策連接到角色。

    注意

    在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。

    1. 摘要頁面,選擇許可標籤。

    2. 選擇連接政策

    3. 在搜尋方塊中,輸入 AKReadSourceStreamWriteSinkStream (您在上一節中建立的政策)。

    4. 選擇 AKReadSourceStreamWriteSinkStream 政策,然後選擇連接政策

您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。

如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)

建立應用程式

將下列JSON程式碼儲存至名為 的檔案create_request.json。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

{ "ApplicationName": "s3_sink", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "s3-sink-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

CreateApplication 使用下列請求執行 以建立應用程式:

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

啟動應用程式

在本節中,您可以使用 StartApplication動作來啟動應用程式。

啟動應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案start_request.json

    {{ "ApplicationName": "s3_sink", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 以啟動應用程式的上述請求,執行 StartApplication 動作:

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。

停止應用程式

在本節中,您可以使用 StopApplication動作來停止應用程式。

停止應用程式
  1. 將下列JSON程式碼儲存至名為 的檔案stop_request.json

    { "ApplicationName": "s3_sink" }
  2. 使用前述請求執行 StopApplication 動作以停止應用程式:

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

現在已停止應用程式。

新增 CloudWatch 記錄選項

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的相關資訊,請參閱設定應用程式日誌。

更新環境屬性

在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。

更新應用程式的環境屬性
  1. 將下列JSON程式碼儲存至名為 的檔案update_properties_request.json

    {"ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } } }
  2. 使用前述請求執行 UpdateApplication 動作以更新環境屬性:

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplicationCLI動作。

注意

若要載入具有相同檔案名稱的新版應用程式的程式碼,必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊,請參閱啟用或停用版本控制

若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication、指定相同的 Amazon S3 儲存貯體和物件名稱,以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

UpdateApplication 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId 更新至目前的應用程式版本。您可以使用 ListApplicationsDescribeApplication 動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "s3-sink-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源

本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。

刪除 Managed Service for Apache Flink 應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台

  2. 在 Managed Service for Apache Flink 面板中,選擇 MyApplication

  3. 在應用程式的頁面,選擇刪除,然後確認刪除。

刪除 Kinesis 資料串流
  1. https://console.aws.amazon.com/kinesis 開啟 Kinesis 主控台。

  2. 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream

  3. ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。

  4. Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。

刪除您的 Amazon S3 物件和儲存貯體
  1. 在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code-<username> 儲存貯體。

  3. 選擇刪除,然後輸入儲存貯體名稱以確認刪除。

刪除您的IAM資源
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽列中,選擇政策

  3. 在篩選器控制項中,輸入 kinesis

  4. 選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。

  5. 選擇政策動作,然後選擇刪除

  6. 在導覽列中,選擇角色

  7. 選擇 kinesis-analytics-MyApplication-us-west-2 角色。

  8. 選擇刪除角色,然後確認刪除。

刪除您的 CloudWatch 資源
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽列中,選擇日誌

  3. 選擇 /aws/kinesis-analytics/MyApplication 日誌群組。

  4. 選擇刪除日誌群組,然後確認刪除。