Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Managed Service for Apache Flink 的早期版本資訊
注意
Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們現在計劃結束對 Amazon Managed Service for Apache Flink 中這些版本的支援。從 2024 年 11 月 5 日起,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。
對於除中國區域和 以外的所有區域 AWS GovCloud (US) Regions,從 2025 年 2 月 5 日起,您將無法再在 Amazon Managed Service for Apache Flink 中使用這些版本的 Apache Flink 建立、啟動或執行應用程式。
對於中國區域和 AWS GovCloud (US) Regions,從 2025 年 3 月 19 日起,您將無法再在 Amazon Managed Service for Apache Flink 中使用這些版本的 Apache Flink 建立、啟動或執行應用程式。
您可以使用 Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱針對 Apache Flink 使用就地版本升級。
Managed Service for Apache Flink 支援 Apache Flink 1.15.2 和 1.13.2 版,但 Apache Flink 社群不再支援。
本主題包含下列章節:
將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用
1.11 版之前的 Apache Flink 中不包含 Apache Flink Kinesis 串流連接器。若要讓應用程式能夠將 Apache Flink Kinesis 連接器與先前版本的 Apache Flink 搭配使用,必須下載、編譯並安裝該應用程式所使用的 Apache Flink 版本。此連接器用於取用作為應用程式來源的 Kinesis 串流中的資料,或將資料寫入作為應用程式輸出的 Kinesis 串流。
注意
請確定您正在使用 0KPL.14.0 版
若要下載並安裝 Apache Flink 1.8.2 版來源程式碼,請執行下列動作:
請確定您已安裝 Apache Maven
,且 JAVA_HOME
環境變數指向 JDK而非 JRE。您可以使用以下命令來測試 Apache Maven 安裝:mvn -version
下載 Apache Flink 版本 1.8.2 來源程式碼:
wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
解壓縮 Apache Flink 來源程式碼:
tar -xvf flink-1.8.2-src.tgz
切換到 Apache Flink 來源程式碼目錄:
cd flink-1.8.2
編譯並安裝 Apache Flink:
mvn clean install -Pinclude-kinesis -DskipTests
注意
如果您在 Microsoft 視窗中編譯 Flink,則需要添加
-Drat.skip=true
參數。
使用 Apache Flink 1.8.2 建置應用程式
本節包含您用來建置與 Apache Flink 1.8.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。
將下列元件版本用於 Managed Service for Apache Flink 應用程式:
元件 | 版本 |
---|---|
Java | 1.8 (建議使用) |
Apache Flink | 1.8.2 |
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) | 1.0.1 |
Managed Service for Apache Flink Flink Connectors (aws-kinesisanalytics-flink) | 1.0.1 |
Apache Maven | 3.1 |
若要編譯使用 Apache Flink 1.8.2 版的應用程式,請使用下列參數執行 Maven:
mvn package -Dflink.version=1.8.2
如需使用 Apache Flink 1.8.2 版的 Managed Service for Apache Flink 應用程式的 pom.xml
檔案範例,請參閱 Managed Service for Apache Flink 1.8.2 入門
如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊,請參閱建立應用程式。
使用 Apache Flink 1.6.2 建置應用程式
本節包含您用來建置與 Apache Flink 1.6.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。
將下列元件版本用於 Managed Service for Apache Flink 應用程式:
元件 | 版本 |
---|---|
Java | 1.8 (建議使用) |
AWS Java SDK | 1.11.379 |
Apache Flink | 1.6.2 |
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) | 1.0.1 |
Managed Service for Apache Flink Flink Connectors (aws-kinesisanalytics-flink) | 1.0.1 |
Apache Maven | 3.1 |
Apache Beam | 不支援用於 Apache Flink 1.6.2。 |
注意
使用 Managed Service for Apache Flink 執行期 1.0.1 版時,可以在 pom.xml
檔案中指定 Apache Flink 的版本,而不是在編譯應用程式程式碼時使用 -Dflink.version
參數。
如需使用 Apache Flink 1.6.2 版的 Managed Service for Apache Flink 應用程式的 pom.xml
檔案範例,請參閱 Managed Service for Apache Flink 1.6.2 入門
如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊,請參閱建立應用程式。
升級應用程式
若要升級 Amazon Managed Service for Apache Flink 應用程式的 Apache Flink 版本,請使用 AWS CLI AWS SDK、 AWS CloudFormation或 使用就地 Apache Flink 版本升級功能 AWS Management Console。如需詳細資訊,請參閱針對 Apache Flink 使用就地版本升級。
您可以搭配 Amazon Managed Service for Apache Flink 處於 READY
或 RUNNING
狀態的任何現有應用程式使用此功能。
Apache Flink 1.6.2 和 1.8.2 中的可用連接器
Apache Flink 架構包含用於存取各種來源之資料的連接器。
如需 Apache Flink 1.6.2 架構中可用連接器的相關資訊,請參閱 Apache Flink 文件 (1.6.2)
中的連接器 (1.6.2) 。 如需 Apache Flink 1.8.2 架構中可用連接器的相關資訊,請參閱 Apache Flink 文件 (1.8.2)
中的連接器 (1.8.2) 。
入門:Flink 1.13.2
本節將介紹 Managed Service for Apache Flink 和 的基本概念 DataStream API。它描述了建立和測試應用程式的可用選項。此外,它還提供了相關指示,以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。
主題
Managed Service for Apache Flink 應用程式的元件
為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。
Managed Service for Apache Flink 應用程式包含以下元件:
建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。
完成練習的先決條件
若要完成本指南中的步驟,您必須執行下列各項:
-
Java 開發套件 (JDK) 第 11 版
。將 JAVA_HOME
環境變數設定為指向您的JDK安裝位置。 -
我們建議您使用開發環境 (如 Eclipse Java Neon
或 IntelliJ Idea ) 來開發和編譯您的應用程式。 -
Git 用戶端
。如果您尚未安裝 Git 用戶端,請先安裝。 -
Apache Maven 編譯器外掛程式
。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝,輸入以下資訊: $ mvn -version
開始執行,請移至 設定 AWS 帳戶並建立管理員使用者。
步驟 1:設定 AWS 帳戶並建立管理員使用者
註冊 AWS 帳戶
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
為您的根使用者開啟多重要素驗證 (MFA)。
如需指示,請參閱 IAM 使用者指南 中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置。
建立具有管理存取權的使用者
-
啟用IAM身分中心。
如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用預設值設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。
如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站。
指派存取權給其他使用者
授與程式設計存取權
如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。
若要授與使用者程式設計存取權,請選擇下列其中一個選項。
哪個使用者需要程式設計存取權? | 到 | By |
---|---|---|
人力身分 (在 IAM Identity Center 中管理的使用者) |
使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
IAM | 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 | 請遵循 IAM 使用者指南 中的將臨時憑證與 AWS 資源搭配使用的指示。 |
IAM | (不建議使用) 使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
下一步驟
設定 AWS Command Line Interface (AWS CLI)
下一步驟
步驟 2:設定 AWS Command Line Interface (AWS CLI)
步驟 2:設定 AWS Command Line Interface (AWS CLI)
在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。
注意
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser
) 來執行操作。
注意
如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:
aws --version
本教學課程中的練習需要下列 AWS CLI 版本或更新版本:
aws-cli/1.16.63
若要設定 AWS CLI
-
下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:
-
在 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 一般參考。
注意
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。
-
在命令提示字元中輸入下列 help 命令,以驗證設定:
aws help
設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。
下一步驟
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。
本節包含下列步驟:
建立兩個 Amazon Kinesis 資料串流
在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStream
和 ExampleOutputStream
)。您的應用程式會將這些串流用於應用程式來源和目的地串流。
您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。
建立資料串流 (AWS CLI)
-
若要建立第一個串流 (
ExampleInputStream
),請使用下列 Amazon Kinesiscreate-stream
AWS CLI 命令。$ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
-
若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為
ExampleOutputStream
。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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'))
-
在教學課程後半段,您會執行
stock.py
指令碼來傳送資料至應用程式。$ python stock.py
下載並檢查 Apache Flink 串流 Java 程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
-
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
-
導覽至
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
物件來存取外部資源。 -
應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用
createSourceFromApplicationProperties
和createSinkFromApplicationProperties
方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
編譯應用程式程式碼
在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件。
編譯應用程式的程式碼
-
若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:
-
使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的
pom.xml
檔案:mvn package -Dflink.version=1.13.2
-
設定開發環境。如需詳細資訊,請參閱您的開發環境文件。
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。
-
-
如果編譯時發生錯誤,請確認您的
JAVA_HOME
環境變數是否正確設定。
如果應用程式成功編譯,則會建立下列檔案:
target/aws-kinesis-analytics-java-apps-1.0.jar
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。
上傳應用程式的程式碼
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇建立儲存貯體。
-
在儲存貯體名稱欄位中,輸入
ka-app-code-
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。<username>
-
在設定選項步驟中,保留原有設定並選擇 Next (下一步)。
-
在設定許可步驟中,保留原有設定並選擇 Next (下一步)。
-
選擇建立儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。選擇 Next (下一步)。 -
您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。
注意
當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My java test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本下拉式清單保留為 Apache Flink 1.13 版。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
輸入下列資料:
群組 ID 金鑰 值 ProducerConfigProperties
flink.inputstream.initpos
LATEST
ProducerConfigProperties
aws.region
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
在頁面上MyApplication,選擇停止 。確認動作。
更新應用程式
使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。
在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新。
建立和執行應用程式 (AWS CLI)
在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2
AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read
動作的許可,而另一條則是授與目的地串流上 write
動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代
。將 Amazon Resource Names (ARNs) (username
) 中的帳戶 ID 取代為您的帳戶 ID。012345678901
{ "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 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色 、建立角色。
-
在選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)。
選擇下一步:許可。
-
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
-
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策。 -
將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策。
-
在摘要頁面,選擇許可標籤。
-
選擇連接政策。
-
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。 -
選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策 。
-
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立 Managed Service for Apache Flink 應用程式
-
將下列JSON程式碼儲存至名為 的檔案
create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (
) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (username
)。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" } } ] } } } -
使用前述請求執行
CreateApplication
動作以建立應用程式:aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您會透過 StartApplication
動作來啟動應用程式。
啟動應用程式
-
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
-
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節,您會使用該 StopApplication
動作來停止應用程式。
停止應用程式
-
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "test" }
-
以停止應用程式的上述請求,執行
StopApplication
動作:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄。
更新環境屬性
在本節中,您可以使用 UpdateApplication
動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
-
將下列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" } } ] } } }
-
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>
) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。
{ "ApplicationName": "test", "CurrentApplicationVersionId":
1
, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username
", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU
" } } } } }
下一步驟
步驟 4:清除 AWS 資源
本節包含在入門教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 -
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
-
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
-
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
-
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇 ka-app-code-
<username>
儲存貯體。 -
選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽列中,選擇政策。
-
在篩選器控制項中,輸入 kinesis。
-
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
-
選擇政策動作,然後選擇刪除。
-
在導覽列中,選擇角色。
-
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
-
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽列中,選擇日誌。
-
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
-
選擇刪除日誌群組,然後確認刪除。
下一步驟
步驟 5:後續步驟
現在您已建立並執行 Managed Service for Apache Flink 應用程式,請參閱下列資源,取得更進階的 Managed Service for Apache Flink 解決方案。
適用於 Amazon Kinesis 的 AWS 串流資料解決方案
:適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務,以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供串流 end-to-endETL範例,示範對模擬的紐約計程車資料執行分析操作的真實世界應用程式。解決方案會設定所有必要 AWS 的資源,例如IAM角色和政策、 CloudWatch 儀表板和 CloudWatch 警示。 AWS 適用於 Amazon 的串流資料解決方案MSK
:適用於 Amazon 的 AWS 串流資料解決方案MSK提供 AWS CloudFormation 範本,其中資料流經生產者、串流儲存體、消費者和目的地。 使用 Apache Flink 和 Apache Kafka 的點擊流實驗室
:點擊流使用案例的端對端實驗室,使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存,使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。 Amazon Managed Service for Apache Flink 研討會
:在本研討會中,您可以建置 end-to-end串流架構,以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。 了解 Flink:實際操作訓練:
正式介紹 Apache Flink 訓練,可讓您開始撰寫可擴展串流ETL、分析和事件驅動應用程式。 注意
請注意,Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。
入門:Flink 1.11.1 - 取代
注意
Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級。
本主題包含使用 Apache Flink 1.11.1 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。
本節向您介紹 Managed Service for Apache Flink 和 的基本概念 DataStream API。它描述了建立和測試應用程式的可用選項。此外,它還提供了相關指示,以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。
主題
Managed Service for Apache Flink 應用程式的元件
為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。
Managed Service for Apache Flink 應用程式包含以下元件:
建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。
完成練習的先決條件
若要完成本指南中的步驟,您必須執行下列各項:
-
Java 開發套件 (JDK) 第 11 版
。將 JAVA_HOME
環境變數設定為指向您的JDK安裝位置。 -
我們建議您使用開發環境 (如 Eclipse Java Neon
或 IntelliJ Idea ) 來開發和編譯您的應用程式。 -
Git 用戶端
。如果您尚未安裝 Git 用戶端,請先安裝。 -
Apache Maven 編譯器外掛程式
。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝,輸入以下資訊: $ mvn -version
開始執行,請移至 設定 AWS 帳戶並建立管理員使用者。
步驟 1:設定 AWS 帳戶並建立管理員使用者
註冊 AWS 帳戶
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
為您的根使用者開啟多重要素驗證 (MFA)。
如需指示,請參閱 IAM 使用者指南 中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置。
建立具有管理存取權的使用者
-
啟用IAM身分中心。
如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。
如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站。
指派存取權給其他使用者
授與程式設計存取權
如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。
若要授與使用者程式設計存取權,請選擇下列其中一個選項。
哪個使用者需要程式設計存取權? | 到 | By |
---|---|---|
人力身分 (在 IAM Identity Center 中管理的使用者) |
使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
IAM | 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 | 遵循 IAM 使用者指南 中的使用臨時憑證與 AWS 資源的指示。 |
IAM | (不建議使用) 使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
下一步驟
設定 AWS Command Line Interface (AWS CLI)
步驟 2:設定 AWS Command Line Interface (AWS CLI)
在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。
注意
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser
) 來執行操作。
注意
如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:
aws --version
本教學課程中的練習需要下列 AWS CLI 版本或更新版本:
aws-cli/1.16.63
若要設定 AWS CLI
-
下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:
-
在 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 一般參考。
注意
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。
-
在命令提示字元中輸入下列 help 命令,以驗證設定:
aws help
設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。
下一步驟
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。
本節包含下列步驟:
建立兩個 Amazon Kinesis 資料串流
在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStream
和 ExampleOutputStream
)。您的應用程式會將這些串流用於應用程式來源和目的地串流。
您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。
建立資料串流 (AWS CLI)
-
若要建立第一個串流 (
ExampleInputStream
),請使用下列 Amazon Kinesiscreate-stream
AWS CLI 命令。$ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
-
若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為
ExampleOutputStream
。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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"))
-
在教學課程後半段,您會執行
stock.py
指令碼來傳送資料至應用程式。$ python stock.py
下載並檢查 Apache Flink 串流 Java 程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
-
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
-
導覽至
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
物件來存取外部資源。 -
應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用
createSourceFromApplicationProperties
和createSinkFromApplicationProperties
方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
編譯應用程式程式碼
在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 滿足完成練習的先決條件。
編譯應用程式的程式碼
-
若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:
-
使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的
pom.xml
檔案:mvn package -Dflink.version=1.11.3
-
設定開發環境。如需詳細資訊,請參閱您的開發環境文件。
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。確保您專案的 Java 版本是 11。
您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。
-
-
如果編譯時發生錯誤,請確認您的
JAVA_HOME
環境變數是否正確設定。
如果應用程式成功編譯,則會建立下列檔案:
target/aws-kinesis-analytics-java-apps-1.0.jar
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。
上傳應用程式的程式碼
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇建立儲存貯體。
-
在儲存貯體名稱欄位中,輸入
ka-app-code-
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。<username>
-
在設定選項步驟中,保留原有設定並選擇 Next (下一步)。
-
在設定許可步驟中,保留原有設定並選擇 Next (下一步)。
-
選擇建立儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。選擇 Next (下一步)。 -
您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。
注意
當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My java test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本下拉式清單保留為 Apache Flink 1.11 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,為群組 ID輸入
ProducerConfigProperties
。 -
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 ProducerConfigProperties
flink.inputstream.initpos
LATEST
ProducerConfigProperties
aws.region
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
在頁面上MyApplication,選擇停止 。確認動作。
更新應用程式
使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。
在MyApplication頁面上,選擇設定 。更新應用程式設定,然後選擇更新。
建立和執行應用程式 (AWS CLI)
在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 會使用 kinesisanalyticsv2
AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read
動作的許可,而另一條則是授與目的地串流上 write
動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代
。將 Amazon Resource Names (ARNs) (username
) 中的帳戶 ID 取代為您的帳戶 ID。012345678901
{ "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 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色 、建立角色。
-
在選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)。
選擇下一步:許可。
-
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
-
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策。 -
將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策。
-
在摘要頁面,選擇許可標籤。
-
選擇連接政策。
-
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。 -
選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策 。
-
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立 Managed Service for Apache Flink 應用程式
-
將下列JSON程式碼儲存至名為 的檔案
create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (
) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (username
)。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" } } ] } } } -
使用前述請求執行
CreateApplication
動作以建立應用程式:aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您會透過 StartApplication
動作來啟動應用程式。
啟動應用程式
-
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
-
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節,您會使用該 StopApplication
動作來停止應用程式。
停止應用程式
-
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "test" }
-
以停止應用程式的上述請求,執行
StopApplication
動作:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄。
更新環境屬性
在本節中,您可以使用 UpdateApplication
動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
-
將下列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" } } ] } } }
-
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>
) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。
{ "ApplicationName": "test", "CurrentApplicationVersionId":
1
, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username
", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU
" } } } } }
下一步驟
步驟 4:清除 AWS 資源
本節包含在入門教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 -
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
-
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
-
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
-
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇 ka-app-code-
<username>
儲存貯體。 -
選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除 Rour IAM 資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽列中,選擇政策。
-
在篩選器控制項中,輸入 kinesis。
-
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
-
選擇政策動作,然後選擇刪除。
-
在導覽列中,選擇角色。
-
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
-
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽列中,選擇日誌。
-
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
-
選擇刪除日誌群組,然後確認刪除。
下一步驟
步驟 5:後續步驟
現在您已建立並執行 Managed Service for Apache Flink 應用程式,請參閱下列資源,取得更進階的 Managed Service for Apache Flink 解決方案。
適用於 Amazon Kinesis 的 AWS 串流資料解決方案
:適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務,以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供串流 end-to-endETL範例,示範對模擬的紐約計程車資料執行分析操作的真實世界應用程式。解決方案會設定所有必要 AWS 的資源,例如IAM角色和政策、 CloudWatch 儀表板和 CloudWatch 警示。 AWS 適用於 Amazon 的串流資料解決方案MSK
:適用於 Amazon 的 AWS 串流資料解決方案MSK提供 AWS CloudFormation 範本,其中資料流經生產者、串流儲存體、消費者和目的地。 使用 Apache Flink 和 Apache Kafka 的點擊流實驗室
:點擊流使用案例的端對端實驗室,使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存,使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。 Amazon Managed Service for Apache Flink 研討會
:在本研討會中,您可以建置 end-to-end串流架構,以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料,以最佳化其車隊運作。 了解 Flink:實際操作訓練
:正式介紹 Apache Flink 訓練,可讓您開始撰寫可擴展的串流ETL、分析和事件驅動應用程式。 注意
請注意,Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。
Apache Flink 程式碼範例
:各種 Apache Flink 應用程式範例的 GitHub 儲存庫。
入門:Flink 1.8.2 - 取代
注意
Apache Flink 社群超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級。
本主題包含使用 Apache Flink 1.8.2 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。
主題
Managed Service for Apache Flink 應用程式的元件
為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。
Managed Service for Apache Flink 應用程式包含以下元件:
建立、編譯和封裝應用程式的程式碼後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。
完成練習的先決條件
若要完成本指南中的步驟,您必須執行下列各項:
-
Java 開發套件 (JDK) 第 8 版
。將 JAVA_HOME
環境變數設定為指向您的JDK安裝位置。 -
若要在本教學課程中使用 Apache Flink Kinesis 連接器,您必須下載並安裝 Apache Flink。如需詳細資訊,請參閱 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用。
-
我們建議您使用開發環境 (如 Eclipse Java Neon
或 IntelliJ Idea ) 來開發和編譯您的應用程式。 -
Git 用戶端
。如果您尚未安裝 Git 用戶端,請先安裝。 -
Apache Maven 編譯器外掛程式
。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝,輸入以下資訊: $ mvn -version
開始執行,請移至 步驟 1:設定 AWS 帳戶並建立管理員使用者。
步驟 1:設定 AWS 帳戶並建立管理員使用者
註冊 AWS 帳戶
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
為您的根使用者開啟多重要素驗證 (MFA)。
如需指示,請參閱 IAM 使用者指南 中的為 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置。
建立具有管理存取權的使用者
-
啟用IAM身分中心。
如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。
如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站。
指派存取權給其他使用者
授與程式設計存取權
如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。
若要授與使用者程式設計存取權,請選擇下列其中一個選項。
哪個使用者需要程式設計存取權? | 到 | By |
---|---|---|
人力身分 (在 IAM Identity Center 中管理的使用者) |
使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
IAM | 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 | 請遵循 IAM 使用者指南 中的將臨時憑證與 AWS 資源搭配使用中的指示。 |
IAM | (不建議使用) 使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
步驟 2:設定 AWS Command Line Interface (AWS CLI)
在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。
注意
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser
) 來執行操作。
注意
如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:
aws --version
本教學課程中的練習需要下列 AWS CLI 版本或更新版本:
aws-cli/1.16.63
若要設定 AWS CLI
-
下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:
-
在 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 區域,請將本教學課程程式碼和命令中的 區域變更為您要使用的 區域。
-
在命令提示字元中輸入下列 help 命令,以驗證設定:
aws help
設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。
下一步驟
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。
本節包含下列步驟:
建立兩個 Amazon Kinesis 資料串流
在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStream
和 ExampleOutputStream
)。您的應用程式會將這些串流用於應用程式來源和目的地串流。
您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。
建立資料串流 (AWS CLI)
-
若要建立第一個串流 (
ExampleInputStream
),請使用下列 Amazon Kinesiscreate-stream
AWS CLI 命令。$ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
-
若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為
ExampleOutputStream
。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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"))
-
在教學課程後半段,您會執行
stock.py
指令碼來傳送資料至應用程式。$ python stock.py
下載並檢查 Apache Flink 串流 Java 程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
-
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
-
導覽至
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
物件來存取外部資源。 -
應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用
createSourceFromApplicationProperties
和createSinkFromApplicationProperties
方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
編譯應用程式程式碼
在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件。
注意
若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink,你需要下載、建置和安裝 Apache Maven。如需詳細資訊,請參閱 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用。
編譯應用程式的程式碼
-
若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:
-
使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的
pom.xml
檔案:mvn package -Dflink.version=1.8.2
-
設定開發環境。如需詳細資訊,請參閱您的開發環境文件。
注意
提供的來源程式碼依賴於 Java 1.8 中的程式庫。確保您專案的 Java 版本是 1.8。
您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。
-
-
如果編譯時發生錯誤,請確認您的
JAVA_HOME
環境變數是否正確設定。
如果應用程式成功編譯,則會建立下列檔案:
target/aws-kinesis-analytics-java-apps-1.0.jar
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。
上傳應用程式的程式碼
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇建立儲存貯體。
-
在儲存貯體名稱欄位中,輸入
ka-app-code-
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。<username>
-
在設定選項步驟中,保留原有設定並選擇 Next (下一步)。
-
在設定許可步驟中,保留原有設定並選擇 Next (下一步)。
-
選擇建立儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。選擇 Next (下一步)。 -
您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。
注意
當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My java test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本下拉式清單保留為 Apache Flink 1.8 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 ProducerConfigProperties
flink.inputstream.initpos
LATEST
ProducerConfigProperties
aws.region
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
執行應用程式
-
在頁面上MyApplication,選擇執行 。確認動作。
-
應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)。
停止應用程式
在頁面上MyApplication,選擇停止 。確認動作。
更新應用程式
使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。
在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新。
建立和執行應用程式 (AWS CLI)
在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2
AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read
動作的許可,而另一條則是授與目的地串流上 write
動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代
。將 Amazon Resource Names (ARNs) (username
) 中的帳戶 ID 取代為您的帳戶 ID。012345678901
{ "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 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色 、建立角色。
-
在選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)。
選擇下一步:許可。
-
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
-
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策。 -
將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策。
-
在摘要頁面,選擇許可標籤。
-
選擇連接政策。
-
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。 -
選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策 。
-
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立 Managed Service for Apache Flink 應用程式
-
將下列JSON程式碼儲存至名為 的檔案
create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (
) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (username
)。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" } } ] } } } -
使用前述請求執行
CreateApplication
動作以建立應用程式:aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您會透過 StartApplication
動作來啟動應用程式。
啟動應用程式
-
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
-
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節,您會使用該 StopApplication
動作來停止應用程式。
停止應用程式
-
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "test" }
-
以停止應用程式的上述請求,執行
StopApplication
動作:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄。
更新環境屬性
在本節中,您可以使用 UpdateApplication
動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
-
將下列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" } } ] } } }
-
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>
) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。
{ "ApplicationName": "test", "CurrentApplicationVersionId":
1
, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username
", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU
" } } } } }
下一步驟
步驟 4:清除 AWS 資源
本節包含在入門教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 -
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
-
選擇設定。
-
在快照區段中,選擇停用,然後選擇更新。
-
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
-
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
-
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇 ka-app-code-
<username>
儲存貯體。 -
選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽列中,選擇政策。
-
在篩選器控制項中,輸入 kinesis。
-
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
-
選擇政策動作,然後選擇刪除。
-
在導覽列中,選擇角色。
-
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
-
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽列中,選擇日誌。
-
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
-
選擇刪除日誌群組,然後確認刪除。
入門:Flink 1.6.2 - 取代
注意
Apache Flink 社群已超過三年不支援 Apache Flink 1.6、1.8 和 1.11 版。我們計劃於 2024 年 11 月 5 日在 Amazon Managed Service for Apache Flink 中取代這些版本。從此日期開始,您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能,以狀態升級應用程式。如需詳細資訊,請參閱 針對 Apache Flink 使用就地版本升級。
本主題包含使用 Apache Flink 1.6.2 的教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程版本。
主題
Managed Service for Apache Flink 應用程式的元件
為了處理資料,您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入,使用 Apache Flink 執行期生成輸出。
Managed Service for Apache Flink 應用程式包含以下元件:
建立、編譯和封裝應用程式後,將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置,Kinesis 資料串流作為串流資料來源,以及通常是接收應用程式處理後的資料的串流或檔案位置。
完成練習的先決條件
若要完成本指南中的步驟,您必須執行下列各項:
-
Java 開發套件
(JDK) 第 8 版。將 JAVA_HOME
環境變數設定為指向您的JDK安裝位置。 -
我們建議您使用開發環境 (如 Eclipse Java Neon
或 IntelliJ Idea ) 來開發和編譯您的應用程式。 -
Git 用戶端。
如果您尚未安裝 Git 用戶端,請先安裝。 -
Apache Maven 編譯器外掛程式
。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝,輸入以下資訊: $ mvn -version
開始執行,請移至 步驟 1:設定 AWS 帳戶並建立管理員使用者。
步驟 1:設定 AWS 帳戶並建立管理員使用者
註冊 AWS 帳戶
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
為您的根使用者開啟多重要素驗證 (MFA)。
如需指示,請參閱 IAM 使用者指南 中的為 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置。
建立具有管理存取權的使用者
-
啟用IAM身分中心。
如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。
如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站。
指派存取權給其他使用者
授與程式設計存取權
如果使用者想要與 AWS 外部互動,則需要程式設計存取權 AWS Management Console。授予程式設計存取權的方式取決於存取 的使用者類型 AWS。
若要授與使用者程式設計存取權,請選擇下列其中一個選項。
哪個使用者需要程式設計存取權? | 到 | By |
---|---|---|
人力身分 (在 IAM Identity Center 中管理的使用者) |
使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
IAM | 使用暫時憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 | 遵循 IAM 使用者指南 中的使用臨時憑證與 AWS 資源的指示。 |
IAM | (不建議使用) 使用長期憑證簽署對 AWS CLI AWS SDKs、 或 的程式設計請求 AWS APIs。 |
請依照您要使用的介面所提供的指示操作。
|
步驟 2:設定 AWS Command Line Interface (AWS CLI)
在此步驟中,您可以下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。
注意
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (adminuser
) 來執行操作。
注意
如果您已 AWS CLI 安裝 ,您可能需要升級 以取得最新功能。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。若要檢查 的版本 AWS CLI,請執行下列命令:
aws --version
本教學課程中的練習需要下列 AWS CLI 版本或更新版本:
aws-cli/1.16.63
若要設定 AWS CLI
-
下載和設定 AWS CLI。如需相關指示,請參閱《AWS Command Line Interface 使用者指南》中的下列主題:
-
在 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 一般參考。
注意
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域,請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。
-
在命令提示字元中輸入下列 help 命令,以驗證設定:
aws help
設定 AWS 帳戶和 之後 AWS CLI,您可以嘗試下一個練習,在其中設定範例應用程式並測試 end-to-end設定。
下一步驟
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
步驟 3:建立和執行 Managed Service for Apache Flink 應用程式
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將資料串流作為來源和目的地。
本節包含下列步驟:
建立兩個 Amazon Kinesis 資料串流
在為本練習建立 Managed Service for Apache Flink 應用程式之前,請先建立兩個 Kinesis 資料串流 (ExampleInputStream
和 ExampleOutputStream
)。您的應用程式會將這些串流用於應用程式來源和目的地串流。
您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。
建立資料串流 (AWS CLI)
-
若要建立第一個串流 (
ExampleInputStream
),請使用下列 Amazon Kinesiscreate-stream
AWS CLI 命令。$ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
-
若要建立應用程式用來寫入輸出的第二個串流,請執行相同的命令,將串流名稱變更為
ExampleOutputStream
。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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"))
-
在教學課程後半段,您會執行
stock.py
指令碼來傳送資料至應用程式。$ python stock.py
下載並檢查 Apache Flink 串流 Java 程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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
物件來存取外部資源。應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性,請使用
createSourceFromApplicationProperties
和createSinkFromApplicationProperties
方法來建立連接器。這些方法會讀取應用程式的屬性,來設定連接器。如需執行期屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
編譯應用程式程式碼
在本節中,您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊,請參閱 完成練習的先決條件。
注意
若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink,您需要下載連接器的來源程式碼,並如 Apache Flink 文件
編譯應用程式的程式碼
-
若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用下列兩種方式的其中之一,編譯和封裝您的程式碼:
使用命令列 Maven 工具。在包含 JAR 檔案的目錄中執行下列命令來建立您的
pom.xml
檔案:mvn package
注意
Managed Service for Apache Flink Runtime 1.0.1 版本不需要 -Dflink.version 參數;只有版本 1.1.0 及更新版本才需要此參數。如需詳細資訊,請參閱指定應用程式的 Apache Flink 版本。
設定開發環境。如需詳細資訊,請參閱您的開發環境文件。
您可以上傳套件作為JAR檔案,也可以壓縮套件並將其作為ZIP檔案上傳。如果您使用 建立應用程式 AWS CLI,您可以指定程式碼內容類型 (JAR 或 ZIP)。
-
如果編譯時發生錯誤,請確認您的
JAVA_HOME
環境變數是否正確設定。
如果應用程式成功編譯,則會建立下列檔案:
target/aws-kinesis-analytics-java-apps-1.0.jar
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。
上傳應用程式的程式碼
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇建立儲存貯體。
-
在儲存貯體名稱欄位中,輸入
ka-app-code-
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。<username>
-
在設定選項步驟中,保留原有設定並選擇 Next (下一步)。
-
在設定許可步驟中,保留原有設定並選擇 Next (下一步)。
-
選擇建立儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。選擇 Next (下一步)。 -
在設定許可步驟中,保留原有設定。選擇 Next (下一步)。
-
在設定屬性步驟中,保留原有設定。選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。
注意
當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 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。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
java-getting-started-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 ProducerConfigProperties
flink.inputstream.initpos
LATEST
ProducerConfigProperties
aws.region
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
執行應用程式
-
在頁面上MyApplication,選擇執行 。確認動作。
-
應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)。
停止應用程式
在頁面上MyApplication,選擇停止 。確認動作。
更新應用程式
使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。如果您需要更新應用程式碼,也可以JAR從 Amazon S3 儲存貯體重新載入應用程式。
在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新。
建立和執行應用程式 (AWS CLI)
在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 kinesisanalyticsv2
AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。
建立許可政策
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read
動作的許可,而另一條則是授與目的地串流上 write
動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代
。將 Amazon Resource Names (ARNs) (username
) 中的帳戶 ID 取代為您的帳戶 ID。012345678901
{ "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 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色 、建立角色。
-
在選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)。
選擇下一步:許可。
-
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
-
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策。 -
將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策。
-
在摘要頁面,選擇許可標籤。
-
選擇連接政策。
-
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。 -
選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策 。
-
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立 Managed Service for Apache Flink 應用程式
-
將下列JSON程式碼儲存至名為 的檔案
create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (
) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (username
)。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" } } ] } } } -
使用前述請求執行
CreateApplication
動作以建立應用程式:aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您會透過 StartApplication
動作來啟動應用程式。
啟動應用程式
-
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
-
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節,您會使用該 StopApplication
動作來停止應用程式。
停止應用程式
-
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "test" }
-
以停止應用程式的上述請求,執行
StopApplication
動作:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄。
更新環境屬性
在本節中,您可以使用 UpdateApplication
動作來變更應用程式的環境屬性,無需重新編譯應用程式的程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
-
將下列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" } } ] } } }
-
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username>
) 加上您在 建立兩個 Amazon Kinesis 資料串流區段中選擇的字尾。
{ "ApplicationName": "test", "CurrentApplicationVersionId":
1
, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username
", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }
步驟 4:清除 AWS 資源
本節包含在入門教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
選擇設定。
在快照區段中,選擇停用,然後選擇更新。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
Managed Service for Apache Flink 的較早版本 (舊版) 範例
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
本節提供在 Managed Service for Apache Flink 中建立及使用應用程式的範例。其中包含範例程式碼和 step-by-step指示,可協助您建立 Managed Service for Apache Flink 應用程式並測試結果。
在探索這些範例之前,建議先檢閱以下內容:
注意
這些範例假設您使用美國西部 (奧勒岡) 區域 (us-west-2
)。如果您使用的是不同的區域,請適當更新應用程式程式碼、命令和IAM角色。
DataStream API 範例
下列範例示範如何使用 Apache Flink 建立應用程式 DataStream API。
主題
範例:緩衝時段
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
在本練習中,您將使用輪轉視窗建立可彙總資料的 Managed Service for Apache Flink 應用程式。彙總在 Flink 中預設為啟用。可使用下列命令將其停用:
sink.producer.aggregation-enabled' = 'false'
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
兩個 Kinesis 資料串流 (
ExampleInputStream
和ExampleOutputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
和ExampleOutputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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());
編譯應用程式程式碼
若要編譯應用程式,請執行下列動作:
如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件。
使用下列命令編譯應用程式:
mvn package -Dflink.version=1.15.3
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar
)。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
注意
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
執行應用程式
-
在頁面上MyApplication,選擇執行 。保持選取不使用快照執行選項,然後確認動作。
-
應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
清除 AWS 資源
本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:滑動視窗
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
兩個 Kinesis 資料串流 (
ExampleInputStream
和ExampleOutputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
和ExampleOutputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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"))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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());
編譯應用程式程式碼
若要編譯應用程式,請執行下列動作:
如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件。
使用下列命令編譯應用程式:
mvn package -Dflink.version=1.15.3
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar
)。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
設定應用程式平行處理
此應用程式範例使用任務的平行執行。下列應用程式的程式碼會設定 min
運算子的平行處理層級:
.setParallelism(3) // Set parallelism for the min operator
應用程式平行處理層級不能大於佈建的平行處理層級 (預設值為 1)。若要增加應用程式的平行處理,請使用下列 AWS CLI 動作:
aws kinesisanalyticsv2 update-application --application-name MyApplication --current-application-version-id <VersionId> --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"
您可以使用 DescribeApplication或 ListApplications動作來擷取目前的應用程式版本 ID。
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
清除 AWS 資源
本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:寫入 Amazon S3 儲存貯體
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,並將 Kinesis 資料串流作為來源,將 Amazon S3 儲存貯體作為接收器。使用接收器,您就可以驗證 Amazon S3 主控台的應用程式輸出。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 之前,先建立下列相依資源:
-
Kinesis 資料串流 (
ExampleInputStream
)。 -
Amazon S3 儲存貯體,用來儲存應用程式的程式碼和輸出 (
ka-app-code-
)<username>
注意
Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
-
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
命名。 -
《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。在 Amazon S3 儲存貯體中建立兩個資料夾 (<username>
code
和data
)。
如果下列 CloudWatch 資源尚未存在,應用程式會建立這些資源:
-
名為
/AWS/KinesisAnalytics-java/MyApplication
的日誌群組。 -
名為
kinesis-analytics-log-stream
的日誌串流。
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
-
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 -
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
-
導覽至
amazon-kinesis-data-analytics-java-examples/S3Sink
目錄。
應用程式的程式碼位於 S3StreamingSinkJob.java
檔案中。請留意下列與應用程式的程式碼相關的資訊:
-
應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源:
return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
-
您需要新增以下 import 陳述式:
import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
-
該應用程式使用 Apache Flink S3 接收器寫入 Amazon S3。
接收器會在輪轉視窗中讀取訊息、將訊息編碼到 S3 儲存貯體物件,並將編碼的物件傳送至 S3 接收器。下列程式碼會對傳送至 Amazon S3 的物件進行編碼:
input.map(value -> { // Parse the JSON JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class); return new Tuple2<>(jsonNode.get("ticker").toString(), 1); }).returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v -> v.f0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.minutes(1))) .sum(1) // Count the appearances by ticker per partition .map(value -> value.f0 + " count: " + value.f1.toString() + "\n") .addSink(createS3SinkFromStaticConfig());
注意
該應用程式使用 Flink StreamingFileSink
物件寫入 Amazon S3。如需 的詳細資訊StreamingFileSink
,請參閱 StreamingFileSink
修改應用程式碼
在本節中,您要修改應用程式的程式碼,以將輸出寫入 Amazon S3 儲存貯體。
使用您的使用者名稱更新下列行,以指定應用程式的輸出位置:
private static final String s3SinkPath = "s3a://ka-app-code-
<username>
/data";
編譯應用程式程式碼
若要編譯應用程式,請執行下列動作:
-
如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件。
-
使用下列命令編譯應用程式:
mvn package -Dflink.version=1.15.3
編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar
)。
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,導覽至程式碼資料夾,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。 -
您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
-
將版本保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。使用您的使用者名稱取代 <username>。{ "Sid": "S3", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:%LOG_STREAM_PLACEHOLDER%" ] }
, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" },
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
code/aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
執行應用程式
-
在頁面上MyApplication,選擇執行 。保持選取不使用快照執行選項,然後確認動作。
-
應用程式執行時,重新整理頁面。主控台會顯示 Application graph (應用程式圖形)。
驗證應用程式輸出
在 Amazon S3 主控台中開啟 S3 儲存貯體中的 data 資料夾。
幾分鐘後,將顯示包含來自應用程式之彙總資料的物件。
注意
彙總在 Flink 中預設為啟用。可使用下列命令將其停用:
sink.producer.aggregation-enabled' = 'false'
選用:自訂來源和接收器
在本節中,您將自訂來源和接收器物件的設定。
注意
在變更以下各節中描述的程式碼區段之後,請執行下列動作以重新載入應用程式的程式碼:
-
重複編譯應用程式程式碼一節中的步驟,以編譯更新的應用程式程式碼。
-
重複上傳 Apache Flink 串流 Java 程式碼一節中的步驟,以上傳更新的應用程式程式碼。
-
在主控台的應用程式頁面,選擇設定,然後選擇更新,以將更新的應用程式程式碼重新載入您的應用程式。
設定資料分割
在本節中,您可以設定串流檔案接收器在 S3 儲存貯體中建立的資料夾名稱。若要執行此作業,請將儲存貯體指派者新增至串流檔案接收器。
若要自訂 S3 儲存貯體中建立的資料夾之名稱,請執行以下動作:
-
將以下 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;
-
將程式碼中的
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
使用目前的系統時間建立儲存貯體名稱。如果您想要建立自訂儲存貯體指派器,以進一步自訂建立的資料夾名稱,您可以建立實作 的類別BucketAssignergetBucketId
方法實作自訂邏輯。
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
物件,請執行下列動作:
-
增加應用程式的
CheckpointInterval
設定。 UpdateApplication 動作的下列輸入會將檢查點間隔設定為 10 分鐘:{ "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "CheckpointConfigurationUpdate": { "ConfigurationTypeUpdate" : "CUSTOM", "CheckpointIntervalUpdate": 600000 } } }, "ApplicationName": "MyApplication", "CurrentApplicationVersionId":
5
}若要使用上述程式碼,請指定目前的應用程式版本。您可以使用 ListApplications動作來擷取應用程式版本。
-
將以下 import 陳述式新增到
S3StreamingSinkJob.java
檔案的開頭:import java.util.concurrent.TimeUnit;
-
將
S3StreamingSinkJob.java
檔案中的createS3SinkFromStaticConfig
方法更新為如下所示:private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8"))
.withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy( DefaultRollingPolicy.create() .withRolloverInterval(TimeUnit.MINUTES.toMillis(8)) .withInactivityInterval(TimeUnit.MINUTES.toMillis(5)) .withMaxPartSize(1024 * 1024 * 1024) .build())
.build(); return sink; }上述程式碼範例會將寫入 Amazon S3 儲存貯體的頻率設定為 8 分鐘。
如需設定 Apache Flink 串流檔案接收器的詳細資訊,請參閱 Apache Flink 文件
清除 AWS 資源
本節包含在 Amazon S3 教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
-
在應用程式頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 -
在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
-
在ExampleInputStream頁面上,選擇刪除 Kinesis Stream,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇 ka-app-code-
<username>
儲存貯體。 -
選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽列中,選擇政策。
-
在篩選器控制項中,輸入 kinesis。
-
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
-
選擇政策動作,然後選擇刪除。
-
在導覽列中,選擇角色。
-
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
-
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽列中,選擇日誌。
-
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
-
選擇刪除日誌群組,然後確認刪除。
教學課程:使用 Managed Service for Apache Flink 應用程式將資料從MSK叢集中的一個主題複寫到 中的另一個主題 VPC
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
下列教學課程示範如何使用 Amazon MSK叢集和兩個主題建立 VPC Amazon,以及如何建立 Managed Service for Apache Flink 應用程式,從一個 Amazon MSK主題讀取並寫入另一個主題。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
VPC 使用 Amazon MSK叢集建立 Amazon
若要建立從 Managed Service for Apache Flink 應用程式存取的範例VPC和 Amazon MSK叢集,請遵循開始使用 Amazon MSK教學課程。
完成教學課程時,請注意以下事項:
在步驟 3:建立主題中,重複
kafka-topics.sh --create
命令以建立名為AWSKafkaTutorialTopicDestination
的目的地主題:bin/kafka-topics.sh --create --zookeeper
ZooKeeperConnectionString
--replication-factor 3 --partitions 1 --topic AWS KafkaTutorialTopicDestination記錄叢集的啟動伺服器清單。您可以使用下列命令取得引導伺服器清單 (取代
ClusterArn
使用MSK叢集ARN的 ):aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn
ClusterArn
{... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }遵循教學課程中的步驟時,請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。
建立應用程式碼
在本節中,您將下載和編譯應用程式JAR檔案。我們建議使用 Java 11。
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
應用程式的程式碼位於
amazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.java
檔案中。您可以檢查程式碼,以熟悉 Managed Service for Apache Flink 應用程式程式碼的結構。使用命令列 Maven 工具或偏好的開發環境來建立JAR檔案。若要使用命令列 Maven 工具編譯JAR檔案,請輸入下列內容:
mvn package -Dflink.version=1.15.3
如果建置成功,會建立下列檔案:
target/KafkaGettingStartedJob-1.0.jar
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。如果您使用的是開發環境,
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 一節建立的 Amazon S3 儲存貯體。
注意
如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳應用程式碼JAR檔案 步驟。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
KafkaGettingStartedJob-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台。
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
針對執行期,選擇 Apache Flink 1.15.2 版。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
KafkaGettingStartedJob-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。注意
當您使用主控台 (例如 CloudWatch Logs 或 Amazon VPC) 指定應用程式資源時,主控台會修改您的應用程式執行角色,以授予存取這些資源的許可。
-
在屬性下,選擇新增群組。輸入下列屬性:
群組 ID 金鑰 值 KafkaSource
主題 AWS KafkaTutorialTopic KafkaSource
bootstrap.servers The bootstrap server list you saved previously
KafkaSource
security.protocol SSL KafkaSource
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSource
ssl.truststore.password changeit 注意
預設憑證的 ssl.truststore.password 是「changeit」;如果您使用預設憑證,不需要變更此值。
再次選擇新增群組。輸入下列屬性:
群組 ID 金鑰 值 KafkaSink
主題 AWS KafkaTutorialTopicDestination KafkaSink
bootstrap.servers The bootstrap server list you saved previously
KafkaSink
security.protocol SSL KafkaSink
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSink
ssl.truststore.password changeit KafkaSink
transaction.timeout.ms 1000 應用程式程式碼會讀取上述應用程式屬性,以設定用於與您的 和 Amazon MSK叢集互動的來源VPC和接收。如需如何使用屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
-
在快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,請選擇啟用核取方塊。
-
在虛擬私有雲端 (VPC) 區段中,選擇要與您的應用程式VPC建立關聯的 。選擇與 相關聯的子網路和安全群組VPC,讓應用程式用來存取VPC資源。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
測試應用程式。
在本節中,您將記錄寫入來源主題。應用程式會從來源主題讀取記錄,並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄,以確認應用程式是否正常運作。
若要從主題寫入和讀取記錄,請遵循開始使用 Amazon MSK教學課程中的步驟 6:產生和使用資料。
若要讀取目的地主題,請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱:
bin/kafka-console-consumer.sh --bootstrap-server
BootstrapBrokerString
--consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
如果目的地主題中未顯示任何記錄,請參閱 疑難排解 Apache Flink 的受管理服務 主題中的無法訪問中的資源 VPC一節。
範例:搭配 Kinesis 資料串流使用EFO取用者
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,該應用程式使用增強型扇出 (EFO) 取用者從 Kinesis 資料串流讀取。如果 Kinesis 取用者使用 EFO,Kinesis Data Streams 服務會提供自己的專用頻寬,而不是讓取用者與其他從串流讀取的取用者共用串流的固定頻寬。
如需EFO搭配 Kinesis 取用者使用 的詳細資訊,請參閱 FLIP-128: Enhanced Fan Out for Kinesis Consumers
您在此範例中建立的應用程式使用 AWS Kinesis 連接器 (flink-connector-kinesis) 1.15.3。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
兩個 Kinesis 資料串流 (
ExampleInputStream
和ExampleOutputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
和ExampleOutputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
amazon-kinesis-data-analytics-java-examples/EfoConsumer
目錄。
應用程式的程式碼位於 EfoApplication.java
檔案中。請留意下列與應用程式的程式碼相關的資訊:
您可以在 Kinesis EFO取用者上設定下列參數來啟用取用者:
RECORD_PUBLISHER_TYPE:將此參數設定為 EFO ,讓您的應用程式使用EFO取用者存取 Kinesis Data Stream 資料。
EFO_CONSUMER_NAME:將此參數設定為此串流的取用者中唯一的字串值。在相同的 Kinesis 資料串流中重複使用取用者名稱,將導致先前使用該名稱的使用者遭到終止。
下列程式碼範例示範如何將值指派給取用者組態屬性,以使用EFO取用者從來源串流讀取:
consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO"); consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
編譯應用程式程式碼
若要編譯應用程式,請執行下列動作:
如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件。
使用下列命令編譯應用程式:
mvn package -Dflink.version=1.15.3
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar
)。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
aws-kinesis-analytics-java-apps-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
注意
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。注意
這些許可授予應用程式存取EFO取用者的能力。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "AllStreams", "Effect": "Allow", "Action": [ "kinesis:ListShards", "kinesis:ListStreamConsumers", "kinesis:DescribeStreamSummary" ], "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/*" }, { "Sid": "Stream", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:RegisterStreamConsumer", "kinesis:DeregisterStreamConsumer" ], "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }, { "Sid": "Consumer", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": [ "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream/consumer/my-efo-flink-app", "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream/consumer/my-efo-flink-app:*" ] }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
aws-kinesis-analytics-java-apps-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇建立群組。
-
輸入以下應用程式屬性和數值:
群組 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
-
在屬性下,選擇建立群組。
-
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 ProducerConfigProperties
OUTPUT_STREAM
ExampleOutputStream
ProducerConfigProperties
AWS_REGION
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
您也可以在資料串流的增強型扇出標籤中,檢查 Kinesis Data Streams 主控台,查看取用者的名稱 (basic-efo-flink-app)。
清除 AWS 資源
本節包含在 efo Window 教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除 Amazon S3 物件與儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:寫入 Firehose
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
在本練習中,您會建立 Managed Service for Apache Flink 應用程式,該應用程式具有 Kinesis 資料串流作為來源,以及 Firehose 串流作為接收器。使用接收器,您就可以驗證 Amazon S3 儲存貯體的應用程式輸出。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
本節包含下列步驟:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 之前,先建立下列相依資源:
Kinesis 資料串流 (
ExampleInputStream
)應用程式將輸出寫入 () 的 Firehose 串流
ExampleDeliveryStream
。Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以使用主控台建立 Kinesis 串流、Amazon S3 儲存貯體和 Firehose 串流。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
命名。在 Amazon Data Firehose 開發人員指南 中建立 Amazon Kinesis Data Firehose 交付串流。 為您的 Firehose 串流命名
ExampleDeliveryStream
。當您建立 Firehose 串流時,也請建立 Firehose 串流的 S3 目的地和IAM角色 。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查 Apache Flink 串流 Java 程式碼
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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(); }
編譯應用程式程式碼
若要編譯應用程式,請執行下列動作:
如果尚未安裝 Java 和 Maven,請先安裝。如需詳細資訊,請參閱教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程中的完成必要的先決條件。
若要將 Kinesis 連接器用於以下應用程式,您需要下載、建置並安裝 Apache Maven。如需詳細資訊,請參閱 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用。
使用下列命令編譯應用程式:
mvn package -Dflink.version=1.15.3
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
編譯應用程式會建立應用程式JAR檔案 (target/aws-kinesis-analytics-java-apps-1.0.jar
)。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
上傳應用程式的程式碼
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
在主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
java-getting-started-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。
注意
當您使用主控台建立應用程式時,系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI,您可以分別建立這些資源。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 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 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式會使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流和 Firehose 串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶的所有執行個體 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteDeliveryStream", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:us-west-2:012345678901
:deliverystream/ExampleDeliveryStream" }
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
java-getting-started-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
在頁面上MyApplication,選擇停止 。確認動作。
更新應用程式
使用主控台,您可以更新應用程式設定,例如應用程式屬性、監控設定,以及應用程式 的位置或檔案名稱JAR。
在頁面上MyApplication,選擇設定 。更新應用程式設定,然後選擇更新。
注意
若要更新主控台上的應用程式程式碼,您必須變更 的物件名稱JAR、使用不同的 S3 儲存貯體,或使用 AWS CLI ,如 更新應用程式的程式碼 節所述。如果檔案名稱或儲存貯體未變更,當您在設定頁面上選擇更新時,不會重新載入應用程式的程式碼。
建立和執行應用程式 (AWS CLI)
在本節中,您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。
建立許可政策
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read
動作的許可,而另一條則是授與目的地串流上 write
動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。Replace (取代) username
使用您將用來建立 Amazon S3 儲存貯體以存放應用程式碼的使用者名稱。將 Amazon Resource Names (ARNs) (
) 中的帳戶 ID 取代為您的帳戶 ID。012345678901
{ "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 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色 、建立角色。
-
在選取可信身分類型下,選擇 AWS 服務。在選擇將使用此角色的服務下,選擇 Kinesis。在 Select your use case (選取您的使用案例) 下,選擇 Kinesis Analytics (Kinesis 分析)。
選擇下一步:許可。
-
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
-
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策。 -
將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策,建立許可政策。
-
在摘要頁面,選擇許可標籤。
-
選擇連接政策。
-
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。 -
選擇AKReadSourceStreamWriteSinkStream政策,然後選擇附加政策 。
-
您現在已建立應用程式將用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立 Managed Service for Apache Flink 應用程式
-
將下列JSON程式碼儲存至名為 的檔案
create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體ARN尾碼取代為您在 建立相依資源章節 (.) 中選擇的尾碼ka-app-code-
。取代範例帳戶 ID (<username>
012345678901
) 位於服務執行角色中,並提供您的帳戶 ID。{ "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::
012345678901
:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" } } } } -
使用前述請求執行
CreateApplication
動作以建立應用程式:aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您會透過 StartApplication
動作來啟動應用程式。
啟動應用程式
-
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
-
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節,您會使用該 StopApplication
動作來停止應用程式。
停止應用程式
-
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "test" }
-
以停止應用程式的上述請求,執行
StopApplication
動作:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch Logs 與應用程式搭配使用的詳細資訊,請參閱 在 Managed Service for Apache Flink 中設定應用程式記錄。
更新應用程式的程式碼
當您需要使用新版本的程式碼套件更新應用程式程式碼時,您可以使用 UpdateApplication
AWS CLI 動作。
若要使用 AWS CLI,請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本,然後呼叫 UpdateApplication
,指定相同的 Amazon S3 儲存貯體和物件名稱。
UpdateApplication
動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 CurrentApplicationVersionId
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。更新儲存貯體名稱尾碼 (<username
>) 加上您在 建立相依資源區段中選擇的字尾。
{ "ApplicationName": "test", "CurrentApplicationVersionId":
1
, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username
", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }
清除 AWS 資源
本節包含在入門教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
選擇設定。
在快照區段中,選擇停用,然後選擇更新。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
刪除 Firehose 串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Firehose 面板中,選擇 ExampleDeliveryStream。
在ExampleDeliveryStream頁面中,選擇刪除 Firehose 串流,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
如果您為 Firehose 串流的目的地建立 Amazon S3 儲存貯體,請同時刪除該儲存貯體。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
如果您為 Firehose 串流建立新的政策,請同時刪除該政策。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
如果您為 Firehose 串流建立新的角色,請同時刪除該角色。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:從不同帳戶中的 Kinesis 串流讀取
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
本範例示範如何建立可從不同帳戶的 Kinesis 串流讀取資料的 Managed Service for Apache Flink 應用程式。在此範例中,您將一個帳戶用於來源 Kinesis 串流,將另一個帳戶用於 Managed Service for Apache Flink 應用程式和接收器 Kinesis 串流。
必要條件
在本教學課程中,您將修改入門範例,從不同帳戶的 Kinesis 串流讀取資料。請完成教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 教學課程後再繼續。
您需要兩個 AWS 帳戶才能完成本教學課程:一個用於來源串流,另一個用於應用程式和接收器串流。使用您用於應用程式和接收器串流入門教學 AWS 的帳戶。對來源串流使用不同的 AWS 帳戶。
設定
您可以使用具名設定檔來存取兩個 AWS 帳戶。修改您的 AWS 憑證和組態檔案,以包含兩個設定檔,其中包含兩個帳戶的 區域和連線資訊。
下列範例憑證檔案包含兩個具名的設定檔 ka-source-stream-account-profile
和 ka-sink-stream-account-profile
。將用於入門教學課程的帳戶用於接收器串流帳戶。
[ka-source-stream-account-profile] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [ka-sink-stream-account-profile] aws_access_key_id=AKIAI44QH8DHBEXAMPLE aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
下列範例組態檔案包含具有區域和輸出格式資訊的相同具名設定檔。
[profile ka-source-stream-account-profile] region=us-west-2 output=json [profile ka-sink-stream-account-profile] region=us-west-2 output=json
注意
本教學課程不使用 ka-sink-stream-account-profile
。其中包含如何使用設定檔存取兩個不同 AWS 帳戶的範例。
如需搭配 使用具名設定檔的詳細資訊 AWS CLI,請參閱 AWS Command Line Interface 文件中的具名設定檔。
建立來源 Kinesis 串流
在本節中,您將在來源帳戶中建立 Kinesis 串流。
輸入下列命令建立 Kinesis 串流,供應用程式用來輸入。請注意,--profile
參數會指定要使用的帳戶設定檔。
$ aws kinesis create-stream \ --stream-name SourceAccountExampleInputStream \ --shard-count 1 \ --profile ka-source-stream-account-profile
建立和更新IAM角色和政策
若要允許跨 AWS 帳戶存取物件,您可以在來源帳戶中建立IAM角色和政策。然後,您可以修改 sink 帳戶中IAM的政策。如需建立IAM角色和政策的相關資訊,請參閱 AWS Identity and Access Management 使用者指南 中的下列主題:
接收帳戶角色和政策
從入門教學課程編輯
kinesis-analytics-service-MyApplication-us-west-2
策略。此政策允許應用程式擔任來源帳戶中的角色,以讀取來源串流。注意
使用主控台建立應用程式時,主控台會建立名為
kinesis-analytics-service-
的政策和名為<application name>
-<application region>
kinesisanalytics-
的角色。<application name>
-<application region>
將下面反白顯示的部分新增至政策。取代範例帳戶 ID (
SOURCE01234567
) 搭配您要用於來源串流的帳戶 ID。{ "Version": "2012-10-17", "Statement": [
{ "Sid": "AssumeRoleInSourceAccount", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role" },
{ "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username
/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678
:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] } ] }開啟
kinesis-analytics-MyApplication-us-west-2
角色,並記下其 Amazon Resource Name (ARN)。您會在下一節中用到它。此角色ARN看起來如下所示。arn:aws:iam::
SINK012345678
:role/service-role/kinesis-analytics-MyApplication-us-west-2
來源帳戶角色和政策
在名為的
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" } ] }在名為的
MF-Source-Stream-Role
來源帳戶中建立角色。執行下列動作,以使用受管 Flink 使用案例建立角色:在IAM管理主控台中,選擇建立角色 。
在建立角色頁面上選擇 AWS 服務。在服務清單中,選擇 Kinesis。
在選取使用案例區塊中,選擇 Managed Service for Apache Flink。
選擇下一步:許可。
新增您在上個步驟中建立的
KA-Source-Stream-Policy
許可政策:選擇 Next: Add Tags (下一步:新增標籤)。選擇下一步:檢閱。
將角色命名為
KA-Source-Stream-Role
。您的應用程式將使用此角色來存取來源串流。
將
kinesis-analytics-MyApplication-us-west-2
ARN 從接收端帳戶新增至來源帳戶中KA-Source-Stream-Role
角色的信任關係:在IAM主控台
KA-Source-Stream-Role
中開啟 。選取 Trust Relationships (信任關係) 索引標籤。
選擇 Edit trust relationship (編輯信任關係)。
將下列程式碼用於信任關係。取代範例帳戶 ID (
) 與您的 sink 帳戶 ID。SINK012345678
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
:role/service-role/kinesis-analytics-MyApplication-us-west-2" }, "Action": "sts:AssumeRole" } ] }SINK012345678
更新 Python 指令碼
在本節中,您將更新產生範例資料的 Python 指令碼,以使用來源帳戶設定檔。
使用下列反白顯示的變更更新 stock.py
指令碼。
import json import boto3 import random import datetime
import os os.environ['AWS_PROFILE'] ='ka-source-stream-account-profile' os.environ['AWS_DEFAULT_REGION'] = 'us-west-2'
kinesis = boto3.client('kinesis') def getReferrer(): data = {} now = datetime.datetime.now() str_now = now.isoformat() data['event_time'] = str_now data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']) price = random.random() * 100 data['price'] = round(price, 2) return data while True: data = json.dumps(getReferrer()) print(data) kinesis.put_record( StreamName="SourceAccountExampleInputStream
", Data=data, PartitionKey="partitionkey")
更新 Java 應用程式
在本節中,您將更新 Java 應用程式的程式碼,以便在從來源串流讀取時擔任來源帳戶角色。
對 BasicStreamingJob.java
檔案進行下列變更。取代範例來源帳戶號碼 (SOURCE01234567
) 與您的來源帳戶號碼。
package com.amazonaws.services.managed-flink; import com.amazonaws.services.managed-flink.runtime.KinesisAnalyticsRuntime; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisConsumer; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisProducer; import org.apache.flink.streaming.connectors.kinesis.config.ConsumerConfigConstants;
import org.apache.flink.streaming.connectors.kinesis.config.AWSConfigConstants;
import java.io.IOException; import java.util.Map; import java.util.Properties; /** * A basic Managed Service for Apache Flink for Java application with Kinesis data streams * as source and sink. */ public class BasicStreamingJob { private static final String region = "us-west-2"; private static final String inputStreamName ="SourceAccountExampleInputStream";
private static final String outputStreamName = ExampleOutputStream;private static final String roleArn = "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role"; private static final String roleSessionName = "ksassumedrolesession";
private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) { Properties inputProperties = new Properties();inputProperties.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, "ASSUME_ROLE"); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_ARN, roleArn); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_SESSION_NAME, roleSessionName);
inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region); inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST"); return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties)); } private static KinesisStreamsSink<String> createSinkFromStaticConfig() { Properties outputProperties = new Properties(); outputProperties.setProperty(AWSConfigConstants.AWS_REGION, region); return KinesisStreamsSink.<String>builder() .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema()) .setStreamName(outputProperties.getProperty("OUTPUT_STREAM", "ExampleOutputStream")) .setPartitionKeyGenerator(element -> String.valueOf(element.hashCode())) .build(); } public static void main(String[] args) throws Exception { // set up the streaming execution environment final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> input = createSourceFromStaticConfig(env); input.addSink(createSinkFromStaticConfig()); env.execute("Flink Streaming Java API Skeleton"); } }
建置、上傳和執行應用程式
執行下列動作以更新並執行應用程式:
在包含
pom.xml
檔案的目錄中,執行下列命令來再次建置應用程式。mvn package -Dflink.version=1.15.3
從 Amazon Simple Storage Service (Amazon S3) 儲存貯體中刪除先前的JAR檔案,然後將新
aws-kinesis-analytics-java-apps-1.0.jar
檔案上傳至 S3 儲存貯體。在 Managed Service for Apache Flink 主控台的應用程式頁面中,選擇設定 、更新以重新載入應用程式JAR檔案。
執行
stock.py
指令碼,以將資料傳送至來源串流。python stock.py
應用程式現在會從另一個帳戶的 Kinesis 串流讀取資料。
您可以檢查 ExampleOutputStream
串流的 PutRecords.Bytes
指標,以驗證應用程式是否正在運作。如果輸出串流中有活動,表示應用程式運作正常。
教學課程:搭配 Amazon 使用自訂信任存放區 MSK
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
目前的資料來源 APIs
如果您使用的是目前的資料來源 APIs,您的應用程式可以利用此處所述的 Amazon MSK Config Providers 公用程式。 https://github.com/aws-samples/msk-config-providers
... // define names of config providers: builder.setProperty("config.providers", "secretsmanager,s3import"); // provide implementation classes for each provider: builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider"); builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider"); String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString(); String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString(); String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString(); String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString(); String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString(); String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString(); String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString(); // region, etc.. builder.setProperty("config.providers.s3import.param.region", region); // properties builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}"); builder.setProperty("ssl.keystore.type", "PKCS12"); builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}"); builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); ...
詳細資訊和逐步導覽可以在此處
舊版 SourceFunction APIs
如果您使用的是舊版 SourceFunction APIs,您的應用程式將使用自訂序列化和還原序列化結構描述,覆寫載入自訂信任存放區open
的方法。這讓應用程式在重新啟動或取代執行緒之後可以使用信任存放區。
可使用以下程式碼檢索和存儲自訂信任存放區:
public static void initializeKafkaTruststore() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL inputUrl = classLoader.getResource("kafka.client.truststore.jks"); File dest = new File("/tmp/kafka.client.truststore.jks"); try { FileUtils.copyURLToFile(inputUrl, dest); } catch (Exception ex) { throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex); } }
注意
Apache Flink 要求信任存放區採用 JKS 格式
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 練習。
以下教學課程示範如何安全地連線 (傳輸中加密) 到使用由自訂、私有甚至自託管憑證授權機構 (CA) 發行的伺服器憑證之 Kafka 叢集。
若要將任何 Kafka 用戶端安全地連接到 Kafka TLS 叢集,Kafka 用戶端 (如範例 Flink 應用程式) 必須信任 Kafka 叢集伺服器憑證 (從發出 CA 到根層級 CA) 提供的完整信任鏈。作為自訂信任存放區的範例,我們將使用啟用相互 TLS(MTLS) 身分驗證的 Amazon MSK叢集。這表示MSK叢集節點使用由 AWS Certificate Manager Private Certificate Authority (ACM Private CA) 發行的伺服器憑證,該憑證為您的帳戶和區域私有,因此不受執行 Flink 應用程式之 Java Virtual Machine (JVM) 的預設信任存放區所信任。
注意
-
金鑰存放區用於存放私有金鑰,以及應用程式應同時呈現給伺服器或用戶端進行驗證的身分憑證。
-
信任存放區用於儲存來自認證機構 (CA) 的憑證,以驗證SSL連線中伺服器提供的憑證。
您也可以使用本教學課程中的技術,在 Managed Service for Apache Flink 應用程式與其他 Apache Kafka 來源之間進行互動,例如:
託管於 AWS (Amazon EC2
或 Amazon EKS ) 的自訂 Apache Kafka 叢集 託管於 的 Confluent Kafka
叢集 AWS 透過 AWS Direct Connect
或 存取的內部部署 Kafka 叢集 VPN
本教學課程包含下列章節:
VPC 使用 Amazon MSK叢集建立
若要建立從 Managed Service for Apache Flink 應用程式存取的範例VPC和 Amazon MSK叢集,請遵循開始使用 Amazon MSK 教學課程。
完成教學課程時,請注意以下事項:
在步驟 3:建立主題中,重複
kafka-topics.sh --create
命令以建立名為AWS KafkaTutorialTopicDestination
的目的地主題:bin/kafka-topics.sh --create --bootstrap-server
ZooKeeperConnectionString
--replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopicDestination注意
如果
kafka-topics.sh
命令傳回ZooKeeperClientTimeoutException
,請確認 Kafka 叢集的安全群組具有一項傳入規則,即允許來自用戶端執行個體私有 IP 地址的所有流量。記錄叢集的啟動伺服器清單。您可以使用下列命令取得引導伺服器清單 (取代
ClusterArn
使用MSK叢集ARN的 ):aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn
ClusterArn
{... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }遵循本教學課程中的步驟和先決條件教學課程時,請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。
建立自訂信任存放區並將其套用至叢集
在本節中,您可以建立自訂憑證授權機構 (CA)、使用它來產生自訂信任存放區,並將其套用至MSK叢集。
若要建立和套用您的自訂信任存放區,請按照 Amazon Managed Streaming for Apache Kafka 開發人員指南中的用戶端身分驗證教學課程操作。
建立應用程式碼
在本節中,您可以下載和編譯應用程式JAR檔案。
此範例的 Java 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
應用程式的程式碼位於
amazon-kinesis-data-analytics-java-examples/CustomKeystore
檔案中。您可以檢查程式碼,以熟悉 Managed Service for Apache Flink 程式碼的結構。使用命令列 Maven 工具或您偏好的開發環境來建立 JAR 檔案。若要使用命令列 Maven 工具編譯JAR檔案,請輸入下列內容:
mvn package -Dflink.version=1.15.3
如果建置成功,會建立下列檔案:
target/flink-app-1.0-SNAPSHOT.jar
注意
提供的來源程式碼依賴於 Java 11 中的程式庫。
上傳 Apache Flink 串流 Java 程式碼
在本節中,您會將應用程式的程式碼上傳至在教學課程:開始使用 Managed Service for Apache Flink 中的 DataStream API 一節建立的 Amazon S3 儲存貯體。
注意
如果您從入門教學課程中刪除了 Amazon S3 儲存貯體,請再次執行下列 上傳應用程式碼JAR檔案 步驟。
-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
flink-app-1.0-SNAPSHOT.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
針對執行期,選擇 Apache Flink 1.15.2 版。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
flink-app-1.0-SNAPSHOT.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。注意
當您使用主控台 (例如日誌或 VPC) 指定應用程式資源時,主控台會修改您的應用程式執行角色,以授予存取這些資源的許可。
-
在屬性下,選擇新增群組。輸入下列屬性:
群組 ID 金鑰 值 KafkaSource
主題 AWS KafkaTutorialTopic KafkaSource
bootstrap.servers The bootstrap server list you saved previously
KafkaSource
security.protocol SSL KafkaSource
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSource
ssl.truststore.password changeit 注意
預設憑證的 ssl.truststore.password 是「changeit」;如果您使用預設憑證,不需要變更此值。
再次選擇新增群組。輸入下列屬性:
群組 ID 金鑰 值 KafkaSink
主題 AWS KafkaTutorialTopicDestination KafkaSink
bootstrap.servers The bootstrap server list you saved previously
KafkaSink
security.protocol SSL KafkaSink
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSink
ssl.truststore.password changeit KafkaSink
transaction.timeout.ms 1000 應用程式程式碼會讀取上述應用程式屬性,以設定用於與您的 和 Amazon MSK叢集互動的來源VPC和接收。如需如何使用屬性的詳細資訊,請參閱在 Apache Flink 的受管理服務中使用執行階段屬性。
-
在快照下選擇停用。這可以讓您更輕鬆地更新應用程式,而無需加載無效的應用程式狀態資料。
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,請選擇啟用核取方塊。
-
在虛擬私有雲端 (VPC) 區段中,選擇要與您的應用程式VPC建立關聯的 。選擇與 相關聯的子網路和安全群組VPC,讓應用程式用來存取VPC資源。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
測試應用程式。
在本節中,您將記錄寫入來源主題。應用程式會從來源主題讀取記錄,並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄,以確認應用程式是否正常運作。
若要從主題寫入和讀取記錄,請遵循開始使用 Amazon MSK教學課程中的步驟 6:產生和使用資料。
若要讀取目的地主題,請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱:
bin/kafka-console-consumer.sh --bootstrap-server
BootstrapBrokerString
--consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
如果目的地主題中未顯示任何記錄,請參閱 疑難排解 Apache Flink 的受管理服務 主題中的無法訪問中的資源 VPC一節。
Python 範例
下列範例示範如何使用 Python 與 Apache Flink 資料表 建立應用程式API。
範例:在 Python 中建立管道窗口
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
在本練習中,您將使用輪轉視窗建立可彙總資料的適用於 Python 的 Managed Service for Apache Flink 應用程式。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
兩個 Kinesis 資料串流 (
ExampleInputStream
和ExampleOutputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
和ExampleOutputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
注意
本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:
aws configure
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
amazon-kinesis-data-analytics-java-examples/python/TumblingWindow
目錄。
應用程式的程式碼位於 tumbling-windows.py
檔案中。請留意下列與應用程式的程式碼相關的資訊:
應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫
create_table
函數來建立 Kinesis 資料表來源:table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )
create_table
函數使用 SQL命令來建立由串流來源支援的資料表:def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos)
應用程式使用
Tumble
運算子來彙總指定的輪轉視窗中的記錄,並將彙總記錄作為資料表物件傳回:tumbling_window_table = ( input_table.window( Tumble.over("10.seconds").on("event_time").alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
應用程式使用來自
flink-sql-connector-kinesis-1.15.2.jar
的Kinesis Flink 連接器。
壓縮並上傳 Apache Flink 串流 Python 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
使用偏好的壓縮應用程式來壓縮
tumbling-windows.py
和flink-sql-connector-kinesis-1.15.2.jar
檔案。命名存檔myapp.zip
。-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
myapp.zip
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
注意
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
myapp.zip
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入下列資料:
群組 ID 金鑰 值 consumer.config.0
input.stream.name
ExampleInputStream
consumer.config.0
aws.region
us-west-2
consumer.config.0
scan.stream.initpos
LATEST
選擇 Save (儲存)。
在屬性下,再次選擇新增群組。
輸入下列資料:
群組 ID 金鑰 值 producer.config.0
output.stream.name
ExampleOutputStream
producer.config.0
aws.region
us-west-2
producer.config.0
shard.count
1
在屬性下,再次選擇新增群組。針對群組 ID,輸入
kinesis.analytics.flink.run.options
。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱指定您的程式碼檔案。輸入下列資料:
群組 ID 金鑰 值 kinesis.analytics.flink.run.options
python
tumbling-windows.py
kinesis.analytics.flink.run.options
jarfile
flink-sql-connector-kinesis-1.15.2.jar
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
清除 AWS 資源
本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:在 Python 中建立滑動視窗
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
兩個 Kinesis 資料串流 (
ExampleInputStream
和ExampleOutputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼 (
ka-app-code-
)<username>
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
和ExampleOutputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
注意
本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:
aws configure
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/>amazon-kinesis-data-analytics-java-examples
導覽至
amazon-kinesis-data-analytics-java-examples/python/SlidingWindow
目錄。
應用程式的程式碼位於 sliding-windows.py
檔案中。請留意下列與應用程式的程式碼相關的資訊:
應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫
create_input_table
函數來建立 Kinesis 資料表來源:table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )
create_input_table
函數使用 SQL命令來建立由串流來源支援的資料表:def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos) }
應用程式會使用
Slide
運算子來彙總指定滑動視窗內的記錄,並將彙總記錄作為資料表物件傳回:sliding_window_table = ( input_table .window( Slide.over("10.seconds") .every("5.seconds") .on("event_time") .alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time") )
應用程式使用來自 flink-sql-connector-kinesis-1.15.2.jar
檔案的 Kinesis Flink 連接器。
壓縮並上傳 Apache Flink 串流 Python 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
本節說明如何封裝 Python 應用程式。
使用偏好的壓縮應用程式來壓縮
sliding-windows.py
和flink-sql-connector-kinesis-1.15.2.jar
檔案。命名存檔myapp.zip
。-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
myapp.zip
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
注意
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
myapp.zip
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 consumer.config.0
input.stream.name
ExampleInputStream
consumer.config.0
aws.region
us-west-2
consumer.config.0
scan.stream.initpos
LATEST
選擇 Save (儲存)。
在屬性下,再次選擇新增群組。
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 producer.config.0
output.stream.name
ExampleOutputStream
producer.config.0
aws.region
us-west-2
producer.config.0
shard.count
1
在屬性下,再次選擇新增群組。針對群組 ID,輸入
kinesis.analytics.flink.run.options
。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱 指定您的程式碼檔案。輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 kinesis.analytics.flink.run.options
python
sliding-windows.py
kinesis.analytics.flink.run.options
jarfile
flink-sql-connector-kinesis_1.15.2.jar
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
清除 AWS 資源
本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:在 Python 中將串流資料傳送至 Amazon S3
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
在本練習中,您將建立適用於 Python 的 Managed Service for Apache Flink 應用程式,將資料串流傳輸到 Amazon Simple Storage Service 接收器。
注意
若要設定此練習的必要先決條件,請先完成 教學課程:開始在 Apache Flink 的受管理服務中使用 Python 練習。
本主題包含下列章節:
建立相依資源
在為本練習建立 Managed Service for Apache Flink 應用程式之前,先建立下列相依資源:
Kinesis 資料串流 (
ExampleInputStream
)Amazon S3 儲存貯體,用來儲存應用程式的程式碼和輸出 (
ka-app-code-
)<username>
注意
Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。
您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示,請參閱以下主題:
《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。為資料串流
ExampleInputStream
命名。《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體。透過附加登入名稱 (例如
ka-app-code-
),為 Amazon S3 儲存貯體提供全域唯一的名稱。<username>
將範例記錄寫入輸入串流
在本節,您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。
注意
注意
本節中的 Python 指令碼會使用 AWS CLI。您必須將 設定為 AWS CLI 使用您的帳戶憑證和預設區域。若要設定您的 AWS CLI,請輸入下列內容:
aws configure
-
使用下列內容建立名為
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'))
-
執行
stock.py
指令碼:$ python stock.py
在完成教學課程的其餘部分時,讓指令碼保持執行狀態。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
amazon-kinesis-data-analytics-java-examples/python/S3Sink
目錄。
應用程式的程式碼位於 streaming-file-sink.py
檔案中。請留意下列與應用程式的程式碼相關的資訊:
應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫
create_source_table
函數來建立 Kinesis 資料表來源:table_env.execute_sql( create_source_table(input_table_name, input_stream, input_region, stream_initpos) )
create_source_table
函數使用 SQL命令來建立由串流來源支援的資料表import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
應用程式會使用
filesystem
連接器將記錄傳送至 Amazon S3 儲存貯體:def create_sink_table(table_name, bucket_name): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time VARCHAR(64) ) PARTITIONED BY (ticker) WITH ( 'connector'='filesystem', 'path'='s3a://{1}/', 'format'='json', 'sink.partition-commit.policy.kind'='success-file', 'sink.partition-commit.delay' = '1 min' ) """.format(table_name, bucket_name)
應用程式使用來自 flink-sql-connector-kinesis-1.15.2.jar
檔案的 Kinesis Flink 連接器。
壓縮並上傳 Apache Flink 串流 Python 程式碼
在本節中,您會將應用程式的程式碼上傳至在建立相依資源一節建立的 Amazon S3 儲存貯體。
使用您偏好的壓縮應用程式壓縮
streaming-file-sink.py
和 flink-sql-connector-kinesis-1.15.2.jar 檔案。命名存檔 myapp.zip
。-
在 Amazon S3 主控台中,選擇 ka-app-code-
<username>
儲存貯體,然後選擇上傳 。 -
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
myapp.zip
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行 Managed Service for Apache Flink 應用程式
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於執行期,選擇 Apache Flink。
注意
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
將版本下拉式清單保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
myapp.zip
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入以下應用程式屬性和數值:
群組 ID 金鑰 值 consumer.config.0
input.stream.name
ExampleInputStream
consumer.config.0
aws.region
us-west-2
consumer.config.0
scan.stream.initpos
LATEST
選擇 Save (儲存)。
在屬性下,再次選擇新增群組。針對群組 ID,輸入
kinesis.analytics.flink.run.options
。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱 指定您的程式碼檔案。輸入以下應用程式屬性和數值:
群組 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
在屬性下,再次選擇新增群組。針對群組 ID,輸入
sink.config.0
。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊,請參閱指定您的程式碼檔案。輸入下列應用程式屬性和值:(取代
bucket-name
Amazon S3 儲存貯體的實際名稱。)群組 ID 金鑰 值 sink.config.0
output.bucket.name
bucket-name
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,選取啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。
編輯IAM政策
編輯IAM政策以新增存取 Kinesis 資料串流的許可。
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*", "arn:aws:s3:::ka-app-code-<username>
/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:
] }012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteObjects", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
您可以在 CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
清除 AWS 資源
本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
Scala 範例
下列範例示範如何搭配使用 Scala 與 Apache Flink 來建立應用程式。
範例:在 Scala 中建立隆隆時段
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
注意
從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。
如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性
在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入輸出 Kinesis 串流。
注意
若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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
若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:
sbt assembly
-
如果應用程式成功編譯,則會建立下列檔案:
target/scala-3.2.0/tumbling-window-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼
在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇建立儲存貯體。
在儲存貯體名稱欄位中,輸入
ka-app-code-<username>
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。在設定選項中,保留原有設定並選擇下一步。
在設定許可步驟中,保留原有設定並選擇下一步。
選擇建立儲存貯體。
選擇
ka-app-code-<username>
儲存貯體,然後選擇上傳。-
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
tumbling-window-scala-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My Scala test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
請使用下列程序設定應用程式。
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
tumbling-window-scala-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入下列資料:
群組 ID 金鑰 值 ConsumerConfigProperties
input.stream.name
ExampleInputStream
ConsumerConfigProperties
aws.region
us-west-2
ConsumerConfigProperties
flink.stream.initpos
LATEST
選擇 Save (儲存)。
在屬性下,再次選擇新增群組。
輸入下列資料:
群組 ID 金鑰 值 ProducerConfigProperties
output.stream.name
ExampleOutputStream
ProducerConfigProperties
aws.region
us-west-2
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,請選擇啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
編輯IAM政策
編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。
編輯IAM政策以新增 S3 儲存貯體許可
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/tumbling-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" } ] }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。
建立和執行應用程式 (CLI)
在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,您的應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username
。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)
為您的帳戶 ID。MF-stream-rw-role
服務執行角色應根據客戶特定角色而打造。
{ "ApplicationName": "tumbling_window", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/
MF-stream-rw-role
", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策。
建立 IAM 角色
在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收端串流。
Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接了兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。
您會將在上一節中建立的許可政策連接至此角色。
建立 IAM 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽窗格中,選擇角色,然後選擇建立角色。
在選取可信身分類型下,選擇 AWS 服務。
在選擇將使用此角色的服務下,選擇 Kinesis。
在選取使用案例下,選擇 Managed Service for Apache Flink。
選擇下一步:許可。
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。
在摘要頁面,選擇許可標籤。
選擇連接政策。
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。選擇
AKReadSourceStreamWriteSinkStream
政策,然後選擇連接政策。
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立應用程式
將下列JSON程式碼儲存至名為 的檔案create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。ServiceExecutionRole
應包含您在上一節中建立IAM的使用者角色。
"ApplicationName": "tumbling_window", "ApplicationDescription": "Scala getting started application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-
username
", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
CreateApplication 使用下列請求執行 以建立應用程式:
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您可以使用 StartApplication動作來啟動應用程式。
啟動應用程式
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "tumbling_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節中,您可以使用 StopApplication動作來停止應用程式。
停止應用程式
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "tumbling_window" }
使用前述請求執行
StopApplication
動作以停止應用程式:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch 日誌的資訊,請參閱設定應用程式日誌。
更新環境屬性
在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
將下列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" } } ] } } }
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。
{ "ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-
username
", "FileKeyUpdate": "tumbling-window-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源
本節包含清除在管道窗口教學課程中建立 AWS 之資源的程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:在 Scala 中建立滑動視窗
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
注意
從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。
如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性
在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入輸出 Kinesis 串流。
注意
若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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
若要使用應用程式程式碼,您可以將其編譯並封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:
sbt assembly
-
如果應用程式成功編譯,則會建立下列檔案:
target/scala-3.2.0/sliding-window-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼
在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇建立儲存貯體。
在儲存貯體名稱欄位中,輸入
ka-app-code-<username>
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。在設定選項中,保留原有設定並選擇下一步。
在設定許可步驟中,保留原有設定並選擇下一步。
選擇建立儲存貯體。
選擇
ka-app-code-<username>
儲存貯體,然後選擇上傳。-
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
sliding-window-scala-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My Scala test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用您的應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
請使用下列程序設定應用程式。
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
sliding-window-scala-1.0.jar.
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入下列資料:
群組 ID 金鑰 值 ConsumerConfigProperties
input.stream.name
ExampleInputStream
ConsumerConfigProperties
aws.region
us-west-2
ConsumerConfigProperties
flink.stream.initpos
LATEST
選擇 Save (儲存)。
在屬性下,再次選擇新增群組。
輸入下列資料:
群組 ID 金鑰 值 ProducerConfigProperties
output.stream.name
ExampleOutputStream
ProducerConfigProperties
aws.region
us-west-2
-
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,請選擇啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
編輯IAM政策
編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。
編輯IAM政策以新增 S3 儲存貯體許可
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/sliding-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" } ] }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。
建立和執行應用程式 (CLI)
在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username
。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)
為您的帳戶 ID。
{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-
username
", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策。
建立 IAM 角色
在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。
Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。
您會將在上一節中建立的許可政策連接至此角色。
建立 IAM 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽窗格中,選擇角色,然後選擇建立角色。
在選取可信身分類型下,選擇 AWS 服務。
在選擇將使用此角色的服務下,選擇 Kinesis。
在選取使用案例下,選擇 Managed Service for Apache Flink。
選擇下一步:許可。
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。
在摘要頁面,選擇許可標籤。
選擇連接政策。
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。選擇
AKReadSourceStreamWriteSinkStream
政策,然後選擇連接政策。
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立應用程式
將下列JSON程式碼儲存至名為 的檔案create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。
{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding_window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-
username
", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
CreateApplication 使用下列請求執行 以建立應用程式:
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您可以使用 StartApplication動作來啟動應用程式。
啟動應用程式
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{ "ApplicationName": "sliding_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節中,您可以使用 StopApplication動作來停止應用程式。
停止應用程式
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "sliding_window" }
使用前述請求執行
StopApplication
動作以停止應用程式:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的相關資訊,請參閱設定應用程式日誌記錄 。
更新環境屬性
在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
將下列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" } } ] } } }
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。
{ "ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-
username
", "FileKeyUpdate": "-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源
本節包含在滑動視窗教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。
範例:在 Scala 中將串流資料傳送至 Amazon S3
注意
如需目前範例,請參閱 建立和使用 Managed Service for Apache Flink 應用程式的範例。
注意
從 Flink 1.15 版開始,移除了 Scala 相依性。應用程式現在可以API從任何 Scala 版本使用 Java。Flink 仍然在內部的幾個關鍵元件中使用 Scala,但不會將 Scala 公開給使用者程式碼類別加載器。因此,使用者需要將 Scala 相依性添加到他們的 jar 存檔中。
如需 Flink 1.15 中的 Scala 變更之詳細資訊,請參閱在 1.15 版中移除了 Scala 相依性
在本練習中,您將建立使用 Scala 3.2.0 和 Flink Java 的簡單串流應用程式。 DataStream API應用程式會從 Kinesis 串流讀取資料,使用滑動視窗彙總資料,並將結果寫入 S3。
注意
若要設定此練習的必要先決條件,請先完成入門 (Scala) 練習。您只需在 Amazon S3 儲存貯data/
體中建立額外的資料夾 ka-app-code-<username>。
下載並檢查應用程式程式碼
此範例的 Python 應用程式程式碼可從 取得 GitHub。若要下載應用程式的程式碼,請執行下列動作:
如果您尚未安裝 Git 用戶端,請先安裝。如需詳細資訊,請參閱安裝 Git
。 使用以下指令複製遠端儲存庫:
git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
導覽至
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
若要使用應用程式程式碼,您可以編譯應用程式程式碼並將其封裝為 JAR 檔案。您可以使用 編譯和封裝程式碼SBT:
sbt assembly
-
如果應用程式成功編譯,則會建立下列檔案:
target/scala-3.2.0/s3-sink-scala-1.0.jar
上傳 Apache Flink 串流 Scala 程式碼
在本節中,您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇建立儲存貯體。
在儲存貯體名稱欄位中,輸入
ka-app-code-<username>
。新增尾碼至儲存貯體名稱,例如您的使用者名稱,使其成為全域唯一的。選擇 Next (下一步)。在設定選項中,保留原有設定並選擇下一步。
在設定許可步驟中,保留原有設定並選擇下一步。
選擇建立儲存貯體。
選擇
ka-app-code-<username>
儲存貯體,然後選擇上傳。-
在選取檔案步驟中,選擇 新增檔案。導覽至您在上一步驟中建立的
s3-sink-scala-1.0.jar
檔案。 您不需要變更物件的任何設定,因此請選擇上傳。
您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。
建立和執行應用程式 (主控台)
依照以下步驟來使用主控台建立、設定、更新及執行應用程式。
建立應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
-
在 Managed Service for Apache Flink 儀表板上,選擇建立分析應用程式。
-
在 Managed Service for Apache Flink - 建立應用程式頁面,提供應用程式詳細資訊,如下所示:
-
在應用程式名稱中,輸入
MyApplication
。 -
對於 Description (說明),輸入
My java test app
。 -
對於執行期,選擇 Apache Flink。
-
將版本保留為 Apache Flink 1.15.2 版 (建議版本)。
-
-
針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
選擇建立應用程式。
注意
當您使用主控台建立 Managed Service for Apache Flink 應用程式時,您可以選擇為您的應用程式建立IAM角色和政策。應用程式使用此角色和政策來存取其相依資源。這些IAM資源會使用應用程式名稱和區域命名,如下所示:
-
政策:
kinesis-analytics-service-
MyApplication
-us-west-2
-
角色:
kinesisanalytics-
MyApplication
-us-west-2
設定應用程式
請使用下列程序設定應用程式。
設定應用程式
-
在頁面上MyApplication,選擇設定 。
-
在設定應用程式頁面,提供程式碼位置:
-
對於 Amazon S3 儲存貯體,請輸入
ka-app-code-
。<username>
-
對於 Amazon S3 物件的路徑,請輸入
s3-sink-scala-1.0.jar
。
-
-
在存取應用程式資源 下,針對存取許可 ,選擇建立/更新IAM角色
kinesis-analytics-MyApplication-us-west-2
。 -
在屬性下,選擇新增群組。
-
輸入下列資料:
群組 ID 金鑰 值 ConsumerConfigProperties
input.stream.name
ExampleInputStream
ConsumerConfigProperties
aws.region
us-west-2
ConsumerConfigProperties
flink.stream.initpos
LATEST
選擇 Save (儲存)。
-
在屬性下,選擇新增群組。
-
輸入下列資料:
群組 ID 金鑰 值 ProducerConfigProperties
s3.sink.path
s3a://ka-app-code-
<user-name>
/data -
在監控下,確保監控指標層級設為應用程式。
-
對於CloudWatch 記錄 ,請選擇啟用核取方塊。
-
選擇更新。
注意
當您選擇啟用 Amazon CloudWatch 記錄時,Managed Service for Apache Flink 會為您建立日誌群組和日誌串流。這些資源的名稱如下所示:
-
日誌群組:
/aws/kinesis-analytics/MyApplication
-
日誌串流:
kinesis-analytics-log-stream
編輯IAM政策
編輯IAM政策以新增存取 Amazon S3 儲存貯體的許可。
編輯IAM政策以新增 S3 儲存貯體許可
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
選擇政策。選擇主控台為您在上一節所建立的
kinesis-analytics-service-MyApplication-us-west-2
政策。 -
在摘要頁面,選擇編輯政策。選擇 JSON 索引標籤。
-
將下列政策範例的反白部分新增至政策。取代範例帳戶 IDs(
012345678901
) 搭配您的帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:
012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" } ] }
執行應用程式
透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業,即可檢視 Flink 作業圖表。
停止應用程式
若要停止應用程式,請在MyApplication頁面上選擇停止 。確認動作。
建立和執行應用程式 (CLI)
在本節中,您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 kinesisanalyticsv2 AWS CLI command 建立 Managed Service for Apache Flink 應用程式並與之互動。
建立許可政策
注意
您必須為應用程式建立許可政策和角色。如果您未建立這些IAM資源,應用程式無法存取其資料和日誌串流。
您會先建立具有兩條陳述式的許可政策:一條陳述式授與來源串流上 read 動作的許可,而另一條則是授與目的地串流上 write 動作的許可。然後,您將政策連接至IAM角色 (您在下一節中建立)。因此,當 Managed Service for Apache Flink 擔任角色時,服務便具有從來源串流讀取並寫入目的地串流的所需許可。
使用以下程式碼來建立 AKReadSourceStreamWriteSinkStream
許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 username
。將 Amazon Resource Names (ARNs) 中的帳戶 ID 取代(012345678901)
為您的帳戶 ID。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/getting-started-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" } ] }
如需 step-by-step建立許可政策的指示,請參閱 IAM 使用者指南 中的教學課程:建立和連接您的第一個客戶受管政策。
建立 IAM 角色
在本節中,您可以建立 Managed Service for Apache Flink 應用程式可以擔任IAM的角色,以讀取來源串流並寫入接收串流。
Managed Service for Apache Flink 沒有許可,無法存取串流。您可以透過IAM角色授予這些許可。每個IAM角色都連接兩個政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可,而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。
您會將在上一節中建立的許可政策連接至此角色。
建立 IAM 角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽窗格中,選擇角色,然後選擇建立角色。
在選取可信身分類型下,選擇 AWS 服務。
在選擇將使用此角色的服務下,選擇 Kinesis。
在選取使用案例下,選擇 Managed Service for Apache Flink。
選擇下一步:許可。
在連接許可政策頁面,選擇下一步:檢閱。您會在建立角色後連接許可政策。
在建立角色頁面,輸入
MF-stream-rw-role
作為角色名稱。選擇建立角色。現在您已建立名為 的新IAM角色
MF-stream-rw-role
。您接著會更新角色的信任和許可政策將 許可政策連接到角色。
注意
在此練習中,Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟建立許可政策中建立的政策。
在摘要頁面,選擇許可標籤。
選擇連接政策。
在搜尋方塊中,輸入
AKReadSourceStreamWriteSinkStream
(您在上一節中建立的政策)。選擇
AKReadSourceStreamWriteSinkStream
政策,然後選擇連接政策。
您現在已建立應用程式用於存取資源的服務執行角色。記下新角色ARN的 。
如需 step-by-step建立角色的指示,請參閱 IAM 使用者指南 中的建立IAM角色 (主控台)。
建立應用程式
將下列JSON程式碼儲存至名為 的檔案create_request.json
。將範例角色取代ARN為您先前建立的角色ARN的 。將儲存貯體尾碼 ARN (使用者名稱) 取代為您在上一節中選擇的尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。
{ "ApplicationName": "s3_sink", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-
username
", "FileKey": "s3-sink-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
CreateApplication 使用下列請求執行 以建立應用程式:
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
應用程式現在已建立。您會在下一個步驟中啟動應用程式。
啟動應用程式
在本節中,您可以使用 StartApplication動作來啟動應用程式。
啟動應用程式
將下列JSON程式碼儲存至名為 的檔案
start_request.json
。{{ "ApplicationName": "s3_sink", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
以啟動應用程式的上述請求,執行
StartApplication
動作:aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上檢查 Managed Service for Apache Flink 指標,以確認應用程式是否正常運作。
停止應用程式
在本節中,您可以使用 StopApplication動作來停止應用程式。
停止應用程式
將下列JSON程式碼儲存至名為 的檔案
stop_request.json
。{ "ApplicationName": "s3_sink" }
使用前述請求執行
StopApplication
動作以停止應用程式:aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
現在已停止應用程式。
新增 CloudWatch 記錄選項
您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需將 CloudWatch 日誌與應用程式搭配使用的相關資訊,請參閱設定應用程式日誌。
更新環境屬性
在本節中,您可以使用 UpdateApplication動作來變更應用程式的環境屬性,而無需重新編譯應用程式程式碼。在此範例中,您會變更來源和目的地串流的「區域」。
更新應用程式的環境屬性
將下列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" } } ] } } }
使用前述請求執行
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
更新至目前的應用程式版本。您可以使用 ListApplications
或 DescribeApplication
動作來檢查目前的應用程式版本。使用您在建立相依資源一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。
{ "ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-
username
", "FileKeyUpdate": "s3-sink-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
清除 AWS 資源
本節包含在 Tumbling Window 教學課程中建立 AWS 的資源清理程序。
本主題包含下列章節:
刪除 Managed Service for Apache Flink 應用程式
在 https://console.aws.amazon.com/flink 開啟 Managed Service for Apache Flink 主控台
在 Managed Service for Apache Flink 面板中,選擇 MyApplication。
在應用程式的頁面,選擇刪除,然後確認刪除。
刪除 Kinesis 資料串流
在 https://console.aws.amazon.com/kinesis 開啟 Kinesis
主控台。 在 Kinesis Data Streams 面板中,選擇 ExampleInputStream。
在 ExampleInputStream頁面中,選擇刪除 Kinesis Stream,然後確認刪除。
在 Kinesis 串流頁面中,選擇 ExampleOutputStream,選擇動作 ,選擇刪除 ,然後確認刪除。
刪除您的 Amazon S3 物件和儲存貯體
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 選擇 ka-app-code-
<username>
儲存貯體。選擇刪除,然後輸入儲存貯體名稱以確認刪除。
刪除您的IAM資源
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 在導覽列中,選擇政策。
在篩選器控制項中,輸入 kinesis。
選擇 kinesis-analytics-service-MyApplication-us-west-2 政策。
選擇政策動作,然後選擇刪除。
在導覽列中,選擇角色。
選擇 kinesis-analytics-MyApplication-us-west-2 角色。
選擇刪除角色,然後確認刪除。
刪除您的 CloudWatch 資源
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽列中,選擇日誌。
選擇 /aws/kinesis-analytics/MyApplication 日誌群組。
選擇刪除日誌群組,然後確認刪除。