Amazon Managed Service for Apache Flink は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Managed Service for Apache Flink の以前のバージョン情報
注記
Apache Flink バージョン 1.6、1.8、および 1.11 は、Apache Flink コミュニティで 3 年以上サポートされていません。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 のインプレースバージョンアップグレードを使用する」を参照してください。
Apache Flink のバージョン 1.15.2 および 1.13.2 は Managed Service for Apache Flink でサポートされていますが、Apache Flink コミュニティではサポートされなくなりました。
このトピックには、次のセクションが含まれています。
- 以前の Apache Flink バージョンで Apache Flink Kinesis Streams コネクタを使用する
- Apache Flink 1.8.2 を使用したアプリケーションの構築
- Apache Flink 1.6.2 を使用したアプリケーションの構築
- アプリケーションのアップグレード
- Apache Flink 1.6.2 および 1.8.2 で使用可能なコネクタ
- 開始方法: Flink 1.13.2
- 開始方法: Flink 1.11.1 - 非推奨
- 開始方法: Flink 1.8.2 - 非推奨
- 開始方法: Flink 1.6.2 - 非推奨
- Managed Service for Apache Flink の以前のバージョン (レガシー) の例
以前の Apache Flink バージョンで Apache Flink Kinesis Streams コネクタを使用する
Apache Flink Kinesis Streams コネクタは、バージョン 1.11 以前の Apache Flink には含まれていませんでした。以前のバージョンの Apache Flink で Apache Flink Kinesis コネクタを使用するには、アプリケーションが使用する Apache Flink のバージョンをダウンロード、コンパイル、インストールする必要があります。このコネクタは、アプリケーションのソースとして使用される Kinesis ストリームからデータを消費したり、アプリケーションの出力に使用される Kinesis ストリームにデータを書き込んだりするために使用されます。
注記
KPL バージョン 0.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 Windows で Flink をコンパイルする場合は、
-Drat.skip=true
パラメータを追加する必要があります。
Apache Flink 1.8.2 を使用したアプリケーションの構築
このセクションには、Apache Flink 1.8.2 で動作する Apache Flink アプリケーション用 Managed Service を構築するために使用するコンポーネントに関する情報が含まれています。
Apache Flink 用 Managed Service アプリケーションには、次のコンポーネントバージョンを使用してください。
コンポーネント | Version |
---|---|
Java | 1.8 (推奨) |
Apache Flink | 1.8.2 |
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) | 1.0.1 |
Apache Flink Flink Connectors の Managed Service (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 を使用する Apache Flink アプリケーション用 Managed Service の pom.xml
ファイルの例については、「Apache Flink 1.8.2 用 Managed Service 入門アプリケーション
Apache Flink アプリケーション用 Managed Service のアプリケーションコードを構築して使用する方法については、 アプリケーションの作成 を参照してください。
Apache Flink 1.6.2 を使用したアプリケーションの構築
このセクションには、Apache Flink 1.6.2 で動作する Apache Flink アプリケーション用 Managed Service を構築するために使用するコンポーネントに関する情報が含まれています。
Apache Flink 用 Managed Service アプリケーションには、次のコンポーネントバージョンを使用してください。
コンポーネント | Version |
---|---|
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 |
Apache Flink Flink Connectors の Managed Service (aws-kinesisanalytics-flink) | 1.0.1 |
Apache Maven | 3.1 |
Apache Beam | Apache Flink 1.6.2 ではサポートされていません。 |
注記
Apache Flink Runtime バージョン「1.0.1」用 Managed Service を使用する場合は、アプリケーションコードをコンパイルする際に -Dflink.version
パラメータを使用するのではなく、 pom.xml
ファイルに Apache Flink のバージョンを指定します。
Apache Flink バージョン 1.6.2 を使用する Apache Flink アプリケーション 用 Managed Service の「pom.xml
」ファイルの例については、「Apache Flink 1.6.2 用 Managed Service 入門アプリケーション
Apache Flink アプリケーション用 Managed Service のアプリケーションコードを構築して使用する方法については、 アプリケーションの作成 を参照してください。
アプリケーションのアップグレード
Amazon Managed Service for Apache Flink アプリケーションの Apache Flink バージョンをアップグレードするには、 AWS CLI、 AWS SDK AWS CloudFormation、または を使用して、インプレース Apache Flink バージョンアップグレード機能を使用します AWS Management Console。詳細については、「Apache Flink のインプレースバージョンアップグレードを使用する」を参照してください。
この機能は、 READY
または RUNNING
状態の Amazon Managed Service for Apache Flink で使用する既存のアプリケーションで使用できます。
Apache Flink 1.6.2 および 1.8.2 で使用可能なコネクタ
Apache Flink フレームワークには、さまざまなソースのデータにアクセスするためのコネクターが含まれています。
Apache Flink 1.6.2 フレームワークで使用可能なコネクタの情報については、「Apache Flink ドキュメント (1.6.2)
」の「Connectors (1.6.2) 」を参照してください。 Apache Flink 1.8.2 フレームワークで利用可能なコネクタの情報については、「Apache Flink ドキュメント(1.8.2)
」の「Connectors (1.8.2) 」を参照してください。
開始方法: Flink 1.13.2
このセクションでは、Managed Service for Apache Flink と の基本概念について説明します DataStream API。アプリケーションの作成とテストに使用できるオプションについて説明します。また、このガイドのチュートリアルを完了し、初めてアプリケーションを作成するのに必要なツールのインストール方法についても説明します。
トピック
Managed Service for Apache Flink アプリケーションのコンポーネント
Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。
Apache Flink アプリケーション用 Managed Serviceには、以下のコンポーネントがあります。
-
「ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。
-
「ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「ストリーミングデータソースを追加する」を参照してください。
-
「オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 演算子 を参照してください。
-
「シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンクを使用したデータの書き込み」を参照してください。
アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。
演習を完了するための前提条件
このガイドの手順を完了するには、以下が必要です。
-
Java 開発キット (JDK) バージョン 11
。JDK インストール場所を指すように JAVA_HOME
環境変数を設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、AWS アカウントを設定し、管理者ユーザーを作成するに進みます。
ステップ 1: アカウントを設定し AWS 、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS は、サインアッププロセスが完了した後に確認 E メールを送信します。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、 のセキュリティを確保し AWS アカウントのルートユーザー、 を有効にし AWS IAM Identity Center、管理ユーザーを作成して、日常的なタスクにルートユーザーを使用しないようにします。
のセキュリティ保護 AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 ユーザーガイド」の AWS アカウント 「ルートユーザー (コンソール) の仮想MFAデバイスの有効化」を参照してください。 IAM
管理アクセスを持つユーザーを作成する
-
IAM Identity Center を有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM Identity Center で、ユーザーに管理アクセスを許可します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、 AWS IAM Identity Center ユーザーガイドの「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E メールアドレスにURL送信されたサインインを使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」のAWS 「 アクセスポータルへのサインイン」を参照してください。
追加のユーザーにアクセス権を割り当てる
プログラマチックアクセス権を付与する
ユーザーが の AWS 外部とやり取りする場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。
ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。
プログラマチックアクセス権を必要とするユーザー | 目的 | 方法 |
---|---|---|
ワークフォースアイデンティティ (IAMアイデンティティセンターで管理されるユーザー) |
一時的な認証情報を使用して 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) を設定する
このステップでは、 Managed Service for Apache Flink で使用する AWS CLI をダウンロードして設定します。
注記
このガイドの使用開始実習では、操作を実行するために、アカウントの管理者の認証情報 (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 ユーザーガイド」の次のトピックを参照してください。
-
管理者ユーザーの名前付きプロファイルを
config
ファイルに追加します AWS CLI 。 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 全般のリファレンス。
注記
このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。
-
コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。
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 データストリームを 2 つ作成する
この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの 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
-
アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を
ExampleOutputStream
に変更して同じコマンドを実行します。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
サンプルレコードを入力ストリームに書き込む
このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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
ディレクトリに移動します。
アプリケーションコードに関して、以下の点に注意してください。
-
「Project Object Model (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 Maven コンパイラを使用してアプリケーション用の Java コードを作成します。Apache Maven と Java Development Kit (JDK) のインストールについては、「」を参照してください演習を完了するための前提条件を満たす。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コンパイルしてJARファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン 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/
。 -
[バケットを作成] を選択します。
-
[Bucket name (バケット名)] フィールドに
ka-app-code-
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。<username>
-
設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
-
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
-
[バケットを作成] を選択します。
-
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、これらのリソースを個別に作成します。
アプリケーションの作成と実行 (コンソール)
以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。
アプリケーションの作成
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
MyApplication ページで、停止 を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションプロパティ、モニタリング設定、アプリケーションの場所やファイル名などのアプリケーション設定を更新できますJAR。アプリケーションコードを更新する必要がある場合は、Amazon S3 バケットJARからアプリケーションを再ロードすることもできます。
MyApplication ページで、「 の設定」を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションの作成と実行 (AWS CLI)
このセクションでは、 AWS CLI を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。Managed Service for Apache Flink は kinesisanalyticsv2
AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (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「 ユーザーガイド」の「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、 に必要な認証情報SDKを、アプリケーションに関連付けられているサービス実行IAMロールの認証情報に自動的に設定します。追加の手順は必要ありません。
IAM ロールを作成する
このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取ってシンクストリームに書き込むために引き受けることができるIAMロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。
-
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
-
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
-
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
Managed Service for Apache Flink アプリケーションを作成する
-
次のJSONコードを という名前のファイルに保存します
create_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (
) を前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (username
) を、自分のアカウント ID に置き換えます。012345678901
{ "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::
012345678901
:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } } -
前述のリクエストを指定して
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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードし、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンを指定して UpdateApplication
を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の UpdateApplication
アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId
を現在のアプリケーションバージョンに更新します。ListApplications
または DescribeApplication
アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (<username>
) と、 Amazon Kinesis データストリームを 2 つ作成するセクションで選択したサフィックス。
{ "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 データストリームを削除する
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/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: 次のステップ
Apache Flink 用 Managed Serviceの基本的なアプリケーションを作成して実行したので、より高度な Apache Flink 用 Managed Serviceソリューションについては、以下のリソースを参照してください。
Amazon Kinesis 用 AWS ストリーミングデータソリューション
: Amazon Kinesis 用 AWS ストリーミングデータソリューションは、ストリーミングデータを簡単にキャプチャ、保存、処理、配信するために必要な AWS サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Managed Service for Apache Flink オプションは、 end-to-endシミュレートされたニューヨークのタクシーデータに対して分析オペレーションを実行する実際のアプリケーションを示すストリーミングETL例を提供します。このソリューションは、IAMロールやポリシー、 CloudWatch ダッシュボード、 CloudWatch アラームなど、必要なすべての AWS リソースを設定します。 AWS Amazon 向けストリーミングデータソリューションMSK
: Amazon 向け AWS ストリーミングデータソリューションは、プロデューサー、ストリーミングストレージ、コンシューマー、送信先を流れるデータを提供する AWS CloudFormation テンプレートMSKを提供します。 「Apache Flink と Apache Kafka によるクリックストリームラボ
」:ストリーミングストレージには Apache Kafka 用の Amazon マネージドストリーミングを使用し、ストリーム処理には Apache Flink アプリケーション向けの Apache Flink 用 Managed Serviceを使用する、クリックストリームのユースケースを対象としたエンドツーエンドラボです。 Amazon Managed Service for Apache Flink Workshop
: このワークショップでは、ストリーミングデータをほぼリアルタイムで取り込み、分析、視覚化するためのストリーミングアーキテクチャを構築 end-to-endします。あなたは、ニューヨーク市のあるタクシー会社の業務改善に着手しました。ニューヨーク市のタクシー車両のテレメトリデータをほぼリアルタイムで分析して、車両運用を最適化します。 Learn Flink: Hands On Training:
スケーラブルなストリーミング 、分析ETL、イベント駆動型のアプリケーションの記述を開始する、公式の入門 Apache Flink トレーニング。 注記
Apache Flink 用 Managed Serviceは、このトレーニングで使用されている Apache Flink バージョン (1.12) をサポートしていないことに注意してください。Flink Managed Service for Apache Flink で Flink 1.15.2 を使用できます。
開始方法: Flink 1.11.1 - 非推奨
注記
Apache Flink バージョン 1.6、1.8、および 1.11 は、Apache Flink コミュニティで 3 年以上サポートされていません。Amazon Managed Service for Apache Flink では、2024 年 11 月 5 日にこれらのバージョンを廃止する予定です。この日付以降、これらの 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 アプリケーションのコンポーネント
Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。
Apache Flink アプリケーション用 Managed Serviceには、以下のコンポーネントがあります。
-
「ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。
-
「ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「ストリーミングデータソースを追加する」を参照してください。
-
「オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 演算子 を参照してください。
-
「シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンクを使用したデータの書き込み」を参照してください。
アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。
演習を完了するための前提条件
このガイドの手順を完了するには、以下が必要です。
-
Java Development Kit (JDK) バージョン 11
。JDK インストール場所を指すように JAVA_HOME
環境変数を設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、AWS アカウントを設定し、管理者ユーザーを作成するに進みます。
ステップ 1: アカウントを設定し AWS 、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS は、サインアッププロセスが完了した後に確認 E メールを送信します。/ に移動し、マイアカウント を選択すると、いつでも現在のアカウントアクティビティを表示https://aws.amazon.com
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、 のセキュリティを確保し AWS アカウントのルートユーザー、 を有効にし AWS IAM Identity Center、管理ユーザーを作成して、日常的なタスクにルートユーザーを使用しないようにします。
のセキュリティ保護 AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 ユーザーガイド」の AWS アカウント 「ルートユーザー (コンソール) の仮想MFAデバイスの有効化」を参照してください。 IAM
管理アクセスを持つユーザーを作成する
-
IAM Identity Center を有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM Identity Center で、ユーザーに管理アクセスを許可します。
ID ソース IAM アイデンティティセンターディレクトリ として を使用するためのチュートリアルについては、 AWS IAM Identity Center ユーザーガイドの「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E メールアドレスにURL送信されたサインインを使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」のAWS 「 アクセスポータルにサインインする」を参照してください。
追加のユーザーにアクセス権を割り当てる
プログラマチックアクセス権を付与する
ユーザーが の AWS 外部とやり取りする場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。
ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。
プログラマチックアクセス権を必要とするユーザー | 目的 | 方法 |
---|---|---|
ワークフォースアイデンティティ (IAMアイデンティティセンターで管理されるユーザー) |
一時的な認証情報を使用して 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) をセットアップする
このステップでは、 Managed Service for Apache Flink で使用する AWS CLI をダウンロードして設定します。
注記
このガイドの使用開始実習では、操作を実行するために、アカウントの管理者の認証情報 (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 ユーザーガイド」の次のトピックを参照してください。
-
管理者ユーザーの名前付きプロファイルを
config
ファイルに追加します AWS CLI 。 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 全般のリファレンス。
注記
このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。
-
コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。
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 データストリームを 2 つ作成する
この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの 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
-
アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を
ExampleOutputStream
に変更して同じコマンドを実行します。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
サンプルレコードを入力ストリームに書き込む
このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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
ディレクトリに移動します。
アプリケーションコードに関して、以下の点に注意してください。
-
「Project Object Model (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 Maven コンパイラを使用してアプリケーション用の Java コードを作成します。Apache Maven と Java Development Kit (JDK) のインストールについては、「」を参照してください演習を完了するための前提条件を満たす。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コンパイルしてJARファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン 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/
。 -
[バケットを作成] を選択します。
-
[Bucket name (バケット名)] フィールドに
ka-app-code-
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。<username>
-
設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
-
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
-
[バケットを作成] を選択します。
-
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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
アプリケーションリソースへのアクセス のアクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Properties] の [Group ID] には、
ProducerConfigProperties
と入力します。 -
次のアプリケーションのプロパティと値を入力します。
グループ ID キー 値 ProducerConfigProperties
flink.inputstream.initpos
LATEST
ProducerConfigProperties
aws.region
us-west-2
ProducerConfigProperties
AggregationEnabled
false
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
MyApplication ページで、停止 を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションプロパティ、モニタリング設定、アプリケーションの場所またはファイル名などのアプリケーション設定を更新できますJAR。アプリケーションコードを更新する必要がある場合は、Amazon S3 バケットJARからアプリケーションを再ロードすることもできます。
MyApplication ページで、「 の設定」を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションの作成と実行 (AWS CLI)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成および実行します。 Managed Service for Apache Flink は kinesisanalyticsv2
AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成および操作します。
アクセス許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (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 ユーザーガイドの「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、 に必要な認証情報SDKを、アプリケーションに関連付けられているサービス実行IAMロールの認証情報に自動的に設定します。追加の手順は必要ありません。
IAM ロールを作成します。
このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取ってシンクストリームに書き込むために引き受けることができるIAMロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。
-
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
-
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
-
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
Managed Service for Apache Flink アプリケーションを作成する
-
次のJSONコードを という名前のファイルに保存します
create_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (
) を前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (username
) を、自分のアカウント ID に置き換えます。012345678901
{ "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_11", "ServiceExecutionRole": "arn:aws:iam::
012345678901
:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } } -
前述のリクエストを指定して
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 データストリームを 2 つ作成するセクションで選択したサフィックス。
{ "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: 次のステップ
Apache Flink 用 Managed Serviceの基本的なアプリケーションを作成して実行したので、より高度な Apache Flink 用 Managed Serviceソリューションについては、以下のリソースを参照してください。
Amazon Kinesis 用 AWS ストリーミングデータソリューション
: Amazon Kinesis 用 AWS ストリーミングデータソリューションは、ストリーミングデータを簡単にキャプチャ、保存、処理、配信するために必要な AWS サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Managed Service for Apache Flink オプションは、 end-to-endシミュレートされたニューヨークのタクシーデータに対して分析オペレーションを実行する実際のアプリケーションを示すストリーミングETL例を提供します。このソリューションは、IAMロールとポリシー、 CloudWatch ダッシュボード、 CloudWatch アラームなど、必要なすべての AWS リソースを設定します。 AWS Amazon 向けストリーミングデータソリューションMSK
: Amazon 向け AWS ストリーミングデータソリューションは、プロデューサー、ストリーミングストレージ、コンシューマー、送信先を流れるデータを提供する AWS CloudFormation テンプレートMSKを提供します。 「Apache Flink と Apache Kafka によるクリックストリームラボ
」:ストリーミングストレージには Apache Kafka 用の Amazon マネージドストリーミングを使用し、ストリーム処理には Apache Flink アプリケーション向けの Apache Flink 用 Managed Serviceを使用する、クリックストリームのユースケースを対象としたエンドツーエンドラボです。 Amazon Managed Service for Apache Flink Workshop
: このワークショップでは、ストリーミングデータをほぼリアルタイムで取り込み、分析、視覚化するためのストリーミングアーキテクチャを構築 end-to-endします。あなたは、ニューヨーク市のあるタクシー会社の業務改善に着手しました。ニューヨーク市のタクシー車両のテレメトリデータをほぼリアルタイムで分析して、車両運用を最適化します。 Learn Flink: Hands On Training:
スケーラブルなストリーミング 、分析ETL、イベント駆動型のアプリケーションの記述を開始する、公式の入門 Apache Flink トレーニング。 注記
Apache Flink 用 Managed Serviceは、このトレーニングで使用されている 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 バージョン 1.6、1.8、1.11 は、Apache Flink コミュニティで 3 年以上サポートされていません。Amazon Managed Service for Apache Flink では、2024 年 11 月 5 日にこれらのバージョンを廃止する予定です。この日付以降、これらの 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 アプリケーションのコンポーネント
Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。
Apache Flink アプリケーション用 Managed Serviceには、以下のコンポーネントがあります。
-
「ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。
-
「ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「ストリーミングデータソースを追加する」を参照してください。
-
「オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 演算子 を参照してください。
-
「シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンクを使用したデータの書き込み」を参照してください。
アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。
演習を完了するための前提条件
このガイドの手順を完了するには、以下が必要です。
-
Java 開発キット (JDK) バージョン 8
。JDK インストール場所を指すように JAVA_HOME
環境変数を設定します。 -
このチュートリアルで Apache Flink Kinesis コネクタを使用するには、Apache Flink をダウンロードしてインストールする必要があります。詳細については、 以前の Apache Flink バージョンで Apache Flink Kinesis Streams コネクタを使用する を参照してください。
-
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。
ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS は、サインアッププロセスが完了した後に確認 E メールを送信します。/ に移動し、マイアカウント を選択すると、いつでも現在のアカウントアクティビティを表示https://aws.amazon.com
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、 のセキュリティを確保し AWS アカウントのルートユーザー、 を有効にし AWS IAM Identity Center、管理ユーザーを作成して、日常的なタスクにルートユーザーを使用しないようにします。
のセキュリティ保護 AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 ユーザーガイド」の AWS アカウント 「ルートユーザー (コンソール) の仮想MFAデバイスの有効化」を参照してください。 IAM
管理アクセスを持つユーザーを作成する
-
IAM Identity Center を有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM Identity Center で、ユーザーに管理アクセスを許可します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、 AWS IAM Identity Center ユーザーガイドの「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E メールアドレスにURL送信されたサインインを使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」のAWS 「 アクセスポータルへのサインイン」を参照してください。
追加のユーザーにアクセス権を割り当てる
プログラマチックアクセス権を付与する
ユーザーが の AWS 外部とやり取りする場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。
ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。
プログラマチックアクセス権を必要とするユーザー | 目的 | 方法 |
---|---|---|
ワークフォースアイデンティティ (IAMアイデンティティセンターで管理されるユーザー) |
一時的な認証情報を使用して 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) を設定する
このステップでは、 Managed Service for Apache Flink で使用する AWS CLI をダウンロードして設定します。
注記
このガイドの使用開始実習では、操作を実行するために、アカウントの管理者の認証情報 (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 ユーザーガイド」の次のトピックを参照してください。
-
管理者ユーザーの名前付きプロファイルを
config
ファイルに追加します AWS CLI 。 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 リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用するリージョンに変更します。
-
コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。
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 データストリームを 2 つ作成する
この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの 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
-
アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を
ExampleOutputStream
に変更して同じコマンドを実行します。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
サンプルレコードを入力ストリームに書き込む
このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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
ディレクトリに移動します。
アプリケーションコードに関して、以下の点に注意してください。
-
「Project Object Model (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 Maven コンパイラを使用してアプリケーション用の Java コードを作成します。Apache Maven と Java Development Kit (JDK) のインストールについては、「」を参照してください演習を完了するための前提条件。
注記
「1.11 より前のバージョンの Apache Flink で Kinesis コネクタを使用するには、Apache Maven をダウンロード、ビルド、インストールする必要があります。」 詳細については、「以前の Apache Flink バージョンで Apache Flink Kinesis Streams コネクタを使用する」を参照してください。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コンパイルしてJARファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン 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/
。 -
[バケットを作成] を選択します。
-
[Bucket name (バケット名)] フィールドに
ka-app-code-
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。<username>
-
設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
-
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
-
[バケットを作成] を選択します。
-
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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
-
MyApplication ページで、 の実行 を選択します。アクションを確認します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションの停止
MyApplication ページで、停止 を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションプロパティ、モニタリング設定、アプリケーションの場所またはファイル名などのアプリケーション設定を更新できますJAR。アプリケーションコードを更新する必要がある場合は、Amazon S3 バケットJARからアプリケーションを再ロードすることもできます。
MyApplication ページで、「 の設定」を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションの作成と実行 (AWS CLI)
このセクションでは、 AWS CLI を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。Managed Service for Apache Flink は kinesisanalyticsv2
AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成して操作します。
アクセス許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (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「 ユーザーガイド」の「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、 に必要な認証情報SDKを、アプリケーションに関連付けられているサービス実行IAMロールの認証情報に自動的に設定します。追加の手順は必要ありません。
IAM ロールを作成する
このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取ってシンクストリームに書き込むために引き受けることができるIAMロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。
-
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
-
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
-
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
Managed Service for Apache Flink アプリケーションを作成する
-
次のJSONコードを という名前のファイルに保存します
create_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (
) を前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (username
) を、自分のアカウント ID に置き換えます。012345678901
{ "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_8", "ServiceExecutionRole": "arn:aws:iam::
012345678901
:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } } -
前述のリクエストを指定して
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 データストリームを 2 つ作成するセクションで選択したサフィックス。
{ "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 データストリームを削除する
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/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 バージョン 1.6、1.8、および 1.11 は、Apache Flink コミュニティで 3 年以上サポートされていません。これらのバージョンは、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 アプリケーションのコンポーネント
Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。
Apache Flink 用 Managed Service のコンポーネントは次のとおりです。
-
「ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。
-
「ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「ストリーミングデータソースを追加する」を参照してください。
-
「オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 演算子 を参照してください。
-
「シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンクを使用したデータの書き込み」を参照してください。
アプリケーションを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。
演習を完了するための前提条件
このガイドの手順を完了するには、以下が必要です。
-
Java 開発キット
(JDK) バージョン 8。JDK インストール場所を指すように JAVA_HOME
環境変数を設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。
ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS は、サインアッププロセスが完了した後に確認 E メールを送信します。/ に移動し、マイアカウント を選択すると、いつでも現在のアカウントアクティビティを表示https://aws.amazon.com
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、 のセキュリティを確保し AWS アカウントのルートユーザー、 を有効にして管理ユーザーを作成し AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないようにします。
のセキュリティ保護 AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 ユーザーガイド」の AWS アカウント 「ルートユーザー (コンソール) の仮想MFAデバイスの有効化」を参照してください。 IAM
管理アクセスを持つユーザーを作成する
-
IAM Identity Center を有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM Identity Center で、ユーザーに管理アクセスを許可します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、 AWS IAM Identity Center ユーザーガイドの「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E メールアドレスにURL送信されたサインインを使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」のAWS 「 アクセスポータルへのサインイン」を参照してください。
追加のユーザーにアクセス権を割り当てる
プログラマチックアクセス権を付与する
ユーザーが の AWS 外部とやり取りする場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。
ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。
プログラマチックアクセス権を必要とするユーザー | 目的 | 方法 |
---|---|---|
ワークフォースアイデンティティ (IAMアイデンティティセンターで管理されるユーザー) |
一時的な認証情報を使用して 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) を設定する
このステップでは、Managed Service for Apache Flink で使用する AWS CLI をダウンロードして設定します。
注記
このガイドの使用開始実習では、操作を実行するために、アカウントの管理者の認証情報 (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 ユーザーガイド」の次のトピックを参照してください。
-
管理者ユーザーの名前付きプロファイルを
config
ファイルに追加します AWS CLI 。 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 全般のリファレンス。
注記
このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。
-
コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。
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 データストリームを 2 つ作成する
この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの 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
-
アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を
ExampleOutputStream
に変更して同じコマンドを実行します。$ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
サンプルレコードを入力ストリームに書き込む
このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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
ディレクトリに移動します。
アプリケーションコードに関して、以下の点に注意してください。
「Project Object Model (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 Maven コンパイラを使用してアプリケーション用の Java コードを作成します。Apache Maven と Java Development Kit (JDK) のインストールについては、「」を参照してください演習を完了するための前提条件。
注記
1.11 より前のバージョンの Apache Flink で Kinesis コネクタを使用するには、コネクタのソース コードをダウンロードし、Apache Flink ドキュメント
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コンパイルしてJARファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
コマンドライン Maven ツールを使用します。JAR ファイルを含むディレクトリで次のコマンドを実行して、
pom.xml
ファイルを作成します。mvn package
注記
-DFlink.version パラメーターは、Apache Flink ランタイムのマネージドサービスバージョン 1.0.1 には必要ありません。バージョン 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/
。 -
[バケットを作成] を選択します。
-
[Bucket name (バケット名)] フィールドに
ka-app-code-
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。<username>
-
設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
-
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
-
[バケットを作成] を選択します。
-
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] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.8.2 または 1.6.2 を使用します。
バージョンプルダウンを「Apache Flink 1.6」に変更します。
-
-
アクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
-
MyApplication ページで、実行 を選択します。アクションを確認します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションの停止
MyApplication ページで、停止 を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションプロパティ、モニタリング設定、アプリケーションの場所やファイル名などのアプリケーション設定を更新できますJAR。アプリケーションコードを更新する必要がある場合は、Amazon S3 バケットJARからアプリケーションを再ロードすることもできます。
MyApplication ページで、「 の設定」を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションの作成と実行 (AWS CLI)
このセクションでは、 AWS CLI を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。Managed Service for Apache Flink は kinesisanalyticsv2
AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (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 ユーザーガイドの「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、 に必要な認証情報SDKを、アプリケーションに関連付けられているサービス実行IAMロールの認証情報に自動的に設定します。追加の手順は必要ありません。
IAM ロールを作成する
このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取ってシンクストリームに書き込むために引き受けることができるIAMロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。
-
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
-
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
-
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
Managed Service for Apache Flink アプリケーションを作成する
-
次のJSONコードを という名前のファイルに保存します
create_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (
) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (username
) を、自分のアカウント ID に置き換えます。012345678901
{ "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_6", "ServiceExecutionRole": "arn:aws:iam::
012345678901
:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } } -
前述のリクエストを指定して
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 アクションを使用します。
を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードしUpdateApplication
、同じ Amazon S3 バケットとオブジェクト名を指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の UpdateApplication
アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId
を現在のアプリケーションバージョンに更新します。ListApplications
または DescribeApplication
アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (<username>
) と、 Amazon Kinesis データストリームを 2 つ作成するセクションで選択したサフィックス。
{ "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-stepApache Flink アプリケーション用の Managed Service を作成し、結果をテストするのに役立つサンプルコードと手順が含まれています。
例に進む前に、以下に目を通しておくことをお勧めします。
注記
これらの例は、米国西部 (オレゴン) リージョン (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 を作成する前に、以下の依存リソースを作成します。
2 つの Kinesis Data Streams (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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 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 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 では、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
アプリケーションリソースへのアクセス のアクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
-
MyApplication ページで、実行 を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
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 を作成する前に、以下の依存リソースを作成します。
2 つの Kinesis Data Streams (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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 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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
アプリケーションリソースへのアクセス のアクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
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 を取得できます。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
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 バケットへの書き込み
この練習では、Kinesis データストリーム をソースとして、Amazon S3 バケットをシンクとして、Managed Service for Apache Flink を作成します。シンクを使用すると、Amazon S3 コンソール内のアプリケーションの出力を検証できます。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で の使用 DataStream APIを開始する演習を完了してください。
このトピックには、次のセクションが含まれています。
依存リソースを作成する
このエクササイズで Apache Flink 用 Managed Service を作成する前に、以下の依存リソースを作成します。
-
Kinesis データストリーム(
ExampleInputStream
) -
アプリケーションのコードと出力を格納する Amazon S3 バケット (
ka-app-code-
)<username>
注記
Managed Service for Apache Flinkでサーバー側の暗号化が有効になる場合、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 バケットで 2 つのフォルダ (<username>
code
とdata
) を作成します。
アプリケーションは、次の CloudWatch リソースがまだ存在しない場合に作成します。
-
/AWS/KinesisAnalytics-java/MyApplication
という名前のロググループ。 -
kinesis-analytics-log-stream
というログストリーム。
サンプルレコードを入力ストリームに書き込む
このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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 org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
-
アプリケーションは Apache Flink S3 シンクを使用して Amazon S3 に書き込みます。
シンクはタンブリングウィンドウでメッセージを読み取り、メッセージを S3 バケットオブジェクトにエンコードし、エンコードされたオブジェクトを S3 シンクに送信します。次のコードは、Amazon S3 に送信するオブジェクトをエンコードします。
input.map(value -> { // Parse the JSON JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class); return new Tuple2<>(jsonNode.get("ticker").toString(), 1); }).returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v -> v.f0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.minutes(1))) .sum(1) // Count the appearances by ticker per partition .map(value -> value.f0 + " count: " + value.f1.toString() + "\n") .addSink(createS3SinkFromStaticConfig());
注記
アプリケーションは Flink StreamingFileSink
オブジェクトを使用して Amazon S3 に書き込みます。の詳細についてはStreamingFileSink
、「Apache Flink ドキュメント
アプリケーションコードを変更する
このセクションでは、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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[ランタイム] には、[Apache Flink] を選択します。
-
バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。
-
-
アクセス許可 で、IAMロール の作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
code/aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
アプリケーションリソースへのアクセス のアクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch ログ記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
-
MyApplication ページで、実行 を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションの出力を確認する
Amazon S3 コンソールで、S3 バケット内のデータフォルダを開きます。
数分後、アプリケーションからの集約データを含むオブジェクトが表示されます。
注記
Flink では、集約はデフォルトで有効になっています。 以下を無効にするには次のコマンドを使用します。
sink.producer.aggregation-enabled' = 'false'
オプション: ソースとシンクをカスタマイズする
このセクションでは、ソースオブジェクトおよびシンクオブジェクトの設定をカスタマイズします。
注記
以下のセクションで説明するコードセクションを変更した後、次の操作を行ってアプリケーションコードをリロードします。
-
このアプリケーションコードをコンパイルするセクションの手順を繰り返して、更新したアプリケーションコードをコンパイルします。
-
このApache Flink ストリーミング Java コードをアップロードするセクションの手順を繰り返して、更新したアプリケーションコードをアップロードします。
-
コンソールのアプリケーションページで 設定 を選択し、更新 を選択して、更新したアプリケーションコードをアプリケーションにリロードします。
このセクションには、次の項目が含まれています。
データパーティショニングを設定する
このセクションでは、ストリーミングファイルシンクが S3 バケットに作成するフォルダーの名前を設定します。ストリーミングファイルシンクにバケットアサイナーを追加します。
S3 バケットで作成されたフォルダー名をカスタマイズするには、次の操作を行ってください。
-
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 Streams コンシューマは、デフォルトで 1 秒あたり 5 回にソースストリームから読み取りを行います。ストリームからデータを読み取るクライアントが複数ある場合や、アプリケーションがレコードの読み取りを再試行する必要がある場合は、この頻度により問題が発生します。コンシューマの読み取り頻度を設定することで、このような問題を回避することができます。
Kinesis コンシューマの読み取り頻度を設定するには、SHARD_GETRECORDS_INTERVAL_MILLIS
設定を行います。
次のコード例では、SHARD_GETRECORDS_INTERVAL_MILLIS
設定を 1 秒に設定しています。
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.SHARD_GETRECORDS_INTERVAL_MILLIS, "1000");
書き込みバッファリングを設定する
このセクションでは、書き込み頻度やそのほかのシンクの設定を行います。
デフォルトでは、アプリケーションは 1 分ごとに宛先バケットに書き込みます。この間隔やその他の設定は、DefaultRollingPolicy
オブジェクトを設定することで変更できます。
注記
Apache Flink ストリーミングファイルシンクは、アプリケーションがチェックポイントを作成するたびに出力バケットに書き込みます。デフォルトでは、アプリケーションは 1 分ごとにチェックポイントを作成します。S3 シンクの書き込み間隔を延長するには、チェックポイント間隔を延長する必要があります。
DefaultRollingPolicy
オブジェクトを設定するには、次の操作を行います。
-
アプリケーションの
CheckpointInterval
設定を増やしてください。 UpdateApplication アクションの次の入力は、チェックポイント間隔を 10 分に設定します。{ "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "CheckpointConfigurationUpdate": { "ConfigurationTypeUpdate" : "CUSTOM", "CheckpointIntervalUpdate": 600000 } } }, "ApplicationName": "MyApplication", "CurrentApplicationVersionId":
5
}上記のコードを使用するには、現在のアプリケーションバージョンを指定します。ListApplications アクションを使用してアプリケーションバージョンを取得できます。
-
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クラスター内の 1 つのトピックから 内の別のトピックにデータをレプリケートする VPC
注記
現在の例については、「」を参照してくださいManaged Service for Apache Flink アプリケーションの作成と使用の例。
次のチュートリアルでは、Amazon MSKクラスターと 2 つのトピックVPCを使用して Amazon を作成する方法と、ある Amazon MSKトピックから読み取り、別のトピックに書き込む Managed Service for Apache Flink アプリケーションを作成する方法を示します。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で の使用 DataStream APIを開始する演習を完了してください。
このチュートリアルには、次のセクションが含まれています。
Amazon MSKクラスターVPCを使用して 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 バケットに保存され、アプリケーションからアクセスできるようになります。
アプリケーションの作成
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/flink で開きます。
-
Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。
-
「Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[ランタイム] には、[Apache Flink 1.15.2] を選択します。
-
-
アクセス許可 については、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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 1,000 アプリケーションコードは、上記のアプリケーションプロパティを読み取り、 と Amazon MSKクラスターとの対話に使用されるソースVPCとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティを使用する」を参照してください。
-
スナップショットで 無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
Virtual Private Cloud (VPC) セクションVPCで、アプリケーションに関連付ける を選択します。アプリケーションがVPCリソースへのアクセスVPCに使用する に関連付けられたサブネットとセキュリティグループを選択します。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションをテストする
このセクションでは、レコードをソーストピックに書き込みます。アプリケーションはソーストピックからレコードを読み取り、宛先トピックに書き込みます。アプリケーションが動作していることを確認するには、ソーストピックにレコードを書き込み、宛先トピックからレコードを読み取ります。
トピックからレコードを書き込んで読み取るには、「Amazon チュートリアルの使用開始」の「ステップ 6: データの生成と消費」のステップに従います。 MSK
ターゲットトピックから読み込むには、クラスターへの 二番目の接続で、ソーストピックの代わりに宛先トピック名を使用してください。
bin/kafka-console-consumer.sh --bootstrap-server
BootstrapBrokerString
--consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
宛先トピックにレコードが表示されない場合は、Managed Service for Apache Flink のトラブルシューティングトピックののリソースにアクセスできない VPCセクションを参照してください。
例: Kinesis データストリームを持つEFOコンシューマーを使用する
注記
現在の例については、「」を参照してくださいManaged Service for Apache Flink アプリケーションの作成と使用の例。
この演習では、拡張ファンアウト (EFO) コンシューマーを使用して Kinesis データストリームから読み取る Managed Service for Apache Flink アプリケーションを作成します。Kinesis コンシューマーが を使用する場合EFO、Kinesis Data Streams サービスは、コンシューマーにストリームの固定帯域幅をストリームから読み取る他のコンシューマーと共有させるのではなく、独自の専用帯域幅を提供します。
を Kinesis コンシューマーEFOで使用する方法の詳細については、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 を作成する前に、以下の依存リソースを作成します。
2 つの Kinesis Data Streams (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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
ファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。
EFO コンシューマーを有効にするには、Kinesis コンシューマーで次のパラメータを設定します。
RECORD_PUBLISHER_TYPE: アプリケーションがEFOコンシューマーを使用して Kinesis Data Stream データにアクセスするEFOように、このパラメータを に設定します。
EFO_CONSUMER_NAME: このパラメータを、このストリームのコンシューマー間で一意の文字列値に設定します。同じ Kinesis Data Stream でコンシューマー名を再利用すると、その名前を使用していた以前のコンシューマーは終了します。
次のコード例は、コンシューマー設定プロパティに値を割り当てて、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 アプリケーションを作成して実行する
以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。
アプリケーションの作成
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/flink で開く
-
Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。
-
「Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[ランタイム] には、[Apache Flink] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 については、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して 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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
また、データストリームの拡張ファンアウトタブの Kinesis Data Streams コンソールで、コンシューマーの名前 () を確認することもできますbasic-efo-flink-app。
AWS リソースをクリーンアップする
このセクションでは、efo Window チュートリアルで作成された AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/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 アプリケーションの作成と使用の例。
この演習では、ソースとして Kinesis データストリーム、シンクとして Firehose ストリームを持つ Managed Service for Apache Flink アプリケーションを作成します。シンクを使用すると、Amazon S3 バケット内のアプリケーションの出力を検証できます。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で の使用 DataStream APIを開始する演習を完了してください。
このセクションには、以下のステップが含まれています。
依存リソースを作成する
このエクササイズで Apache Flink 用 Managed Service を作成する前に、以下の依存リソースを作成します。
A Kinesis data stream (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
-
次の内容で、
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 バージョンで Apache Flink Kinesis Streams コネクタを使用する」を参照してください。
次のコマンドを使用して、アプリケーションをコンパイルします。
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、これらのリソースを個別に作成します。
アプリケーションの作成と実行 (コンソール)
以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。
アプリケーションの作成
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/flink で開く
-
Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。
-
「Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[Description (説明)] に
My java test app
と入力します。 -
[ランタイム] には、[Apache Flink] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 で、IAMロール の作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用してアプリケーションを作成する場合、アプリケーション用に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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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 ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
java-getting-started-1.0.jar
と入力します。
-
-
アプリケーションリソースへのアクセス のアクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch ログ記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
MyApplication ページで、停止 を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションプロパティ、モニタリング設定、アプリケーションの場所やファイル名などのアプリケーション設定を更新できますJAR。
MyApplication ページで、「 の設定」を選択します。アプリケーションの設定を更新し、[更新] を選択します。
注記
コンソールでアプリケーションのコードを更新するには、 のオブジェクト名を変更するかJAR、別の S3 バケットを使用するか、 アプリケーションコードの更新セクションで説明されている AWS CLI ように を使用する必要があります。ファイル名またはバケットが変更されない場合、Configure ページで アップデート を選択してもアプリケーションコードはリロードされません。
アプリケーションの作成と実行 (AWS CLI)
このセクションでは、 AWS CLI を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。
許可ポリシーを作成する
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。置換 username
アプリケーションコードを保存する Amazon S3 バケットの作成に使用するユーザー名。Amazon リソースネーム (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「 ユーザーガイド」の「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
注記
その他のアマゾンサービスにアクセスするには、 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ロールには 2 つのポリシーがアタッチされています。信頼ポリシーでは、Managed Service for Apache Flink のロールを引き受けるアクセス許可を Apache Flink に付与します。権限ポリシーは、 Managed Service for Apache Flinkがロールを引き受けた後に実行できる内容を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。
-
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
-
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
-
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
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 ログを使用する方法については、「」を参照してください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アプリケーションを作成する方法を示しています。この例では、1 つのアカウントをソース Kinesis ストリームに使用し、もう 1 つのアカウントを Managed Service for Apache Flinkとsink Kinesis streamに使用します。
このトピックには、次のセクションが含まれています。
前提条件
このチュートリアルでは、「Getting Started」の例を変更して、別のアカウントの Kinesis ストリームからデータを読み取ります。続行する前にチュートリアル: Managed Service for Apache Flink で の使用 DataStream APIを開始するチュートリアルを完了してください。
このチュートリアルを完了するには、2 つの AWS アカウントが必要です。1 つはソースストリーム用、もう 1 つはアプリケーションとシンクストリーム用です。アプリケーションとシンクストリームの入門チュートリアルに使用した AWS アカウントを使用します。ソースストリームには別の AWS アカウントを使用してください。
セットアップ
名前付きプロファイルを使用して 2 つの AWS アカウントにアクセスします。 AWS 認証情報と設定ファイルを変更して、2 つのアカウントのリージョンと接続情報を含む 2 つのプロファイルを含めます。
次の認証情報ファイルの例には、ka-source-stream-account-profile
とka-sink-stream-account-profile
2つの名前付きプロファイルが含まれています。シンクストリームアカウントには、入門チュートリアルで使用したアカウントを使用してください。
[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
を使用しません。プロファイルを使用して 2 つの異なる AWS アカウントにアクセスする方法の例として含まれています。
で名前付きプロファイルを使用する方法の詳細については AWS CLI、 AWS Command Line Interfaceドキュメントの「名前付きプロファイル」を参照してください。
ソース Kinesis ストリームを作成する
このセクションでは、ソースアカウントに Kinesis ストリームを作成します。
次のコマンドを入力して、アプリケーションの入力に使用されたKinesis ストリームを作成します。この--profile
パラメーターは、使用するアカウントプロファイルを指定することに注意してください。
$ aws kinesis create-stream \ --stream-name SourceAccountExampleInputStream \ --shard-count 1 \ --profile ka-source-stream-account-profile
IAM ロールとポリシーの作成と更新
AWS アカウント間でオブジェクトへのアクセスを許可するには、ソースアカウントにIAMロールとポリシーを作成します。次に、シンクアカウントのIAMポリシーを変更します。IAM ロールとポリシーの作成の詳細については、 AWS Identity and Access Management ユーザーガイドの以下のトピックを参照してください。
シンクアカウントのロールとポリシー
入門チュートリアルから
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 リソースネーム () を書き留めますARN。これは次のセクションで必要になります。ロールARNは次のようになります。arn:aws:iam::
SINK012345678
:role/service-role/kinesis-analytics-MyApplication-us-west-2
ソースアカウントのロールとポリシー
KA-Source-Stream-Policy
というソースアカウントにポリシーを作成します。ポリシーJSONには以下を使用します。サンプルアカウント番号をソースアカウントのアカウント番号に置き換えます。{ "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
という名前のソースアカウントでロールを作成します。Managed Flinkユースケースを使用してロールを作成するには、次の手順を実行します。IAM マネジメントコンソールで、ロールの作成 を選択します。
[Create role] (ロールの作成) ページで、AWS [AWS Service] (AWS サービス) を選択します。サービスリストで Kinesisを選択します。
ユースケースの選択 セクションで、Managed Service for Apache Flinkを選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
次の手順を実行して、前のステップで作成した
KA-Source-Stream-Policy
許可ポリシーを追加します。[Next: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 (
) とシンクアカウント 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 scriptを更新します。
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、アプリケーションはここで
... // 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 クライアントTLSを Kafka クラスターに安全に接続するには、Kafka クライアント (例: Flink アプリケーションなど) は、Kafka クラスターのサーバー証明書 (発行 CA からルートレベル CA まで) によって提供される完全な信頼チェーンを信頼する必要があります。カスタムトラストストアの例として、相互 TLS (MTLS) 認証が有効になっている Amazon MSKクラスターを使用します。これは、MSKクラスターノードが AWS Certificate Manager Private Certificate Authority (ACMPrivate CA) によって発行されたサーバー証明書を使用していることを意味します。この証明書は、アカウントとリージョンにプライベートであるため、Flink アプリケーションを実行する Java 仮想マシン (JVM) のデフォルトの信頼ストアでは信頼されません。
注記
-
キーストアは、検証のためにアプリケーションがサーバーまたはクライアントの両方に提示する必要があるプライベートキーと ID 証明書を保存するために使用されます。
-
信頼ストアは、サーバーによってSSL接続で提示された証明書を検証する認証機関 (CA) からの証明書を保存するために使用されます。
このチュートリアルの技術は、Managed Service for Apache Flinkアプリケーションと、次のようなその他の Apache Kafka ソースとのやり取りにも使用されます。
でホストされるカスタム Apache Kafka クラスター AWS (Amazon EC2
または Amazon EKS ) でホストされる Confluent Kafka
クラスター AWS AWS Direct Connect
または 経由でアクセスするオンプレミス Kafka クラスター VPN
このチュートリアルには、次のセクションが含まれています。
Amazon MSKクラスターVPCで を作成する
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 Developer Guideでクライアント認証チュートリアルに従ってください。
アプリケーションコードを作成する
このセクションでは、アプリケーション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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink を作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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 は「変更してください」です。デフォルト証明書を使用している場合は、この値を変更する必要はありません。
グループの追加をもう一度選択します。以下のプロパティを入力します。
グループ 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 1,000 アプリケーションコードは、上記のアプリケーションプロパティを読み取り、 と Amazon MSKクラスターとの対話に使用されるソースVPCとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティを使用する」を参照してください。
-
スナップショットで 無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
Virtual Private Cloud (VPC) セクションVPCで、アプリケーションに関連付ける を選択します。アプリケーションがVPCリソースへのアクセスVPCに使用する に関連付けられたサブネットとセキュリティグループを選択します。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションをテストする
このセクションでは、レコードをソーストピックに書き込みます。アプリケーションはソーストピックからレコードを読み取り、宛先トピックに書き込みます。アプリケーションが動作していることを確認するには、ソーストピックにレコードを書き込み、宛先トピックからレコードを読み取ります。
トピックからレコードを書き込んで読み込むには、「Amazon チュートリアルの使用開始」のステップ 6: データの生成と消費「」のステップに従います。 MSK
ターゲットトピックから読み込むには、クラスターへの 二番目の接続で、ソーストピックの代わりに宛先トピック名を使用してください。
bin/kafka-console-consumer.sh --bootstrap-server
BootstrapBrokerString
--consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
宛先トピックにレコードが表示されない場合は、Managed Service for Apache Flink のトラブルシューティングトピックののリソースにアクセスできない VPCセクションを参照してください。
Python の例
次の例は、Apache Flink テーブル で Python を使用してアプリケーションを作成する方法を示していますAPI。
例: Python でのタンブリングウィンドウの作成
注記
現在の例については、「」を参照してくださいManaged Service for Apache Flink アプリケーションの作成と使用の例。
この演習では、タンブリングウィンドウを使用してデータを集約する Python Managed Service for Apache Flinkを作成します。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で Python の使用を開始する演習を完了してください。
このトピックには、次のセクションが含まれています。
依存リソースを作成する
この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。
2 つの Kinesis Data Streams (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
注記
このセクションの 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] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 で、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集して、Kinesis データストリームにアクセスするアクセス許可を追加します。
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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" }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
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 アプリケーションの作成と使用の例。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で Python の使用を開始する演習を完了してください。
このトピックには、次のセクションが含まれています。
依存リソースを作成する
この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。
2 つの Kinesis Data Streams (
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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
注記
このセクションの 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] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 については、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch ログ記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集して、Kinesis データストリームにアクセスするアクセス許可を追加します。
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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" }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
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 アプリケーションの作成と使用の例。
この演習では、Amazon Simple Storage Service シンクにデータをストリーミングするPython Managed Service for Apache Flinkアプリケーションを作成します。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で Python の使用を開始する演習を完了してください。
このトピックには、次のセクションが含まれています。
依存リソースを作成する
この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。
A Kinesis data stream (
ExampleInputStream
)アプリケーションのコードと出力を格納する Amazon S3 バケット (
ka-app-code-
)<username>
注記
Managed Service for Apache Flinkでサーバー側の暗号化が有効になる場合、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 スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。
注記
このセクションでは AWS SDK for Python (Boto)
注記
このセクションの 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] を選択します。
注記
Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。
バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。
-
-
アクセス許可 については、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch ログ記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink はロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集して、Kinesis データストリームにアクセスするアクセス許可を追加します。
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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>/*" ] }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
Managed Service for Apache Flink メトリクスを CloudWatch コンソールで確認し、アプリケーションが動作していることを確認します。
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 アプリケーションの作成と使用の例。
注記
バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションは、任意の Scala バージョンAPIから Java を使用できるようになりました。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この演習では、Scala 3.2.0 と Flink の Java を使用するシンプルなストリーミングアプリケーションを作成します DataStream API。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用して集約し、結果を出力Kinesisストリームに書き込みます。
注記
この練習に必要な前提条件を設定するには、まずGetting Started (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 Streaming Scala Code のアップロード
このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。
で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/
。 [バケットを作成] を選択します。
[Bucket name (バケット名)] フィールドに
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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスを選択します。
-
[Update] (更新) を選択します。
注記
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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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" } ] }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
アプリケーションを停止するには、MyApplicationページで 停止 を選択します。アクションを確認します。
アプリケーションの作成と実行 (CLI)
このセクションでは、 AWS Command Line Interface を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARNs) のアカウント ID をアカウント ID (012345678901)
に置き換えます。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ロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。
[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。
[ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
アプリケーションの作成
次のJSONコードを という名前のファイルに保存しますcreate_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。には、前のセクションで作成したIAMユーザーロールを含めるServiceExecutionRole
必要があります。
"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 アプリケーションの作成と使用の例。
注記
バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションは、任意の Scala バージョンAPIから Java を使用できるようになりました。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この演習では、Scala 3.2.0 と Flink の Java を使用するシンプルなストリーミングアプリケーションを作成します DataStream API。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用して集約し、結果を出力Kinesisストリームに書き込みます。
注記
この練習に必要な前提条件を設定するには、まずGetting Started (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 Streaming Scala Code のアップロード
このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。
で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/
。 [バケットを作成] を選択します。
[Bucket name (バケット名)] フィールドに
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
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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" } ] }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
アプリケーションを停止するには、MyApplicationページで 停止 を選択します。アクションを確認します。
アプリケーションの作成と実行 (CLI)
このセクションでは、 AWS Command Line Interface を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARNs) のアカウント 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" } ] }
アクセス許可ポリシーを作成する手順については step-by-step、IAM「 ユーザーガイド」の「チュートリアル: 最初のカスタマーマネージドポリシーの作成とアタッチ」を参照してください。
IAM ロールを作成する
このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取ってシンクストリームに書き込むために引き受けることができるIAMロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。
[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。
[ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
アプリケーションの作成
次のJSONコードを という名前のファイルに保存しますcreate_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント 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" } ] }
次のリクエスト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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードし、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンを指定して UpdateApplication
を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の 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 アプリケーションを削除する
Managed Service for Apache Flink コンソールを https://console.aws.amazon.com/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 アプリケーションの作成と使用の例。
注記
バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションは、任意の Scala バージョンAPIから Java を使用できるようになりました。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この演習では、Scala 3.2.0 と Flink の Java を使用するシンプルなストリーミングアプリケーションを作成します DataStream API。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用してデータを集約し、結果を S3 に書き込みます。
注記
この練習に必要な前提条件を設定するには、まずGetting Started (Scala) の練習を完了してください。Amazon S3 バケット ka-app-code-<username> data/
に追加フォルダを作成するだけで済みます。
このトピックには、次のセクションが含まれています。
アプリケーションコードをダウンロードして調べる
この例の 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 Streaming Scala Code のアップロード
このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。
で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/
。 [バケットを作成] を選択します。
[Bucket name (バケット名)] フィールドに
ka-app-code-<username>
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
[バケットを作成] を選択します。
ka-app-code-<username>
バケットを選択し、アップロード を選択します。-
ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した
s3-sink-scala-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-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[Description (説明)] に
My java test app
と入力します。 -
[ランタイム] には、[Apache Flink] を選択します。
-
バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。
-
-
アクセス許可 については、IAMロールの作成/更新
kinesis-analytics-MyApplication-us-west-2
を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Managed Service for Apache Flink アプリケーションを作成する場合、アプリケーション用にIAMロールとポリシーを作成するオプションがあります。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらのIAMリソースには、アプリケーション名とリージョンを使用して次のように名前が付けられます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
MyApplication ページで、「 の設定」を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[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 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
CloudWatch をログに記録するには、有効化チェックボックスを選択します。
-
[Update] (更新) を選択します。
注記
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/
。 -
[Policies] (ポリシー) を選択します。前のセクションでコンソールによって作成された
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" } ] }
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションの停止
アプリケーションを停止するには、MyApplicationページで 停止 を選択します。アクションを確認します。
アプリケーションの作成と実行 (CLI)
このセクションでは、 AWS Command Line Interface を使用して Managed Service for Apache Flink アプリケーションを作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらのIAMリソースを作成しない場合、アプリケーションはデータとログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、ポリシーをIAMロールにアタッチします (次のセクションで作成します)。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARNs) のアカウント ID をアカウント ID (012345678901)
に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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ロールを作成します。
Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。これらのアクセス許可は、IAMロールを介して付与します。各IAMロールには 2 つのポリシーがアタッチされています。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。
前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。
IAM ロールを作成するには
でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。
[信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。
[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。
[ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。
[Next: Permissions] (次へ: アクセス許可) を選択します。
[アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。
[Create role (ロールの作成)] ページで、ロールの名前に
MF-stream-rw-role
を入力します。[ロールの作成] を選択します。これで、 という名前の新しいIAMロールが作成されました
MF-stream-rw-role
。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールARNの を書き留めます。
ロールを作成する手順については step-by-step、 IAM ユーザーガイドのIAM「ロールの作成 (コンソール)」を参照してください。
アプリケーションの作成
次のJSONコードを という名前のファイルに保存しますcreate_request.json
。サンプルロールを、以前に作成したロールARNの ARNに置き換えます。バケットARNサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。
{ "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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードし、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンを指定して UpdateApplication
を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の 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 ロググループを選択します。
[ロググループの削除]を選択し、削除を確認してください。