適用於 Apache Flink 的受管理服務的舊版本資訊 - Managed Service for Apache Flink

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

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

適用於 Apache Flink 的受管理服務的舊版本資訊

注意

阿帕奇 Flink 版本 1.6,1.8 和 1.11 一直沒有得到阿帕奇 Flink 社區的支持超過三年。我們計劃於 2024 年 11 月 5 日在 Amazon 管理服務中淘汰這些版本。從這個日期開始,您將無法為這些 Flink 版本建立新的應用程式。您目前可以繼續執行現有的應用程式。您可以使用適用於 Apache Flink 的 Amazon 受管服務中的就地版本升級功能,以狀態方式升級應用程式。如需詳細資訊,請參閱。阿帕奇 Flink 的就地版本升級

阿帕奇 Flink 的 1.15.2 版和 1.13.2 版本受到 Apache Flink 管理服務的支援,但不再受到 Apache Flink 社群的支援。

使用阿帕奇 Flink Kinesis 串流連接器與先前的 Apache Flink 版本

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

注意

確保正在使用 KPL 0.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 參數。

使用阿帕奇 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
適用於 Flink 運行時的阿帕奇 Flink 的託管服務()aws-kinesisanalytics-runtime 1.0.1
適用於阿帕奇 Flink 連接器的受管理服務 () 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 應用程式建置及使用應用程式程式碼的相關資訊,請參閱創建應用

使用阿帕奇 FLINK 1.6.2 建置應用程式

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

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

元件 版本
Java 1.8 (建議使用)
AWS Java 開發套件 1.11.379
Apache Flink 1.6.2
適用於 Flink 運行時的阿帕奇 Flink 的託管服務()aws-kinesisanalytics-runtime 1.0.1
適用於阿帕奇 Flink 連接器的受管理服務 () 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 應用程式建置及使用應用程式程式碼的相關資訊,請參閱創建應用

升級應用

若要升級適用於 Apache Flink 應用程式的 Amazon 受管服務的 Apache Flink 版本,請使用現地 Apache Flink 版本升級功能 AWS CLI,使用軟體 AWS 開發套件或. AWS CloudFormation AWS Management Console如需詳細資訊,請參閱 阿帕奇 Flink 的就地版本升級

您可以將此功能與任何現有的應用程式搭配使用於 Apache Flink 的 Amazon 受管服務 (READYRUNNING狀態)。

阿帕奇 FLINK 1.6.2 和 1.8.2 中的可用連接器

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

開始使用:快速

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

適用於 Apache Flink 應用程式的受管理服務元件

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

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

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

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

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

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 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/signup

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

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

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。安全性最佳做法是將管理存取權指派給使用者,並僅使用 root 使用者來執行需要 root 使用者存取權的工作。

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

建立具有管理權限的使用者

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

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

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

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

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

建立具有管理權限的使用者
  1. 啟用 IAM Identity Center。

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

  2. 在 IAM 身分中心中,將管理存取權授予使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以具有管理權限的使用者身分登入
指派存取權給其他使用者
  1. 在 IAM 身分中心中,建立遵循套用最低權限許可的最佳做法的權限集。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「建立權限集」。

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

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

授與程式設計存取權

如果使用者想要與 AWS 之外的 AWS Management Console. 授與程式設計存 AWS取權的方式取決於正在存取的使用者類型。

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

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

人力身分

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

使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

IAM 使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。 遵循《IAM 使用者指南》中的〈將臨時登入資料搭配 AWS 資源使用〉中的指
IAM

(不建議使用)

使用長期認證簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

下一步驟

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

下一步驟

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

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

在此步驟中,您會下載並設定 AWS CLI 要與 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 步:為 Apache Flink 應用程序創建並運行託管服務

第 3 步:為 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

下載並檢查阿帕奇 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 Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件

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

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

      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

上傳阿帕奇 Flink 流 Java 代碼

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

上傳應用程式的程式碼
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

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

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

  6. 選擇建立儲存貯體

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

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

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

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

建立並執行 Apache Flink 應用程式的受管理服務

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

注意

使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 日誌資源。使用建立應用程式時 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,Apache Flink 的受管服務會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

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

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

執行應用程式

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

停止應用程式

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

更新應用程式

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

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

創建並運行應用程序(AWS CLI)

在本節中,您可 AWS CLI 以使用建立和執行 Apache Flink 應用程式的受管理服務。適用於 Apache Flink 的受管理服務會使用指kinesisanalyticsv2 AWS CLI 令來建立 Apache Flink 應用程式的受管理服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (012345678901) 中的帳戶 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 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. 選擇 AK 原ReadSourceStreamWriteSinkStream則,然後選擇 [附加原則]。

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

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

為 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 主控台上查看適用於 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 記錄的相關資訊,請參閱設定應用程式記錄

更新環境屬性

在本節中,您可以使用 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 動作來檢查目前的應用程式版本。使用您在建立兩個 Amazon Kinesis 資料串流一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務

  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

  2. 在適用於 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 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶

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

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源

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

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

下一步驟

步驟 5:後續步驟

步驟 5:後續步驟

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

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

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

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

  • 適用於 Apache Flink 工作坊的 Amazon 受管服務在本研討會中,您可以建立 end-to-end 串流架構,以近乎即時的方式擷取、分析串流資料並以視覺化方式呈現。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。

  • 學習 Flink:動手訓練:官方介紹性 Apache Flink 訓練課程,可協助您開始撰寫可擴展的串流 ETL、分析和事件驅動型應用程式。

    注意

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

開始使用:Flink 1.11.1-棄用

注意

阿帕奇 Flink 版本 1.6,1.8 和 1.11 一直沒有得到阿帕奇 Flink 社區的支持超過三年。我們計劃於 2024 年 11 月 5 日在 Amazon 管理服務中淘汰這些版本。從這個日期開始,您將無法為這些 Flink 版本建立新的應用程式。您目前可以繼續執行現有的應用程式。您可以使用適用於 Apache Flink 的 Amazon 受管服務中的就地版本升級功能,以狀態方式升級應用程式。如需詳細資訊,請參閱。阿帕奇 Flink 的就地版本升級

本主題包含使用 Apache Flink 1.11.1 的開始使DataStream 用 (API)教學課程版本。

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

適用於 Apache Flink 應用程式的受管理服務元件

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

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

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

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

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

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 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/signup

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

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

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。安全性最佳做法是將管理存取權指派給使用者,並僅使用 root 使用者來執行需要 root 使用者存取權的工作。

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

建立具有管理權限的使用者

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

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

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

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

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

建立具有管理權限的使用者
  1. 啟用 IAM Identity Center。

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

  2. 在 IAM 身分中心中,將管理存取權授予使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以具有管理權限的使用者身分登入
指派存取權給其他使用者
  1. 在 IAM 身分中心中,建立遵循套用最低權限許可的最佳做法的權限集。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「建立權限集」。

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

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

授與程式設計存取權

如果使用者想要與 AWS 之外的 AWS Management Console. 授與程式設計存 AWS取權的方式取決於正在存取的使用者類型。

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

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

人力身分

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

使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

IAM 使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。 遵循《IAM 使用者指南》中的〈將臨時登入資料搭配 AWS 資源使用〉中的指
IAM

(不建議使用)

使用長期認證簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

下一步驟

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

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

在此步驟中,您會下載並設定 AWS CLI 要與 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 步:為 Apache Flink 應用程序創建並運行託管服務

第 3 步:為 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

下載並檢查阿帕奇 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 Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件

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

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

      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

上傳阿帕奇 Flink 流 Java 代碼

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

上傳應用程式的程式碼
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

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

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

  6. 選擇建立儲存貯體

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

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

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

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

建立並執行 Apache Flink 應用程式的受管理服務

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

注意

使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 日誌資源。使用建立應用程式時 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,Apache Flink 的受管服務會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

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

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

執行應用程式

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

停止應用程式

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

更新應用程式

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

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

創建並運行應用程序(AWS CLI)

在本節中,您 AWS CLI 將使用建立並執行 Apache Flink 應用程式的受管理服務。Apache Flink 的受管理服務會使用此kinesisanalyticsv2 AWS CLI 命令來建立 Apache Flink 應用程式的受管理服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (012345678901) 中的帳戶 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 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. 選擇 AK 原ReadSourceStreamWriteSinkStream則,然後選擇 [附加原則]。

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

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

為 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 主控台上查看適用於 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 記錄的相關資訊,請參閱設定應用程式記錄

更新環境屬性

在本節中,您可以使用 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 動作來檢查目前的應用程式版本。使用您在建立兩個 Amazon Kinesis 資料串流一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務

  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

  2. 在適用於 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 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶

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

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除路由 IAM 資源

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

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

下一步驟

步驟 5:後續步驟

步驟 5:後續步驟

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

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

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

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

  • 適用於 Apache Flink 工作坊的 Amazon 受管服務在本研討會中,您可以建立 end-to-end 串流架構,以近乎即時的方式擷取、分析串流資料並以視覺化方式呈現。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。

  • 學習 Flink:動手訓練:官方介紹性 Apache Flink 訓練課程,可協助您開始撰寫可擴展的串流 ETL、分析和事件驅動型應用程式。

    注意

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

  • 阿帕奇 Flink 代碼示例一個 GitHub 存儲庫中包含了各種各樣的 Apache Flink 應用實例。

開始使用:Flink 1.8.2-棄用

注意

阿帕奇 Flink 版本 1.6,1.8 和 1.11 一直沒有得到阿帕奇 Flink 社區的支持超過三年。我們計劃於 2024 年 11 月 5 日在 Amazon 管理服務中淘汰這些版本。從這個日期開始,您將無法為這些 Flink 版本建立新的應用程式。您目前可以繼續執行現有的應用程式。您可以使用適用於 Apache Flink 的 Amazon 受管服務中的就地版本升級功能,以狀態方式升級應用程式。如需詳細資訊,請參閱。阿帕奇 Flink 的就地版本升級

本主題包含使用 Apache Flink 1.8.2 的開始使DataStream 用 (API)教學課程版本。

適用於 Apache Flink 應用程式的受管理服務元件

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

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

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

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

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

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 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/signup

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

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

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。安全性最佳做法是將管理存取權指派給使用者,並僅使用 root 使用者來執行需要 root 使用者存取權的工作。

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

建立具有管理權限的使用者

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

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

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

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

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

建立具有管理權限的使用者
  1. 啟用 IAM Identity Center。

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

  2. 在 IAM 身分中心中,將管理存取權授予使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以具有管理權限的使用者身分登入
指派存取權給其他使用者
  1. 在 IAM 身分中心中,建立遵循套用最低權限許可的最佳做法的權限集。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「建立權限集」。

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

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

授與程式設計存取權

如果使用者想要與 AWS 之外的 AWS Management Console. 授與程式設計存 AWS取權的方式取決於正在存取的使用者類型。

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

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

人力身分

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

使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

IAM 使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。 遵循《IAM 使用者指南》中的〈將臨時登入資料搭配 AWS 資源使用〉中的指
IAM

(不建議使用)

使用長期認證簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

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

在此步驟中,您會下載並設定 AWS CLI 要與 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 步:為 Apache Flink 應用程序創建並運行託管服務

第 3 步:為 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

下載並檢查阿帕奇 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 Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件

注意

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

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

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

      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

上傳阿帕奇 Flink 流 Java 代碼

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

上傳應用程式的程式碼
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

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

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

  6. 選擇建立儲存貯體

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

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

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

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

建立並執行 Apache Flink 應用程式的受管理服務

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

注意

使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 日誌資源。使用建立應用程式時 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,Apache Flink 的受管服務會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

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

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

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

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

停止應用程式

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

更新應用程式

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

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

創建並運行應用程序(AWS CLI)

在本節中,您可 AWS CLI 以使用建立和執行 Apache Flink 應用程式的受管理服務。適用於 Apache Flink 的受管理服務會使用指kinesisanalyticsv2 AWS CLI 令來建立 Apache Flink 應用程式的受管理服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (012345678901) 中的帳戶 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 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. 選擇 AK 原ReadSourceStreamWriteSinkStream則,然後選擇 [附加原則]。

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

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

為 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 主控台上查看適用於 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 記錄的相關資訊,請參閱設定應用程式記錄

更新環境屬性

在本節中,您可以使用 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 動作來檢查目前的應用程式版本。使用您在建立兩個 Amazon Kinesis 資料串流一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務

  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

  2. 在適用於 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 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶

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

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源

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

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

開始使用:Flink 1.6.2-棄用

注意

阿帕奇 Flink 版本 1.6,1.8 和 1.11 一直沒有得到阿帕奇 Flink 社區的支持超過三年。我們計劃於 2024 年 11 月 5 日在 Amazon 管理服務中淘汰這些版本。從這個日期開始,您將無法為這些 Flink 版本建立新的應用程式。您目前可以繼續執行現有的應用程式。您可以使用適用於 Apache Flink 的 Amazon 受管服務中的就地版本升級功能,以狀態方式升級應用程式。如需詳細資訊,請參閱。阿帕奇 Flink 的就地版本升級

本主題包含使用 Apache Flink 1.6.2 的開始使DataStream 用 (API)教學課程版本。

適用於 Apache Flink 應用程式的受管理服務元件

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

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

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

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

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

  • 接收器:應用程式透過使用接收器生成資料到外部來源。接收器連接器會將資料寫入 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/signup

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

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

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。安全性最佳做法是將管理存取權指派給使用者,並僅使用 root 使用者來執行需要 root 使用者存取權的工作。

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

建立具有管理權限的使用者

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

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

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

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

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

建立具有管理權限的使用者
  1. 啟用 IAM Identity Center。

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

  2. 在 IAM 身分中心中,將管理存取權授予使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以具有管理權限的使用者身分登入
指派存取權給其他使用者
  1. 在 IAM 身分中心中,建立遵循套用最低權限許可的最佳做法的權限集。

    如需指示,請參閱《AWS IAM Identity Center 使用指南》中的「建立權限集」。

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

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

授與程式設計存取權

如果使用者想要與 AWS 之外的 AWS Management Console. 授與程式設計存 AWS取權的方式取決於正在存取的使用者類型。

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

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

人力身分

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

使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

IAM 使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。 遵循《IAM 使用者指南》中的〈將臨時登入資料搭配 AWS 資源使用〉中的指
IAM

(不建議使用)

使用長期認證簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

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

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

在此步驟中,您將下載並設定 AWS CLI 為搭配 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 步:為 Apache Flink 應用程序創建並運行託管服務

第 3 步:為 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

下載並檢查阿帕奇 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 Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件

注意

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

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

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

      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

上傳阿帕奇 Flink 流 Java 代碼

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

上傳應用程式的程式碼
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

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

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

  6. 選擇建立儲存貯體

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

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

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

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

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

建立並執行 Apache Flink 應用程式的受管理服務

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

注意

使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 日誌資源。使用建立應用程式時 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,Apache Flink 的受管服務會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:

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

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

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

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

停止應用程式

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

更新應用程式

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

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

創建並運行應用程序(AWS CLI)

在本節中,您可 AWS CLI 以使用建立和執行 Apache Flink 應用程式的受管理服務。適用於 Apache Flink 的受管理服務會使用指kinesisanalyticsv2 AWS CLI 令來建立 Apache Flink 應用程式的受管理服務,並與之互動。

建立許可政策

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (012345678901) 中的帳戶 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 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. 選擇 AK 原ReadSourceStreamWriteSinkStream則,然後選擇 [附加原則]。

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

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

為 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 主控台上查看適用於 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 記錄的相關資訊,請參閱設定應用程式記錄

更新環境屬性

在本節中,您可以使用 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 動作來檢查目前的應用程式版本。使用您在建立兩個 Amazon Kinesis 資料串流一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

{ "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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務

  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

  2. 在適用於 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 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶

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

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源

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

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

適用於 Apache Flink 的受管理服務的舊版 (舊版) 範例

注意

如需目前範例,請參閱範例

本節提供在 Managed Service for Apache Flink 中建立及使用應用程式的範例。其中包含範例程式碼和 step-by-step 指示,可協助您為 Apache Flink 應用程式建立受管理服務並測試結果。

在探索這些範例之前,建議先檢閱以下內容:

注意

這些範例假設您使用美國西部 (奧勒岡) 區域 (us-west-2)。如果您使其他區域,請相應地更新應用程式的程式碼、命令和 IAM 角色。

DataStream API 範例

下列範例示範如何使用 Apache Flink DataStream API 建立應用程式。

範例:翻滾窗

注意

如需目前範例,請參閱範例

在本練習中,您將使用輪轉視窗建立可彙總資料的 Managed Service for Apache Flink 應用程式。彙總在 Flink 中預設為啟用。可使用下列命令將其停用:

sink.producer.aggregation-enabled' = 'false'
注意

若要設定此練習的必要先決條件,請先完成 開始使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,請先安裝。如需詳細資訊,請參閱開始使DataStream 用 (API)教學課程中的必要條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

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

編譯應用程式會建立應用程式 JAR 檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

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

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

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

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

建立並執行 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,Apache Flink 的受管理服務會為您建立記錄群組和記錄資料流。這些資源的名稱如下所示:

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

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

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

執行應用程式
  1. MyApplication頁面上,選擇 [執行]。保持選取不使用快照執行選項,然後確認動作。

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

您可以在 CloudWatch 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

清除 AWS 資源

本節包括清除在「暫停視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

範例:滑動窗

注意

如需目前範例,請參閱範例

注意

若要設定此練習的必要先決條件,請先完成 開始使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,請先安裝。如需詳細資訊,請參閱開始使DataStream 用 (API)教學課程中的必要條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

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

編譯應用程式會建立應用程式 JAR 檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

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

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

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

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

建立並執行 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    { "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 記錄時,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 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

清理 AWS 資源

本節包括清理在「滑動視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

範例:寫入 Amazon S3 儲存貯體

在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將 Kinesis 資料串流作為來源,將 Amazon S3 儲存貯體作為接收器。使用接收器,您就可以驗證 Amazon S3 主控台的應用程式輸出。

注意

若要設定此練習的必要先決條件,請先完成 開始使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,請參閱《Apache Flink》文件StreamingFileSink中的〈〉。

修改應用程式程式碼

在本節中,您要修改應用程式的程式碼,以將輸出寫入 Amazon S3 儲存貯體。

使用您的使用者名稱更新下列行,以指定應用程式的輸出位置:

private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱開始使DataStream 用 (API)教學課程中的必要條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3

編譯應用程式會建立應用程式 JAR 檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

注意

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

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

  1. 在 Amazon S3 主控台中,選擇 ka-app-code- 儲存<username>貯體,導覽至程式碼資料夾,然後選擇「上傳」。

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

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

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

建立並執行 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

  4. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (012345678901)。使用您的使用者名稱取代 <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 記錄時,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'
可選:自訂來源和接收器

在本節中,您將自訂來源和接收器物件的設定。

注意

在變更以下各節中描述的程式碼區段之後,請執行下列動作以重新載入應用程式的程式碼:

  • 重複編譯應用程式程式碼一節中的步驟,以編譯更新的應用程式程式碼。

  • 重複上傳阿帕奇 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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面上,選擇刪除 Kinesis 串流,然後確認刪除。

刪除您的 Amazon S3 對象和存儲桶
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

教學課程:使用 Apache Flink 應用程式的受管理服務,將 MSK 叢集中某個主題的資料複製到 VPC 中的另一個主題

注意

如需目前範例,請參閱範例

以下教學課程將示範如何建立 Amazon MSK 叢集和 Amazon VPC 以及兩個主題,以及如何建立一個 Managed Service for Apache Flink 應用程式以從 Amazon MSK 主題讀取並寫入另一個主題。

注意

若要設定此練習的必要先決條件,請先完成 開始使DataStream 用 (API) 練習。

建立 Amazon VPC 和 Amazon MSK 叢集

若要建立範例 VPC 和 Amazon MSK 叢集以從 Managed Service for Apache Flink 應用程式存取,請按照 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 中的程式庫。如果您使用的是開發環境,

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在開始使DataStream 用 (API)一節建立的 Amazon S3 儲存貯體。

注意

如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳阿帕奇 Flink 流 Java 代碼 步驟。

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

  2. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 KafkaGettingStartedJob-1.0.jar 檔案。

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

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

建立應用程式
  1. 在 https://console.aws.amazon.com/flink 開啟適用於阿帕奇 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 日誌或 Amazon VPC) 指定應用程式資源時,主控台會修改應用程式執行角色,以授與存取這些資源的權限。

  4. 屬性下,選擇新增群組。輸入下列屬性:

    群組 ID 金鑰
    KafkaSource 主題 AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers 先前儲存的啟動伺服器清單
    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 先前儲存的啟動伺服器清單
    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

    應用程式的程式碼會讀取上述應用程式屬性,以設定用來與 VPC 和 Amazon MSK 叢集互動的來源和接收器。如需如何使用屬性的詳細資訊,請參閱運行時屬性

  5. 快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。

  6. 監控下,確保監控指標層級設為應用程式

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

  8. 虛擬私有雲端 (VPC) 區段中,選擇要與應用程式建立關聯的 VPC。選擇希望應用程式用來存取 VPC 資源的與 VPC 相關聯的子網路和安全群組。

  9. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,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

如果目的地主題中未顯示任何記錄,請參閱 故障診斷 主題中的無法存取 VPC 中的資源一節。

範例:搭配 Kinesis 資料串流使用 EFO 取用者

注意

如需目前範例,請參閱範例

在本練習中,您會建立 Apache Flink 應用程式的受管服務,該應用程式會使用增強型散發 (EFO) 用戶從 Kinesis 資料串流讀取。如果 Kinesis 取用者使用 EFO,Kinesis Data Streams 服務會提供專屬頻寬,而不是讓取用者與其他從串流讀取的取用者共用串流的固定頻寬。

如需將 EFO 用於 Kinesis 取用者的詳細資訊,請參閱 FLIP-128:將增強型扇出用於 Kinesis 取用者

您在此範例中建立的應用程式使用 AWS Kinesis 連接器 (flink-connector-kinesis) 1.15.3。

注意

若要設定此練習的必要先決條件,請先完成 開始使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 資料串流資料。

    • EFO_CONSUMER_NAME:將此參數設定為字串值,確保在此串流的取用者中保持唯一。在相同的 Kinesis 資料串流中重複使用取用者名稱,將導致先前使用該名稱的使用者遭到終止。

  • 下列程式碼範例示範如何將值指派給取用者組態屬性,以便使用 EFO 取用者從來源串流讀取:

    consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO"); consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
編譯應用程式程式碼

若要編譯應用程式,請執行下列動作:

  1. 如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱開始使DataStream 用 (API)教學課程中的必要條件

  2. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

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

編譯應用程式會建立應用程式 JAR 檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

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

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

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

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

建立並執行 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 政策來新增存取 Kinesis 資料串流的許可。

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

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

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

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

    注意

    這些許可授與應用程式存取 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 記錄時,Apache Flink 的受管理服務會為您建立記錄群組和記錄資料流。這些資源的名稱如下所示:

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

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

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

執行應用程式

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

您可以在 CloudWatch 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

您也可以在資料串流的增強型散發索引標籤中,查看 Kinesis 資料串流主控台,以取得用戶名稱 () basic-efo-flink-app

清理 AWS 資源

本節包括清理在 efo 視窗教學課程中建立的 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除 Amazon S3 物件與儲存貯體
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

例子:寫信給 Firehose

注意

如需目前範例,請參閱範例

在本練習中,您會建立 Apache Flink 應用程式的受管理服務,該應用程式具有 Kinesis 資料串流做為來源,並將 Firehose 串流做為接收器。使用接收器,您就可以驗證 Amazon S3 儲存貯體的應用程式輸出。

注意

若要設定此練習的必要先決條件,請先完成 開始使DataStream 用 (API) 練習。

建立相依資源

在為本練習建立 Managed Service for Apache Flink 之前,先建立下列相依資源:

  • Kinesis 資料串流 (ExampleInputStream)

  • 應用程式將輸出寫入 (ExampleDeliveryStream) 的 Firehose 資料流。

  • 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

    在完成教學課程的其餘部分時,讓指令碼保持執行狀態。

下載並檢查阿帕奇 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,請先安裝。如需詳細資訊,請參閱開始使DataStream 用 (API)教學課程中的必要條件

  2. 若要將 Kinesis 連接器用於以下應用程式,您需要下載、建置並安裝 Apache Maven。如需詳細資訊,請參閱使用阿帕奇 Flink Kinesis 串流連接器與先前的 Apache Flink 版本

  3. 使用下列命令編譯應用程式:

    mvn package -Dflink.version=1.15.3
    注意

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

編譯應用程式會建立應用程式 JAR 檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar)。

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。

上傳應用程式的程式碼
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 在主控台中,選擇 [ka-app-code- <username>值區],然後選擇 [上傳]。

  3. 選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的 java-getting-started-1.0.jar 檔案。

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

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

建立並執行 Apache Flink 應用程式的受管理服務

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

注意

使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 日誌資源。使用建立應用程式時 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

編輯身分與存取權管

編輯身分與存取權管理政策,以新增存取 Kinesis 資料串流和 Firehose 串流的許可。

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

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

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

  4. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (012345678901) 的所有執行個體。

    { "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 記錄時,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 以使用建立和執行 Apache Flink 應用程式的受管理服務。

建立許可政策

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。使用您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username 。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (012345678901) 中的帳戶 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. 前往網址 https://console.aws.amazon.com/iam/ 開啟 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. 選擇 AK 原ReadSourceStreamWriteSinkStream則,然後選擇 [附加原則]。

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

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

為 Apache Flink 應用程式建立受管理的服務
  1. 將下列 JSON 程式碼複製到名為 create_request.json 的檔案。使用您之前建立之角色的 ARN,取代範例角色 ARN。使用您在建立相依資源一節中選擇的尾碼 (ka-app-code-<username>) 取代儲存貯體 ARN 尾碼。使用您的帳戶 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": "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 主控台上查看適用於 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 記錄的相關資訊,請參閱設定應用程式記錄

更新應用程式的程式碼

當您需要使用新版本的程式碼套件更新應用程式程式碼時,請使用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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

  3. 選擇設定

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

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

刪除您的「Firehose」串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/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. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

  6. 如果您已為 Firehose 串流建立新政策,請同時刪除該原則。

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

  8. 選擇運動分析-MyApplication us-west-2 角色

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

  10. 如果您為 Firehose 串流建立了新角色,請同時刪除該角色。

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

範例:從不同帳戶的 Kinesis 串流讀取

注意

如需目前範例,請參閱範例

本範例示範如何建立可從不同帳戶的 Kinesis 串流讀取資料的 Managed Service for Apache Flink 應用程式。在此範例中,您將一個帳戶用於來源 Kinesis 串流,將另一個帳戶用於 Managed Service for Apache Flink 應用程式和接收器 Kinesis 串流。

必要條件
  • 在本教學課程中,您將修改入門範例,從不同帳戶的 Kinesis 串流讀取資料。請完成開始使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 角色和政策。然後修改接收器帳戶中的 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 取代範例帳戶 ID (SOURCE01234567)。

    { "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 取代範例帳戶 ID (SINK012345678)。

      { "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 檔案進行下列變更。使用您的來源帳戶 ID 取代範例來源帳戶 ID (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 使用自訂信任庫

注意

如需目前範例,請參閱範例

目前資料來源 API

如果您使用目前的資料來源 API,您的應用程式可以利用此處所述的 Amazon MSK Config 提供者公用程式。這可讓您的 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 API

如果您使用舊版 SourceFunction API,您的應用程式將使用自訂序列化和還原序列化結構描述,這些結構描述會覆寫載入自訂信任存放區的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 格式

注意

若要設定此練習的必要先決條件,請先完成 開始使DataStream 用 (API) 練習。

以下教學課程示範如何安全地連線 (傳輸中加密) 到使用由自訂、私有甚至自託管憑證授權機構 (CA) 發行的伺服器憑證之 Kafka 叢集。

為了通過 TLS 安全地連接任何卡夫卡客戶端到卡夫卡集群,卡夫卡客戶端(如示例 Flink 應用程序)必須信任卡夫卡集群的服務器證書(從發行 CA 到根級 CA)提供的完整信任鏈。作為自訂信任存放區的範例,我們將使用已啟用相互 TLS (MTLS) 身份驗證的 Amazon MSK 叢集。這表示 MSK 叢集節點使用由 Certificate Manager 專用憑 AWS 證授權單位 (ACM Private CA) 發行的伺服器憑證,該憑證對您的帳戶和區域是私有的,因此不受執行 Flink 應用程式之 Java 虛擬機器 (JVM) 的預設信任存放區所信任。

注意
  • 密鑰庫用於存儲應用程序應該向服務器或客戶端進行驗證的私鑰和身份證書。

  • 信任庫用於存儲來自認證授權單位(CA)的證書,以驗證服務器在 SSL 連接中提供的證書。

您也可以使用本教學課程中的技術,在 Managed Service for Apache Flink 應用程式與其他 Apache Kafka 來源之間進行互動,例如:

使用 Amazon MSK 叢集建立 VPC

若要建立範例 VPC 和 Amazon MSK 叢集以從 Managed Service for Apache Flink 應用程式存取,請按照 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 Region。

建立自訂信任庫並將其套用至叢集

在本節中,您將建立自訂憑證授權機構 (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 中的程式庫。

上傳阿帕奇 Flink 流 Java 代碼

在本節中,您會將應用程式的程式碼上傳至在開始使DataStream 用 (API)一節建立的 Amazon S3 儲存貯體。

注意

如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳阿帕奇 Flink 流 Java 代碼 步驟。

  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 先前儲存的啟動伺服器清單
    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 先前儲存的啟動伺服器清單
    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

    應用程式的程式碼會讀取上述應用程式屬性,以設定用來與 VPC 和 Amazon MSK 叢集互動的來源和接收器。如需如何使用屬性的詳細資訊,請參閱運行時屬性

  5. 快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。

  6. 監控下,確保監控指標層級設為應用程式

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

  8. 虛擬私有雲端 (VPC) 區段中,選擇要與應用程式建立關聯的 VPC。選擇希望應用程式用來存取 VPC 資源的與 VPC 相關聯的子網路和安全群組。

  9. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,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

如果目的地主題中未顯示任何記錄,請參閱 故障診斷 主題中的無法存取 VPC 中的資源一節。

Python 範例

下列範例示範如何搭配使用 Python 與 Apache Flink 資料表 API 建立應用程式。

示例:在 Python 中創建一個翻滾窗口

注意

如需目前範例,請參閱範例

在本練習中,您將使用輪轉視窗建立可彙總資料的適用於 Python 的 Managed Service for 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 連接器。

壓縮並上傳阿帕奇 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 儲存貯體中。

建立並執行 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

    選擇儲存

  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 記錄時,Apache Flink 的受管理服務會為您建立記錄群組和記錄資料流。這些資源的名稱如下所示:

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

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

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯身分與存取權管

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

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

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

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

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

    { "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 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

清理 AWS 資源

本節包括清除在「暫停視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

示例:在 Python 中創建一個滑動窗口

注意

如需目前範例,請參閱範例

注意

若要設定此練習的必要先決條件,請先完成 開始使用 (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") )
  • 應用程式使用 Kinesis Flink 連接器,從 flink-sql-connector-kinesis- 1.15.2.jar 檔案。

壓縮並上傳阿帕奇 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 儲存貯體中。

建立並執行 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

    選擇儲存

  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 記錄時,Apache Flink 的受管理服務會為您建立記錄群組和記錄資料流。這些資源的名稱如下所示:

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

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

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯身分與存取權管

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

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

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

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

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

    { "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 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

清理 AWS 資源

本節包括清理在「滑動視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

範例:使用 Python 將串流資料傳送至 Amazon S3

注意

如需目前範例,請參閱範例

在本練習中,您將建立適用於 Python 的 Managed Service for Apache Flink 應用程式,將資料串流傳輸到 Amazon Simple Storage Service 接收器。

注意

若要設定此練習的必要先決條件,請先完成 開始使用 (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)
  • 應用程式使用 Kinesis Flink 連接器,從 flink-sql-connector-kinesis- 1.15.2.jar 檔案。

壓縮並上傳阿帕奇 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 儲存貯體中。

建立並執行 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

    選擇儲存

  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. 輸入以下應用程式屬性和值:(使用 Amazon S3 儲存貯體的實際名稱取代 bucket-name。)

    群組 ID 金鑰
    sink.config.0 output.bucket.name bucket-name
  10. 監控下,確保監控指標層級設為應用程式

  11. 若要CloudWatch 記錄,請選取 [啟用] 核取方塊。

  12. 選擇更新

注意

當您選擇啟用 CloudWatch 記錄時,Apache Flink 的受管理服務會為您建立記錄群組和記錄資料流。這些資源的名稱如下所示:

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

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

此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

編輯身分與存取權管

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

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

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

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

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

    { "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 主控台上檢查 Apache Flink 的受管理服務量度,以確認應用程式是否正常運作。

清理 AWS 資源

本節包括清理在「滑動視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

刪除您的 Amazon S3 對象和存儲桶
  1. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

斯卡拉例子

下列範例示範如何搭配使用 Scala 與 Apache Flink 來建立應用程式。

示例:在 Scala 中創建一個翻滾窗口

注意

如需目前範例,請參閱範例

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 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. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

  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

    選擇儲存

  6. 屬性下,再次選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄,請選擇啟用核取方塊。

  10. 選擇更新

注意

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

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

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

編輯身分與存取權管

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

編輯 IAM 政策以新增 S3 儲存貯體許可
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

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

    { "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 以使用建立和執行 Apache Flink 應用程式的受管理服務。使用指 AWS CLI 令為 Ap ache Flink 應用程式建立受管理的服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (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. 前往 https://console.aws.amazon.com/iam/ 開啟 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 尾碼 (username)。使用您的帳戶 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 主控台上查看適用於 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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

示例:在 Scala 中創建一個滑動窗口

注意

如需目前範例,請參閱範例

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 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. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

  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

    選擇儲存

  6. 屬性下,再次選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄,請選擇啟用核取方塊。

  10. 選擇更新

注意

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

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

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

編輯身分與存取權管

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

編輯 IAM 政策以新增 S3 儲存貯體許可
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

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

    { "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 以使用建立和執行 Apache Flink 應用程式的受管理服務。使用指 AWS CLI 令為 Ap ache Flink 應用程式建立受管理的服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (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. 前往 https://console.aws.amazon.com/iam/ 開啟 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 尾碼 (username)。使用您的帳戶 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 主控台上查看適用於 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 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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

示例:將流數據發送到斯卡拉中的 Amazon S3

注意

如需目前範例,請參閱範例

注意

從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。

如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 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. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇建立儲存貯體

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

  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

    選擇儲存

  6. 屬性下,選擇新增群組

  7. 輸入下列資料:

    群組 ID 金鑰
    ProducerConfigProperties s3.sink.path s3a://ka-app-code-<user-name>/data
  8. 監控下,確保監控指標層級設為應用程式

  9. 對於CloudWatch 記錄,請選擇啟用核取方塊。

  10. 選擇更新

注意

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

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

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

編輯身分與存取權管

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

編輯 IAM 政策以新增 S3 儲存貯體許可
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

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

    { "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 以使用建立和執行 Apache Flink 應用程式的受管理服務。使用指 AWS CLI 令為 Ap ache Flink 應用程式建立受管理的服務,並與之互動。

建立許可政策
注意

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

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

使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (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. 前往 https://console.aws.amazon.com/iam/ 開啟 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 尾碼 (username)。使用您的帳戶 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 主控台上查看適用於 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 資源

本節包括清除在「暫停視窗」教學課程中建立之 AWS 資源的程序。

刪除適用於 Apache Flink 應用程式的受管理服務
  1. 前往 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。

  2. 在適用於 Apache Flink 的受管理服務面板中,選擇MyApplication

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

刪除您的 Kinesis 資料串流
  1. 在以下網址開啟 Kinesis 主控台:https://console.aws.amazon.com/kinesis

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

  3. ExampleInputStream頁面中,選擇「刪除 Kinesis 串流」,然後確認刪除。

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

刪除您的 Amazon S3 對象和存儲桶
  1. 在以下網址開啟 Amazon S3 主控台:https://console.aws.amazon.com/s3/

  2. 選擇 ka-app-code- 桶。 <username>

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

刪除您的 IAM 資源
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 選擇 kinesis-analytics-service--MyApplication us-we st-2 原則。

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

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

  7. 選擇運動分析-MyApplication us-west-2 角色

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

刪除您的 CloudWatch 資源
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

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

  3. 選擇 /aws/運動分析/日誌群MyApplication組。

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