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 バージョン用の新しいアプリケーションを作成することはできません。現時点では、既存のアプリケーションの実行を続行できます。
中国リージョンと を除くすべてのリージョンでは、2025 年 2 月 24 AWS GovCloud (US) Regions日以降、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.13 は、Apache Flink コミュニティで 3 年以上サポートされていません。Amazon Managed Service for Apache Flink では、2025 年 10 月 16 日にこのバージョンのサポートを終了する予定です。この日以降、Amazon Managed Service for Apache Flink で Apache Flink バージョン 1.13 を使用してアプリケーションを作成、起動、実行できなくなります。
Managed Service for Apache Flink のインプレースバージョンアップグレード機能を使用して、アプリケーションをステートリーにアップグレードできます。詳細については、「Apache Flink のインプレースバージョンアップグレードを使用する」を参照してください。
バージョン 1.15.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
環境変数が JRE ではなく JDK を指していることを確認してください。次のコマンドで 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 アプリケーションには、次のコンポーネントバージョンを使用してください。
コンポーネント | バージョン |
---|---|
Java | 1.8 (推奨) |
Apache Flink | 1.8.2 |
Flink Runtime 向け Managed Service for Apache Flink (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 アプリケーションには、次のコンポーネントバージョンを使用してください。
コンポーネント | バージョン |
---|---|
Java | 1.8 (推奨) |
AWS Java SDK | 1.11.379 |
Apache Flink | 1.6.2 |
Flink Runtime 向け Managed Service for Apache Flink (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 SDK AWS CLI、 AWS CloudFormationまたは を使用して、インプレース Apache Flink バージョンアップグレード機能を使用します AWS Management Console。詳細については、「Apache Flink のインプレースバージョンアップグレードを使用する」を参照してください。
この機能は、Amazon Managed Service for Apache Flink で READY
または RUNNING
状態の既存のアプリケーションで使用できます。
Apache Flink 1.6.2 および 1.8.2 で利用可能なコネクタ
Apache Flink フレームワークには、さまざまなソースのデータにアクセスするためのコネクターが含まれています。
Apache Flink 1.6.2 フレームワークで使用可能なコネクタの情報については、「Apache Flink ドキュメント (1.6.2)
」の「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
。 JAVA_HOME
環境変数を、JDK のインストール場所を指すように設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、AWS アカウントをセットアップし、管理者ユーザーを作成するに進みます。
ステップ 1: アカウントを設定し AWS 、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
https://portal.aws.amazon.com/billing/signup
を開きます。 オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように、 を保護し AWS IAM Identity Center、 AWS アカウントのルートユーザーを有効にして、管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 AWS IAM Identity Center ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に 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 アプリケーションを作成します。
このセクションには、以下のステップが含まれています。
2 つの Amazon Kinesis Data Streams を作成する
この演習で 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 Streaming Java Code のダウンロードと検証
この例の 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 開発キット (JDK) をインストールする方法については、演習を完了するための前提条件を満たすを参照してください。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン Maven ツールを使用します。
pom.xml
ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。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 Streaming Java Code のアップロードしてください
このセクションでは、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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションを停止する
[MyApplication] ページで、[Stop] を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。
[MyApplication] ページで、[Congirue] を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションを作成して実行する (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 リソースネーム (ARN) のアカウント ID (username
) を自分のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、IAM ユーザーガイドのチュートリアル: はじめてのカスタマーマネージドポリシーの作成とアタッチを参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、アプリケーションに関連付けられているサービス実行 IAM ロールに、SDK が必要とする認証情報を自動的に設定します。追加の手順は必要ありません。
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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStreamポリシーを選択してから、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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>
」) を、 2 つの Amazon Kinesis Data Streams を作成する セクションで選択したサフィックスで更新します。
{ "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 アプリケーションを削除する
Kinesis コンソール (https://console.aws.amazon.com/kinesis
) を開きます。 -
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
-
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
-
Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
-
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
-
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Apache Flink 用 Managed Service のオプションには、シミュレートされたニューヨークのタクシーデータに対して分析操作を実行する実際のアプリケーションを示すエンドツーエンドのストリーミング ETL の例が用意されています。このソリューションは、IAM ロールとポリシー、CloudWatch ダッシュボード、CloudWatch アラームなど、必要なすべての AWS リソースを設定します。 AWS Amazon MSK のストリーミングデータソリューション
: Amazon MSK AWS のストリーミングデータソリューションは、データがプロデューサー、ストリーミングストレージ、コンシューマー、および送信先を通過する AWS CloudFormation テンプレートを提供します。 「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: ハンズオントレーニング
:」スケーラブルなストリーミング 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 開発キット (JDK) バージョン 11
。 JAVA_HOME
環境変数を、JDK のインストール場所を指すように設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、AWS アカウントをセットアップし、管理者ユーザーを作成するに進みます。
ステップ 1: アカウントを設定し AWS 、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
https://portal.aws.amazon.com/billing/signup
を開きます。 オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 のセキュリティを確保し AWS IAM Identity Center、 を有効にして、管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 AWS IAM Identity Center ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に 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 アプリケーションを作成します。
このセクションには、以下のステップが含まれています。
2 つの Amazon Kinesis Data Streams を作成する
この演習で 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 Streaming Java Code のダウンロードと検証
この例の 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 開発キット (JDK) をインストールする方法については、演習を完了するための前提条件を満たすを参照してください。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン Maven ツールを使用します。
pom.xml
ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。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 Streaming Java Code のアップロードしてください
このセクションでは、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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションを停止する
[MyApplication] ページで、[Stop] を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。
[MyApplication] ページで、[Congirue] を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションを作成して実行する (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 リソースネーム (ARN) のアカウント ID (username
) を自分のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、IAM ユーザーガイドのチュートリアル: はじめてのカスタマーマネージドポリシーの作成とアタッチを参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、アプリケーションに関連付けられているサービス実行 IAM ロールに、SDK が必要とする認証情報を自動的に設定します。追加の手順は必要ありません。
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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStreamポリシーを選択してから、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplication
、および新しいオブジェクトバージョンを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の UpdateApplication
アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId
を現在のアプリケーションバージョンに更新します。ListApplications
または DescribeApplication
アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>
」) を、 2 つの Amazon Kinesis Data Streams を作成する セクションで選択したサフィックスで更新します。
{ "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 アプリケーションを削除する
Kinesis コンソール (https://console.aws.amazon.com/kinesis
) を開きます。 -
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
-
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
-
Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
-
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
-
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Apache Flink 用 Managed Service のオプションには、シミュレートされたニューヨークのタクシーデータに対して分析操作を実行する実際のアプリケーションを示すエンドツーエンドのストリーミング ETL の例が用意されています。このソリューションは、IAM ロールとポリシー、CloudWatch ダッシュボード、CloudWatch アラームなど、必要なすべての AWS リソースを設定します。 AWS Amazon MSK 用ストリーミングデータソリューション
: Amazon MSK AWS 用ストリーミングデータソリューションは、データがプロデューサー、ストリーミングストレージ、コンシューマー、および送信先を通過する AWS CloudFormation テンプレートを提供します。 「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: ハンズオントレーニング
:」スケーラブルなストリーミング 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。 JAVA_HOME
環境変数を、JDK のインストール場所を指すように設定します。 -
このチュートリアルで 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 アカウント
https://portal.aws.amazon.com/billing/signup
を開きます。 オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 のセキュリティを確保し AWS IAM Identity Center、 を有効にして、管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 AWS IAM Identity Center ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に 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 アプリケーションを作成します。
このセクションには、以下のステップが含まれています。
2 つの Amazon Kinesis Data Streams を作成する
この演習で 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 Streaming Java Code のダウンロードと検証
この例の 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 開発キット (JDK) をインストールする方法については、演習を完了するための前提条件を参照してください。
注記
「1.11 より前のバージョンの Apache Flink で Kinesis コネクタを使用するには、Apache Maven をダウンロード、ビルド、インストールする必要があります。」 詳細については、「以前の Apache Flink バージョンでの Apache Flink Kinesis Streams コネクタの使用」を参照してください。
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
-
コマンドライン Maven ツールを使用します。
pom.xml
ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。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 Streaming Java Code のアップロードしてください
このセクションでは、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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
-
[MyApplication] ページで、[Run] を選択します。アクションを確認します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションを停止する
[MyApplication] ページで、[Stop] を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。
[MyApplication] ページで、[Congirue] を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションを作成して実行する (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 リソースネーム (ARN) のアカウント ID (username
) を自分のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、IAM ユーザーガイドのチュートリアル: はじめてのカスタマーマネージドポリシーの作成とアタッチを参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、アプリケーションに関連付けられているサービス実行 IAM ロールに、SDK が必要とする認証情報を自動的に設定します。追加の手順は必要ありません。
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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStreamポリシーを選択してから、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplication
、および新しいオブジェクトバージョンを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の UpdateApplication
アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId
を現在のアプリケーションバージョンに更新します。ListApplications
または DescribeApplication
アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>
」) を、 2 つの Amazon Kinesis Data Streams を作成する セクションで選択したサフィックスで更新します。
{ "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 アプリケーションを削除する
Kinesis コンソール (https://console.aws.amazon.com/kinesis
) を開きます。 -
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
-
[設定] を選択します。
-
スナップショットセクションで「無効」を選択して、更新を選択します。
-
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
-
Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
-
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
-
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 年以上サポートされていません。Amazon Managed Service for Apache Flink では、2024 年 11 月 5 日にこれらのバージョンを廃止する予定です。この日付以降、これらの 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。 JAVA_HOME
環境変数を、JDK のインストール場所を指すように設定します。 -
開発環境 (Eclipse Java Neon
や IntelliJ Idea など ) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。 -
Git クライアント
。Git クライアントをまだインストールしていない場合は、インストールします。 -
Apache Maven Compiler Plugin
。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。 $ mvn -version
開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。
ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
https://portal.aws.amazon.com/billing/signup
を開きます。 オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように、 を保護し AWS IAM Identity Center、 AWS アカウントのルートユーザーを有効にして、管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 AWS IAM Identity Center ユーザーガイド」の「Configure user access with the default IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に 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 アプリケーションを作成します。
このセクションには、以下のステップが含まれています。
2 つの Amazon Kinesis Data Streams を作成する
この演習で 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 Streaming Java Code のダウンロードと検証
この例の 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 開発キット (JDK) をインストールする方法については、演習を完了するための前提条件を参照してください。
注記
1.11 より前のバージョンの Apache Flink で Kinesis コネクタを使用するには、コネクタのソース コードをダウンロードし、Apache Flink ドキュメント
アプリケーションコードをコンパイルするには
-
アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。
コマンドライン Maven ツールを使用します。
pom.xml
ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。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 Streaming Java Code のアップロードしてください
このセクションでは、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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
java-getting-started-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
-
[MyApplication] ページで、[Run] を選択します。アクションを確認します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションを停止する
[MyApplication] ページで、[Stop] を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。
[MyApplication] ページで、[Congirue] を選択します。アプリケーションの設定を更新し、[更新] を選択します。
アプリケーションを作成して実行する (AWS CLI)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成して実行します。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 リソースネーム (ARN) のアカウント ID (username
) を自分のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、IAM ユーザーガイドのチュートリアル: はじめてのカスタマーマネージドポリシーの作成とアタッチを参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、アプリケーションに関連付けられているサービス実行 IAM ロールに、SDK が必要とする認証情報を自動的に設定します。追加の手順は必要ありません。
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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStreamポリシーを選択してから、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplication
を指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の UpdateApplication
アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId
を現在のアプリケーションバージョンに更新します。ListApplications
または DescribeApplication
アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>
」) を、 2 つの Amazon Kinesis Data Streams を作成する セクションで選択したサフィックスで更新します。
{ "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 アプリケーションを削除する
Kinesis コンソール (https://console.aws.amazon.com/kinesis
) を開きます。 Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
[設定] を選択します。
スナップショットセクションで「無効」を選択して、更新を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 でのアプリケーションの作成と操作の例を示します。これらの例は、 Managed Service for Apache Flink アプリケーションを作成し、結果をテストするために役立つコード例と詳しい手順が含まれます。
例に進む前に、以下に目を通しておくことをお勧めします。
注記
これらの例は、米国西部 (オレゴン) リージョン (us-west-2
) を使用していると仮定しています。別のリージョンを使用している場合は、アプリケーションコード、コマンド、IAM ロールを適切に更新してください。
DataStream API の例
次の例では、Apache Flink DataStream API でアプリケーションを作成する方法を示しています。
トピック
例: タンブリングウィンドウ
注記
現在の例については、「」を参照してくださいManaged Service for Apache Flink アプリケーションの作成と使用の例。
この練習では、タンブリングウィンドウを使用してデータを集約する Managed Service for Apache Flink アプリケーションを作成します。Flink では、集約はデフォルトで有効になっています。 以下を無効にするには次のコマンドを使用します。
sink.producer.aggregation-enabled' = 'false'
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で DataStream API の使用を開始する演習を完了してください。
このトピックには、次のセクションが含まれています。
依存リソースを作成する
この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。
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 Streaming Java Code のアップロードしてください
このセクションでは、依存リソースを作成する のセクションで作成した 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
-
[MyApplication] ページで、[Run] を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
AWS リソースをクリーンアップする
このセクションでは、タンブリングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 Streaming Java Code のアップロードしてください
このセクションでは、依存リソースを作成する のセクションで作成した 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/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 ジョブを選択すると表示できます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
AWS リソースのクリーンアップ
このセクションでは、スライディングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 Streaming Java Code のアップロードしてください
このセクションでは、依存リソースを作成する のセクションで作成した 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、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/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
code/aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
-
[MyApplication] ページで、[Run] を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。
-
アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。
アプリケーションの出力を確認する
Amazon S3 コンソールで、S3 バケット内のデータフォルダを開きます。
数分後、アプリケーションからの集約データを含むオブジェクトが表示されます。
注記
Flink では、集約はデフォルトで有効になっています。 以下を無効にするには次のコマンドを使用します。
sink.producer.aggregation-enabled' = 'false'
オプション: ソースとシンクをカスタマイズする
このセクションでは、ソースオブジェクトおよびシンクオブジェクトの設定をカスタマイズします。
注記
以下のセクションで説明するコードセクションを変更した後、次の操作を行ってアプリケーションコードをリロードします。
-
このアプリケーションコードのコンパイルセクションの手順を繰り返して、更新したアプリケーションコードをコンパイルします。
-
このApache Flink Streaming Java Code のアップロードしてくださいセクションの手順を繰り返して、更新したアプリケーションコードをアップロードします。
-
コンソールのアプリケーションページで 設定 を選択し、更新 を選択して、更新したアプリケーションコードをアプリケーションにリロードします。
このセクションには、次の項目が含まれています。
データパーティショニングを設定する
このセクションでは、ストリーミングファイルシンクが 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
-
アプリケーションページで[削除]を選択し、削除を確定します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 -
Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
-
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
でAmazon 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 つのトピックを含む Amazon VPC を作成する方法と、ある Amazon MSK トピックから読み取り、別の Amazon MSK トピックに書き込む Managed Service for Apache Flinkを作成する方法を示しています。
注記
この演習に必要な前提条件を設定するには、まずチュートリアル: Managed Service for Apache Flink で DataStream API の使用を開始する演習を完了してください。
このチュートリアルには、次のセクションが含まれています。
Amazon MSK クラスターを使用してAmazon VPC を作成します
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 Streaming Java Code のアップロードしてください
このセクションでは、チュートリアル: Managed Service for Apache Flink で DataStream API の使用を開始する チュートリアルで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。
注記
入門チュートリアルから Amazon S3 バケットを削除した場合は、アプリケーションコード JAR ファイルをアップロードする手順をもう一度実行してください。
-
Amazon S3 コンソールで ka-app-code-
<username>
バケットを選択し、[アップロード] を選択します。 -
ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した
KafkaGettingStartedJob-1.0.jar
ファイルに移動します。 オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。
アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。
アプリケーションの作成
https://console.aws.amazon.com/flink. で Managed Service for Apache Flink コンソールを開きます。
-
Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。
-
「Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。
-
[アプリケーション名] には
MyApplication
と入力します。 -
[ランタイム] には、[Apache Flink 1.15.2] を選択します。
-
-
[アクセス許可] には、[IAM ロールの作成 / 更新
kinesis-analytics-MyApplication-us-west-2
] を選択します。 -
[Create application] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
KafkaGettingStartedJob-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。注記
コンソールを使用してアプリケーションリソース (CloudWatch Logs や Amazon VPC など) を指定すると、コンソールはアプリケーション実行ロールを変更して、それらのリソースにアクセスする権限を付与します。
-
[プロパティ] で [グループの追加]を選択します。以下のプロパティを入力します。
グループ ID キー 値 KafkaSource
トピック AWS KafkaTutorialTopic KafkaSource
bootstrap.servers 以前に保存したブートストラップサーバーリスト
KafkaSource
security.protocol SSL KafkaSource
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSource
ssl.truststore.password changeit 注記
デフォルト証明書の ssl.truststore.password は「changeit」です。デフォルト証明書を使用している場合は、この値を変更する必要はありません。
[グループの追加] をもう一度選択します。以下のプロパティを入力します。
グループ ID キー 値 KafkaSink
トピック AWS KafkaTutorialTopicDestination KafkaSink
bootstrap.servers 以前に保存したブートストラップサーバーリスト
KafkaSink
security.protocol SSL KafkaSink
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSink
ssl.truststore.password changeit KafkaSink
transaction.timeout.ms 1,000 アプリケーションコードは上記のアプリケーションプロパティを読み取って、VPC と Amazon MSK クラスターとのやり取りに使用されるソースとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティを使用する」を参照してください。
-
スナップショットで 無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[有効化] チェックボックスをオンにします。
-
[仮想プライベートクラウド (VPC)] セクションで、アプリケーションに関連する VPC を選択します。アプリケーションが VPC リソースにアクセスするために使用する VPC に関連付けられているサブネットとセキュリティグループを選択します。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションをテストする
このセクションでは、レコードをソーストピックに書き込みます。アプリケーションはソーストピックからレコードを読み取り、宛先トピックに書き込みます。アプリケーションが動作していることを確認するには、ソーストピックにレコードを書き込み、宛先トピックからレコードを読み取ります。
トピックからレコードの書き込みと読み取りを行うには、「Amazon MSK の使用開始チュートリアルの「ステップ 6: データの生成と利用」の手順に従います。
ターゲットトピックから読み込むには、クラスターへの 二番目の接続で、ソーストピックの代わりに宛先トピック名を使用してください。
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: Kinesis コンシューマー向けの拡張ファンアウト
この例で作成するアプリケーションは、 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 Consumerを使用して Kinesis Data Streamsデータにアクセスできるようにするには、このパラメータを EFO に設定します。
EFO_CONSUMER_NAME: このパラメータを、このストリームのコンシューマー間で一意の文字列値に設定します。同じ Kinesis Data Stream でコンシューマー名を再利用すると、その名前を使用していた以前のコンシューマーは終了します。
次のコード例は、EFO Consumerを使用してソースストリームから読み取るために、コンシューマー設定プロパティに値を割り当てる方法を示しています。
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 Streaming Java Code のアップロードしてください
このセクションでは、依存リソースを作成する のセクションで作成した 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。注記
これらの権限により、アプリケーションには EFO Consumerへのアクセス権限が付与されます。
{ "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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
aws-kinesis-analytics-java-apps-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
また、Kinesis Data Streamsコンソールのデータストリームの「拡張ファンアウト(EFO)」 タブでコンシューマーの名前 (basic-efo-flink-app) を確認することもできます。
AWS リソースのクリーンアップ
このセクションでは、efo Window チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットの削除
https://console.aws.amazon.com/s3/
で Amazon 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 Streaming Java Code のダウンロードと検証
この例の 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 Streaming Java Code のアップロードしてください
このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。
アプリケーションコードをアップロードするには
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
コンソールで [ka-app-code-
<username>
] バケットを選択し、[アップロード] を選択します。 -
ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した
java-getting-started-1.0.jar
ファイルに移動します。 オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。
アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。
Managed Service for Apache Flink アプリケーションを作成して実行する
コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。
注記
コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。
アプリケーションを作成して実行する (コンソール)
以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。
アプリケーションの作成
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
-
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/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) の全てのインスタンスを自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
java-getting-started-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。 -
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションを停止する
[MyApplication] ページで、[Stop] を選択します。アクションを確認します。
アプリケーションの更新
コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。
[MyApplication] ページで、[Congirue] を選択します。アプリケーションの設定を更新し、[更新] を選択します。
注記
コンソールでアプリケーションのコードを更新するには、JAR のオブジェクト名を変更するか、別の S3 バケットを使用するか、またはアプリケーションコードの更新セクションで説明されている AWS CLI を使用する必要があります。ファイル名またはバケットが変更されない場合、Configure ページで アップデート を選択してもアプリケーションコードはリロードされません。
アプリケーションを作成して実行する (AWS CLI)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成して実行します。
許可ポリシーを作成する
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read
アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write
アクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。 を Amazon S3 バケットの作成に使用したユーザー名
に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、IAM ユーザーガイドのチュートリアル: はじめてのカスタマーマネージドポリシーの作成とアタッチを参照してください。
注記
その他のアマゾンサービスにアクセスするには、 AWS SDK for Javaを使用します。Managed Service for Apache Flink は、アプリケーションに関連付けられているサービス実行 IAM ロールに、SDK が必要とする認証情報を自動的に設定します。追加の手順は必要ありません。
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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。 -
アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。
-
[概要] ページで、[アクセス許可] タブを選択します。
-
[Attach Policies (ポリシーのアタッチ)] を選択します。
-
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。 -
AKReadSourceStreamWriteSinkStreamポリシーを選択してから、ポリシーのアタッチ を選択します。
-
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplication
を指定して を呼び出します。
以下の 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 で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
[設定] を選択します。
スナップショットセクションで「無効」を選択して、更新を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
Firehose ストリームを削除する
Kinesis コンソール (https://console.aws.amazon.com/kinesis
) を開きます。 Firehose パネルで ExampleDeliveryStream を選択します。
ExampleDeliveryStream ページで、Firehose ストリームの削除を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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" ] } ] }サービスロールの Amazon リソースネーム (ARN) をメモしておきます。これは次のセクションで必要になります。[the IAM role ARN number (IAM ロールの ARN 番号)] は、次のようになります。
arn:aws:iam::
SINK012345678
:role/service-role/kinesis-analytics-MyApplication-us-west-2
ソースアカウントのロールとポリシー
KA-Source-Stream-Policy
というソースアカウントにポリシーを作成します。このポリシーでは、次の形式を使用します。サンプルアカウント番号をソースアカウントのアカウント番号に置き換えます。{ "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 ファイルを削除して、S3 バケットに新しい
aws-kinesis-analytics-java-apps-1.0.jar
ファイルをアップロードします。Managed Service for Apache Flink consoleコンソールのアプリケーションページで、設定、更新 を選択してアプリケーション JAR ファイルをリロードします。
stock.py
スクリプトを実行してソースストリームにデータを送信します。python stock.py
アプリケーションは別のアカウントの Kinesis ストリームからデータを読み取ります。
ExampleOutputStream
コンソールで PutRecords.Bytes
メトリックスをチェックして、アプリケーションが動作していることを確認します。出力ストリームに活動があれば、アプリケーションは正常に運行しています。
チュートリアル: Amazon MSK でカスタムトラストストアを使用する
注記
現在の例については、「」を参照してくださいManaged Service for Apache Flink アプリケーションの作成と使用の例。
現在のデータソース API
現在のデータソース 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 + "}"); ...
詳細とウォークスルーについては、こちら
レガシーソース関数 APIs
レガシーソース関数 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 クラスターノードが、アカウントとリージョンに対してプライベートであり、Flink アプリケーションを実行する Java 仮想マシン (JVM) のデフォルトのトラストストアで信頼されていない AWS Certificate Manager Private Certificate Authority (ACM Private CA) によって発行されたサーバー証明書を使用することを意味します。
注記
-
キーストアは、検証のためにアプリケーションがサーバーまたはクライアントの両方に提示する必要があるプライベートキーと ID 証明書を保存するために使用されます。
-
トラストストアは、SSL 接続でサーバーによって提示された証明書を検証する認定機関 (CA) からの証明書を保存するために使用されます。
このチュートリアルの技術は、Managed Service for Apache Flinkアプリケーションと、次のようなその他の Apache Kafka ソースとのやり取りにも使用されます。
でホストされているカスタム Apache Kafka クラスター AWS (Amazon EC2
または Amazon EKS ) でホストされている Confluent Kafka
クラスター AWS AWS Direct Connect
または VPN 経由でアクセスされるオンプレミスの Kafka クラスター
このチュートリアルには、次のセクションが含まれています。
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 Streaming Java Code のアップロードしてください
このセクションでは、チュートリアル: 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
flink-app-1.0-SNAPSHOT.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
kinesis-analytics-MyApplication-us-west-2
] を選択します。注記
コンソールを使用してアプリケーションリソース (ログや VPC など) を指定すると、コンソールはアプリケーション実行ロールを変更して、それらのリソースにアクセスする権限を付与します。
-
[プロパティ] で [グループの追加]を選択します。以下のプロパティを入力します。
グループ ID キー 値 KafkaSource
トピック AWS KafkaTutorialTopic KafkaSource
bootstrap.servers 以前に保存したブートストラップサーバーリスト
KafkaSource
security.protocol SSL KafkaSource
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSource
ssl.truststore.password changeit 注記
デフォルト証明書の ssl.truststore.password は「変更してください」です。デフォルト証明書を使用している場合は、この値を変更する必要はありません。
グループの追加をもう一度選択します。以下のプロパティを入力します。
グループ ID キー 値 KafkaSink
トピック AWS KafkaTutorialTopicDestination KafkaSink
bootstrap.servers 以前に保存したブートストラップサーバーリスト
KafkaSink
security.protocol SSL KafkaSink
ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts KafkaSink
ssl.truststore.password changeit KafkaSink
transaction.timeout.ms 1,000 アプリケーションコードは上記のアプリケーションプロパティを読み取って、VPC と Amazon MSK クラスターとのやり取りに使用されるソースとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティを使用する」を参照してください。
-
スナップショットで 無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。
-
[Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。
-
[CloudWatch logging] では、[有効化] チェックボックスをオンにします。
-
[仮想プライベートクラウド (VPC)] セクションで、アプリケーションに関連する VPC を選択します。アプリケーションが VPC リソースにアクセスするために使用する VPC に関連付けられているサブネットとセキュリティグループを選択します。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。
アプリケーションを実行する
Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。
アプリケーションをテストする
このセクションでは、レコードをソーストピックに書き込みます。アプリケーションはソーストピックからレコードを読み取り、宛先トピックに書き込みます。アプリケーションが動作していることを確認するには、ソーストピックにレコードを書き込み、宛先トピックからレコードを読み取ります。
トピックからレコードの書き込みと読み取りを行うには、「Amazon MSK の使用開始チュートリアルの「ステップ 6: データの生成と利用」の手順に従います。
ターゲットトピックから読み込むには、クラスターへの 二番目の接続で、ソーストピックの代わりに宛先トピック名を使用してください。
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 Table API をしようた Python でアプリケーションを作成する方法を示しています。
例: 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
myapp.zip
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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 ジョブを選択すると表示できます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
AWS リソースのクリーンアップ
このセクションでは、タンブリングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
myapp.zip
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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 ジョブを選択すると表示できます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
AWS リソースのクリーンアップ
このセクションでは、スライディングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
myapp.zip
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[Enable] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
CloudWatch ログ記録の有効化を選択すると、Managed Service for Apache Flink がユーザーに代わってロググループとログストリームを作成します。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。
IAM ポリシーを編集する
IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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 ジョブを選択すると表示できます。
CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
AWS リソースのクリーンアップ
このセクションでは、スライディングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
でAmazon 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 の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この課題では、Scala3.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)
アプリケーションでは、ソースおよびシンクコネクタを作成し、 オブジェクトを使用して外部リソースにアクセスします。
アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。
アプリケーション・コードをコンパイルしてアップロードするには
このセクションでは、アプリケーションコードをコンパイルして 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 バケットを作成し、アプリケーションコードをアップロードします。
https://console.aws.amazon.com/s3/
で Amazon 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
tumbling-window-scala-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[有効化] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
IAM ポリシーを編集する
Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。
IAM ポリシーを編集して S3 バケット権限を追加するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS Command Line Interface を作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらの IAM リソースを作成しない場合、アプリケーションはそのデータストリームやログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) (012345678901)
のアカウント ID を自分のアカウント ID に置き換えます。MF-stream-rw-role
サービス実行ロールは、顧客固有のロールに合わせて調整する必要があります。
{ "ApplicationName": "tumbling_window", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/
MF-stream-rw-role
", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username
", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
許可ポリシーを作成する詳しい手順については、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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、IAM ユーザーガイドの IAM ロールの作成 (コンソール)を参照してください。
アプリケーションの作成
次の JSON コードを create_request.json
という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。ServiceExecutionRole
には、前のセクションで作成した IAMユーザーロールを含める必要があります。
"ApplicationName": "tumbling_window", "ApplicationDescription": "Scala getting started application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-
username
", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901
:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }
次のリクエストによってCreateApplication を実行して、アプリケーションを作成します。
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。
アプリケーションを起動する
このセクションでは、 StartApplicationアクションを使用してアプリケーションを起動します。
アプリケーションを起動するには
次の JSON コードを
start_request.json
という名前のファイルに保存します。{ "ApplicationName": "tumbling_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
前述のリクエストを指定して
StartApplication
アクションを実行し、アプリケーションを起動します。aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが機能していることを確認できます。
アプリケーションを停止する
このセクションでは、StopApplicationアクションを使用してアプリケーションを停止します。
アプリケーションを停止するには
次の JSON コードを
stop_request.json
という名前のファイルに保存します。{ "ApplicationName": "tumbling_window" }
前述のリクエストを指定して
StopApplication
アクションを実行し、アプリケーションを起動します。aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
アプリケーションが停止します。
CloudWatch ログ記録オプションを追加する
を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションでCloudWatch ログを使用する情報については、「アプリケーションロギングの設定」を参照してください。
環境プロパティを更新する
このセクションでは、UpdateApplicationアクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。
アプリケーションの環境プロパティを更新します
次の JSON コードを
update_properties_request.json
という名前のファイルに保存します。{"ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
前述のリクエストで
UpdateApplication
アクションを実行し、環境プロパティを更新します。aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新
アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、「UpdateApplication」CLI アクションを使用します。
注記
同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。Amazon S3 オブジェクトバージョンを使用する方法の詳細については、「バージョニングの有効化または無効化」を参照してください。
を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplication
、および新しいオブジェクトバージョンを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。
以下の 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 で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この課題では、Scala3.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)
アプリケーションでは、ソースおよびシンクコネクタを作成し、 オブジェクトを使用して外部リソースにアクセスします。
アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。
アプリケーション・コードをコンパイルしてアップロードするには
このセクションでは、アプリケーションコードをコンパイルして 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 バケットを作成し、アプリケーションコードをアップロードします。
https://console.aws.amazon.com/s3/
で Amazon 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 で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
sliding-window-scala-1.0.jar.
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[有効化] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
IAM ポリシーを編集する
Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。
IAM ポリシーを編集して S3 バケット権限を追加するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
012345678901
) を自分のアカウント ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/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)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS Command Line Interface を作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらの IAM リソースを作成しない場合、アプリケーションはそのデータストリームやログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) (012345678901)
のアカウント ID を自分のアカウント 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" } ] }
許可ポリシーを作成する詳しい手順については、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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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
アプリケーションコードの更新
アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、「UpdateApplication」CLI アクションを使用します。
注記
同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。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 アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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 の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。
Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteen
この課題では、Scala3.2.0 と Flink の Java DataStream APIを使用する簡単なストリーミングアプリケーションを作成します。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用してデータを集約し、結果を S3 に書き込みます。
注記
この練習に必要な前提条件を設定するには、まずGetting Started (Scala) の練習を完了してください。Amazon S3 バケット ka-app-code<ユーザー名>に追加のフォルダ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) }
また、アプリケーションはストリーミングファイルシンクを使用して 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() }
アプリケーションでは、ソースおよびシンクコネクタを作成し、 オブジェクトを使用して外部リソースにアクセスします。
アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。
アプリケーション・コードをコンパイルしてアップロードするには
このセクションでは、アプリケーションコードをコンパイルして 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 バケットを作成し、アプリケーションコードをアップロードします。
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 [バケットを作成] を選択します。
[Bucket name (バケット名)] フィールドに
ka-app-code-<username>
と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[Next (次へ)] を選択します。設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。
アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。
[バケットを作成] を選択します。
ka-app-code-<username>
バケットを選択し、アップロード を選択します。-
ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した
s3-sink-scala-1.0.jar
ファイルに移動します。 オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。
アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。
アプリケーションを作成して実行する (コンソール)
以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。
アプリケーションの作成
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
-
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] を選択します。
注記
コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。
-
ポリシー:
kinesis-analytics-service-
MyApplication
-us-west-2
-
ロール:
kinesisanalytics-
MyApplication
-us-west-2
アプリケーションを設定する
アプリケーションを設定するには、次の手順に従います。
アプリケーションを構成するには
-
[MyApplication] ページで、[Congirue] を選択します。
-
[Configure application] ページで、[Code location] を次のように指定します。
-
[Amazon S3 バケット] で、
ka-app-code-
と入力します。<username>
-
[Amazon S3 オブジェクトへのパス] で、
s3-sink-scala-1.0.jar
と入力します。
-
-
[Access to application resources] の [Access permissions] では、[Create / update IAM role
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 logging] では、[有効化] チェックボックスをオンにします。
-
[Update] (更新) を選択します。
注記
Amazon CloudWatch ログ記録を有効にすることを選択すると、ロググループとログストリームが Kinesis Data Analytics によって作成されます。これらのリソースの名前は次のとおりです。
-
ロググループ:
/aws/kinesis-analytics/MyApplication
-
ログストリーム:
kinesis-analytics-log-stream
IAM ポリシーを編集する
Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。
IAM ポリシーを編集して S3 バケット権限を追加するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ポリシー] を選択します。前のセクションでコンソールによって作成された
kinesis-analytics-service-MyApplication-us-west-2
ポリシーを選択します。 -
[概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。
-
次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント ID (
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)
このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS Command Line Interface を作成して実行します。kinesisanalyticsv2 AWS CLI コマンドを使用して、Managed Service for Apache Flink アプリケーションを作成して操作します。
許可ポリシーを作成する
注記
アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらの IAM リソースを作成しない場合、アプリケーションはそのデータストリームやログストリームにアクセスできません。
まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの読み取りアクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの書き込みアクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。
次のコードを使用して AKReadSourceStreamWriteSinkStream
アクセス許可ポリシーを作成します。username
を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) (012345678901)
のアカウント ID を自分のアカウント ID に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-
username
/getting-started-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901
:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901
:stream/ExampleOutputStream" } ] }
許可ポリシーを作成する詳しい手順については、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
を入力します。[ロールの作成] を選択します。これで、
MF-stream-rw-role
と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。アクセス許可ポリシーをロールにアタッチします。
注記
この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。
[概要] ページで、[アクセス許可] タブを選択します。
[Attach Policies (ポリシーのアタッチ)] を選択します。
検索ボックスに
AKReadSourceStreamWriteSinkStream
(前のセクションで作成したポリシー) と入力します。AKReadSourceStreamWriteSinkStream
ポリシーを選択し、[ポリシーを添付]を選択します。
これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。
ロールを作成する手順については、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
アプリケーションコードの更新
アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、「UpdateApplication」CLI アクションを使用します。
注記
同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。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 リソースのクリーンアップ
このセクションでは、タンブリングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。
このトピックには、次のセクションが含まれています。
Managed Service for Apache Flink アプリケーションを削除する
https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く
Apache Flink 用 Managed Serviceパネルで、MyApplication を選択します。
アプリケーションのページで[削除]を選択し、削除を確認します。
Kinesis データストリームを削除する
「https://console.aws.amazon.com/kinesis
」で Kinesis コンソールを開きます。 Kinesis Data Streams パネルで、「ExampleInputStream」を選択します。
「ExampleInputStream」ページで、「Kinesis ストリームを削除」を選択し、削除を確定します。
「Kinesis ストリーム」ページで、「ExampleOutputStream」を選択し、「アクション」を選択し、「削除」を選択し、削除を確定します。
Amazon S3 オブジェクトとバケットを削除する
https://console.aws.amazon.com/s3/
で Amazon 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」ロググループを選択してください。
[ロググループの削除]を選択し、削除を確認してください。