Managed Service for Apache Flink の以前のバージョン情報 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Managed Service for Apache Flink の以前のバージョン情報

注記

Apache Flink バージョン 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.15.2 および 1.13.2 は Managed Service for Apache Flink でサポートされていますが、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 のソースコードをダウンロードしてインストールするには、以下の手順に従います。

  1. Apache Maven」がインストールされていて、 JAVA_HOME 環境変数が JRE ではなく JDK を指していることを確認してください。次のコマンドで Apache Maven のインストールをテストすることができます。

    mvn -version
  2. Apache Flink バージョン 1.8.2 のソースコードをダウンロードします。

    wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
  3. Apache Flink ソースコードを解凍します。

    tar -xvf flink-1.8.2-src.tgz
  4. Apache Flink ソースコードディレクトリに移動します。

    cd flink-1.8.2
  5. Apache Flink をコンパイルしてインストールします。

    mvn clean install -Pinclude-kinesis -DskipTests
    注記

    Microsoft Windows で Flink をコンパイルする場合は、 -Drat.skip=true パラメータを追加する必要があります。

Apache Flink 1.8.2 を使用したアプリケーションの構築

このセクションには、Apache Flink 1.8.2 で動作する Apache Flink アプリケーション用 Managed Service を構築するために使用するコンポーネントに関する情報が含まれています。

Apache Flink 用 Managed Service アプリケーションには、次のコンポーネントバージョンを使用してください。

コンポーネント Version
Java 1.8 (推奨)
Apache Flink 1.8.2
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) 1.0.1
Apache Flink Flink コネクタ用 Managed Service (aws-kinesisanalytics-flink) 1.0.1
Apache Maven 3.1

Apache Flink 1.8.2 を使用してアプリケーションをコンパイルするには、以下のパラメーターを指定して Maven を実行します。

mvn package -Dflink.version=1.8.2

Apache Flink バージョン 1.8.2 を使用する Apache Flink アプリケーション用 Managed Service の pom.xml ファイルの例については、「Apache Flink 1.8.2 用 Managed Service 入門アプリケーション」を参照してください。

Apache Flink アプリケーション用 Managed Service のアプリケーションコードを構築して使用する方法については、 アプリケーションの作成 を参照してください。

Apache Flink 1.6.2 を使用したアプリケーションの構築

このセクションには、Apache Flink 1.6.2 で動作する Apache Flink アプリケーション用 Managed Service を構築するために使用するコンポーネントに関する情報が含まれています。

Apache Flink 用 Managed Service アプリケーションには、次のコンポーネントバージョンを使用してください。

コンポーネント Version
Java 1.8 (推奨)
AWS Java SDK 1.11.379
Apache Flink 1.6.2
Managed Service for Apache Flink for Flink Runtime (aws-kinesisanalytics-runtime) 1.0.1
Apache Flink Flink コネクタ用 Managed Service (aws-kinesisanalytics-flink) 1.0.1
Apache Maven 3.1
Apache Beam Apache Flink 1.6.2 ではサポートされていません。
注記

Apache Flink Runtime バージョン「1.0.1」用 Managed Service を使用する場合は、アプリケーションコードをコンパイルする際に -Dflink.version パラメータを使用するのではなく、 pom.xml ファイルに Apache Flink のバージョンを指定します。

Apache Flink バージョン 1.6.2 を使用する Apache Flink アプリケーション 用 Managed Service の「pom.xml」ファイルの例については、「Apache Flink 1.6.2 用 Managed Service 入門アプリケーション」を参照してください。

Apache Flink アプリケーション用 Managed Service のアプリケーションコードを構築して使用する方法については、 アプリケーションの作成 を参照してください。

アプリケーションのアップグレード

Amazon Managed Service for Apache Flink アプリケーションの Apache Flink バージョンをアップグレードするには、 AWS CLI、 AWS SDK AWS CloudFormation、または を使用して、インプレース Apache Flink バージョンアップグレード機能を使用します AWS Management Console。詳細については、「Apache Flink のインプレースバージョンアップグレード」を参照してください。

この機能は、 READYまたは RUNNING状態の Amazon Managed Service for Apache Flink で使用する既存のアプリケーションで使用できます。

Apache Flink 1.6.2 および 1.8.2 で利用可能なコネクタ

Apache Flink フレームワークには、さまざまなソースのデータにアクセスするためのコネクターが含まれています。

開始方法: 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 バケットなどからデータを読み取ります。詳細については、「[Sources] (出典)」を参照してください。

  • オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 DataStream API 演算子 を参照してください。

  • シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンク」を参照してください。

アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。

演習を完了するための前提条件

このガイドの手順を完了するには、以下が必要です。

開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。

ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する

にサインアップする AWS アカウント

がない場合は AWS アカウント、次の手順を実行して作成します。

にサインアップするには AWS アカウント
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。

    にサインアップすると AWS アカウント、 AWS アカウントのルートユーザーが作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/アカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成する

にサインアップしたら AWS アカウント、 を保護し AWS アカウントのルートユーザー、 を有効にして AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。

のセキュリティ保護 AWS アカウントのルートユーザー
  1. ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 ユーザーガイド」の「デフォルト でユーザーアクセスを設定する IAM アイデンティティセンターディレクトリAWS IAM Identity Center 」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM Identity Center ユーザーを使用してサインインする方法については、「 AWS サインイン ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」を参照してください。

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの参加」を参照してください。

プログラム的なアクセス権を付与する

ユーザーが の AWS 外部で を操作する場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAM Identity Center で管理されているユーザー)

一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。 「IAM ユーザーガイド」の「 AWS リソースでの一時的な認証情報の使用」の手順に従います。
IAM

(非推奨)

長期認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

次のステップ

ステップ 2: 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
  1. AWS CLIをダウンロードして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の次のトピックを参照してください。

  2. 管理者ユーザーの名前付きプロファイルを 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 全般のリファレンス

    注記

    このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。

  3. コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。

    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 データストリームを作成する

この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの Kinesis データストリーム (ExampleInputStreamExampleOutputStream) を作成する必要があります。アプリケーションでは、これらのストリームを使用してアプリケーションの送信元と送信先のストリームを選択します。

これらのストリームは Amazon Kinesis コンソールまたは次の AWS CLI コマンドを使用して作成できます。コンソールでの操作方法については、「Amazon Kinesis Data Streams デベロッパーガイド」 の 「データストリームの作成および更新」 を参照してください。

データストリームを作成するには (AWS CLI)
  1. 最初のストリーム (ExampleInputStream) を作成するには、次の Amazon Kinesis create-stream AWS CLI コマンドを使用します。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を ExampleOutputStream に変更して同じコマンドを実行します。

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

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. このチュートリアルの後半では、アプリケーションにデータを送信する stock.py スクリプトを実行します。

    $ python stock.py

Apache Flink ストリーミング Java コードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • 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. アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。

    • コマンドライン Maven ツールを使用します。pom.xml ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。

      mvn package -Dflink.version=1.13.2
    • 開発環境を使用します。詳細については、開発環境のドキュメントを参照してください。

      注記

      提供されているソースコードは Java 11 のライブラリーに依存しています。

    パッケージは JAR ファイルとしてアップロードすることも、圧縮して ZIP ファイルとしてアップロードすることもできします。を使用してアプリケーションを作成する場合は AWS CLI、コードコンテンツタイプ (JAR または ZIP) を指定します。

  2. コンパイル中にエラーが発生した場合は、JAVA_HOME 環境変数が正しく設定されていることを確認します。

アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

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

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、Amazon Simple Storage Service (Amazon S3) バケットを作成し、アプリケーションコードをアップロードします。

アプリケーションコードをアップロードするには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。[次へ] をクリックします。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。

注記

コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My java test app と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンプルダウンは「Apache Flink バージョン 1.13」のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. 次のように入力します。

    グループ ID キー
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  6. CloudWatch のログ記録では、有効化チェックボックスをオンにします。

  7. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

アプリケーションを実行する

Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。

アプリケーションの停止

MyApplication ページで、停止 を選択します。アクションを確認します。

アプリケーションの更新

コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。

MyApplication ページで、 の設定 を選択します。アプリケーションの設定を更新し、[更新] を選択します。

アプリケーションの作成と実行 (AWS CLI)

このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成して実行します。Managed Service for Apache Flink は、 kinesisanalyticsv2 AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成して操作します。

許可ポリシーを作成する
注記

アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらの IAM リソースを作成しない場合、アプリケーションはそのデータストリームやログストリームにアクセスできません。

まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write アクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。

次のコードを使用して AKReadSourceStreamWriteSinkStream アクセス許可ポリシーを作成します。username を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント ID (012345678901) を自分のアカウント ID に置き換えます。

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

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

注記

その他のアマゾンサービスにアクセスするには、 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 ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。

    [Next: Permissions] (次のステップ: 許可) を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  5. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  6. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシー をアタッチ を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールを作成する step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

Managed Service for Apache Flink アプリケーションを作成する
  1. 次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (username) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (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": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストを指定して CreateApplication アクションを実行し、アプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションの起動

このセクションでは、StartApplication アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、StopApplication アクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "test" }
  2. 次のリクエストを指定して StopApplication アクションを実行し、アプリケーションを停止します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「」を参照してくださいアプリケーションログ記録の設定

環境プロパティを更新します

このセクションでは、「UpdateApplication」アクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 UpdateApplication AWS CLI アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。Amazon S3 オブジェクトバージョンを使用する方法の詳細については、「バージョニングの有効化または無効化」を参照してください。

を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンUpdateApplicationを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。

以下の UpdateApplication アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId を現在のアプリケーションバージョンに更新します。ListApplications または DescribeApplication アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>」) を、 2 つの Amazon Kinesis データストリームを作成する セクションで選択したサフィックスで更新します。

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

次のステップ

ステップ 4: リソースをクリーンアップ AWS する

ステップ 4: リソースをクリーンアップ AWS する

このセクションでは、入門チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する

  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する

  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する

  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

次のステップ

ステップ 5: 次のステップ

ステップ 5: 次のステップ

Apache Flink 用 Managed Serviceの基本的なアプリケーションを作成して実行したので、より高度な Apache Flink 用 Managed Serviceソリューションについては、以下のリソースを参照してください。

  • Amazon Kinesis 用 AWS ストリーミングデータソリューション Amazon Kinesis 用 AWS ストリーミングデータソリューションは、ストリーミングデータを簡単にキャプチャ、保存、処理、配信するために必要な AWS サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Managed Service for Apache Flink オプションは、 end-to-endシミュレートされたニューヨークのタクシーデータに対して分析オペレーションを実行する実際のアプリケーションを示すストリーミング ETL の例を提供します。このソリューションは、IAM ロールとポリシー、 CloudWatch ダッシュボード、 CloudWatch アラームなど、必要なすべての AWS リソースを設定します。

  • AWS Amazon MSK のストリーミングデータソリューション Amazon 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 を使用する開始方法 (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 バケットなどからデータを読み取ります。詳細については、「[Sources] (出典)」を参照してください。

  • オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 DataStream API 演算子 を参照してください。

  • シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンク」を参照してください。

アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。

演習を完了するための前提条件

このガイドの手順を完了するには、以下が必要です。

開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。

ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する

にサインアップする AWS アカウント

がない場合は AWS アカウント、次のステップを実行して作成します。

にサインアップするには AWS アカウント
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。

    にサインアップすると AWS アカウント、 AWS アカウントのルートユーザーが作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/アカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成する

にサインアップしたら AWS アカウント、 を保護し AWS アカウントのルートユーザー、 を有効にして AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。

のセキュリティ保護 AWS アカウントのルートユーザー
  1. ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 ユーザーガイド」の「デフォルト でユーザーアクセス IAM アイデンティティセンターディレクトリを設定するAWS IAM Identity Center 」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM Identity Center ユーザーを使用してサインインする方法については、「 AWS サインイン ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」を参照してください。

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの参加」を参照してください。

プログラム的なアクセス権を付与する

ユーザーが の AWS 外部で を操作する場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAM Identity Center で管理されているユーザー)

一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。 「IAM ユーザーガイド」の「 AWS リソースでの一時的な認証情報の使用」の手順に従います。
IAM

(非推奨)

長期認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

次のステップ

ステップ 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
  1. AWS CLIをダウンロードして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の次のトピックを参照してください。

  2. 管理者ユーザーの名前付きプロファイルを 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 全般のリファレンス

    注記

    このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。

  3. コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。

    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 データストリームを作成する

この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの Kinesis データストリーム (ExampleInputStreamExampleOutputStream) を作成する必要があります。アプリケーションでは、これらのストリームを使用してアプリケーションの送信元と送信先のストリームを選択します。

これらのストリームは Amazon Kinesis コンソールまたは次の AWS CLI コマンドを使用して作成できます。コンソールでの操作方法については、「Amazon Kinesis Data Streams デベロッパーガイド」 の 「データストリームの作成および更新」 を参照してください。

データストリームを作成するには (AWS CLI)
  1. 最初のストリーム (ExampleInputStream) を作成するには、次の Amazon Kinesis create-stream AWS CLI コマンドを使用します。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を ExampleOutputStream に変更して同じコマンドを実行します。

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

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. このチュートリアルの後半では、アプリケーションにデータを送信する stock.py スクリプトを実行します。

    $ python stock.py

Apache Flink ストリーミング Java コードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • 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. アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。コードのコンパイルとパッケージ化には次の 2 通りの方法があります。

    • コマンドライン Maven ツールを使用します。pom.xml ファイルが格納されているディレクトリで次のコマンドを実行して JAR ファイルを作成します。

      mvn package -Dflink.version=1.11.3
    • 開発環境を使用します。詳細については、開発環境のドキュメントを参照してください。

      注記

      提供されているソースコードは Java 11 のライブラリーに依存しています。プロジェクトの Java バージョンが 11 であることを確認してください。

    パッケージは JAR ファイルとしてアップロードすることも、圧縮して ZIP ファイルとしてアップロードすることもできします。を使用してアプリケーションを作成する場合は AWS CLI、コードコンテンツタイプ (JAR または ZIP) を指定します。

  2. コンパイル中にエラーが発生した場合は、JAVA_HOME 環境変数が正しく設定されていることを確認します。

アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

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

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、Amazon Simple Storage Service (Amazon S3) バケットを作成し、アプリケーションコードをアップロードします。

アプリケーションコードをアップロードするには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。[次へ] をクリックします。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。

注記

コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My java test app と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンプルダウンは「Apache Flink バージョン 1.11 (推奨バージョン)」のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [Properties] の [Group ID] には、ProducerConfigPropertiesと入力します。

  5. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  6. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  7. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  8. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

アプリケーションを実行する

Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。

アプリケーションの停止

MyApplication ページで、停止 を選択します。アクションを確認します。

アプリケーションの更新

コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。

MyApplication ページで、 の設定 を選択します。アプリケーションの設定を更新し、[更新] を選択します。

アプリケーションの作成と実行 (AWS CLI)

このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成して実行します。Managed Service for Apache Flink は kinesisanalyticsv2 AWS CLI コマンドを使用して Managed Service for Apache Flink アプリケーションを作成して操作します。

アクセス許可ポリシーを作成する
注記

アプリケーションのアクセス権限ポリシーとロールを作成する必要があります。これらの IAM リソースを作成しない場合、アプリケーションはそのデータストリームやログストリームにアクセスできません。

まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write アクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。

次のコードを使用して AKReadSourceStreamWriteSinkStream アクセス許可ポリシーを作成します。username を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント ID (012345678901) を自分のアカウント ID に置き換えます。

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

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

注記

その他のアマゾンサービスにアクセスするには、 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 ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。

    [Next: Permissions] (次のステップ: 許可) を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  5. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  6. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシー をアタッチ を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールを作成する step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

Managed Service for Apache Flink アプリケーションを作成する
  1. 次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (username) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_11", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストを指定して CreateApplication アクションを実行し、アプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、StartApplication アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、StopApplication アクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "test" }
  2. 次のリクエストを指定して StopApplication アクションを実行し、アプリケーションを停止します。

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

アプリケーションが停止します。

ログ記録オプションを追加する CloudWatch

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「」を参照してくださいアプリケーションログ記録の設定

環境プロパティを更新する

このセクションでは、「UpdateApplication」アクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 UpdateApplication AWS CLI アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。Amazon S3 オブジェクトバージョンを使用する方法の詳細については、「バージョニングの有効化または無効化」を参照してください。

を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンUpdateApplicationを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。

以下の UpdateApplication アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId を現在のアプリケーションバージョンに更新します。ListApplications または DescribeApplication アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>」) を、 2 つの Amazon Kinesis データストリームを作成する セクションで選択したサフィックスで更新します。

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

次のステップ

ステップ 4: リソースをクリーンアップ AWS する

ステップ 4: リソースをクリーンアップ AWS する

このセクションでは、入門チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する

  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する

  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

rour IAM リソースを削除する

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する

  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

次のステップ

ステップ 5: 次のステップ

ステップ 5: 次のステップ

Apache Flink 用 Managed Serviceの基本的なアプリケーションを作成して実行したので、より高度な Apache Flink 用 Managed Serviceソリューションについては、以下のリソースを参照してください。

  • Amazon Kinesis 用 AWS ストリーミングデータソリューション Amazon Kinesis 用 AWS ストリーミングデータソリューションは、ストリーミングデータを簡単にキャプチャ、保存、処理、配信するために必要な AWS サービスを自動的に設定します。このソリューションには、ストリーミングデータのユースケースを解決するための複数のオプションが用意されています。Managed Service for Apache Flink オプションは、 end-to-endシミュレートされたニューヨークのタクシーデータに対して分析オペレーションを実行する実際のアプリケーションを示すストリーミング ETL の例を提供します。このソリューションは、IAM ロールとポリシー、 CloudWatch ダッシュボード、 CloudWatch アラームなど、必要なすべての AWS リソースを設定します。

  • AWS Amazon MSK のストリーミングデータソリューション Amazon 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 開始方法 (DataStream API)を使用するチュートリアルのバージョンが含まれています。

Managed Service for Apache Flink アプリケーションのコンポーネント

Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。

Apache Flink アプリケーション用 Managed Serviceには、以下のコンポーネントがあります。

  • ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。

  • ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「[Sources] (出典)」を参照してください。

  • オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 DataStream API 演算子 を参照してください。

  • シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンク」を参照してください。

アプリケーションコードを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。

演習を完了するための前提条件

このガイドの手順を完了するには、以下が必要です。

開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。

ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する

にサインアップする AWS アカウント

がない場合は AWS アカウント、次のステップを実行して作成します。

にサインアップするには AWS アカウント
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。

    にサインアップすると AWS アカウント、 AWS アカウントのルートユーザーが作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/アカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成する

にサインアップしたら AWS アカウント、 を保護し AWS アカウントのルートユーザー、 を有効にして AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。

のセキュリティ保護 AWS アカウントのルートユーザー
  1. ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 ユーザーガイド」の「デフォルト でユーザーアクセス IAM アイデンティティセンターディレクトリを設定するAWS IAM Identity Center 」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM Identity Center ユーザーを使用してサインインする方法については、「 AWS サインイン ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」を参照してください。

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの参加」を参照してください。

プログラム的なアクセス権を付与する

ユーザーが の AWS 外部で を操作する場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAM Identity Center で管理されているユーザー)

一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。 「IAM ユーザーガイド」の「 AWS リソースでの一時的な認証情報の使用」の手順に従います。
IAM

(非推奨)

長期認証情報を使用して、、 AWS SDKs AWS CLI、または 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
  1. AWS CLIをダウンロードして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の次のトピックを参照してください。

  2. 管理者ユーザーの名前付きプロファイルを 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 リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用するリージョンに変更します。

  3. コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。

    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 データストリームを作成する

この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの Kinesis データストリーム (ExampleInputStreamExampleOutputStream) を作成する必要があります。アプリケーションでは、これらのストリームを使用してアプリケーションの送信元と送信先のストリームを選択します。

これらのストリームは Amazon Kinesis コンソールまたは次の AWS CLI コマンドを使用して作成できます。コンソールでの操作方法については、「Amazon Kinesis Data Streams デベロッパーガイド」 の 「データストリームの作成および更新」 を参照してください。

データストリームを作成するには (AWS CLI)
  1. 最初のストリーム (ExampleInputStream) を作成するには、次の Amazon Kinesis create-stream AWS CLI コマンドを使用します。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を ExampleOutputStream に変更して同じコマンドを実行します。

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

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. このチュートリアルの後半では、アプリケーションにデータを送信する stock.py スクリプトを実行します。

    $ python stock.py

Apache Flink ストリーミング Java コードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted_1_8 ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • 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 コネクタの使用 を参照してください。

アプリケーションコードをコンパイルするには
  1. アプリケーションコードを使用するには、コードをコンパイルして 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) を指定します。

  2. コンパイル中にエラーが発生した場合は、JAVA_HOME 環境変数が正しく設定されていることを確認します。

アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

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

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、Amazon Simple Storage Service (Amazon S3) バケットを作成し、アプリケーションコードをアップロードします。

アプリケーションコードをアップロードするには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロードを選択します

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。[次へ] をクリックします。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。

注記

コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My java test app と入力します。

    • [ランタイム] には、[Apache Flink ] を選択します。

    • バージョンプルダウンは「Apache Flink 1.8 (推奨バージョン)」のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  6. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  7. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

アプリケーションを実行する
  1. MyApplication ページで、「 を実行」を選択します。アクションを確認します。

  2. アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。

アプリケーションの停止

MyApplication ページで、停止 を選択します。アクションを確認します。

アプリケーションの更新

コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。

MyApplication ページで、 の設定 を選択します。アプリケーションの設定を更新し、[更新] を選択します。

アプリケーションの作成と実行 (AWS CLI)

このセクションでは、 を使用して 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 アクセス許可ポリシーを作成します。username を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント ID (012345678901) を自分のアカウント ID に置き換えます。

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

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

注記

その他のアマゾンサービスにアクセスするには、 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 ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。

    [Next: Permissions] (次のステップ: 許可) を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  5. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  6. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、アクセス許可ポリシーを作成する をアタッチします。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシーのアタッチ を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールの作成 step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

Managed Service for Apache Flink アプリケーションを作成する
  1. 次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (username) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_8", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストを指定して CreateApplication アクションを実行し、アプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、StartApplication アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、StopApplication アクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "test" }
  2. 次のリクエストを指定して StopApplication アクションを実行し、アプリケーションを停止します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「」を参照してくださいアプリケーションログ記録の設定

環境プロパティを更新する

このセクションでは、「UpdateApplication」アクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 UpdateApplication AWS CLI アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。Amazon S3 オブジェクトバージョンを使用する方法の詳細については、「バージョニングの有効化または無効化」を参照してください。

を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名、および新しいオブジェクトバージョンUpdateApplicationを指定して を呼び出します。アプリケーションは新しいコードパッケージで再起動します。

以下の UpdateApplication アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId を現在のアプリケーションバージョンに更新します。ListApplications または DescribeApplication アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>」) を、 2 つの Amazon Kinesis データストリームを作成する セクションで選択したサフィックスで更新します。

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

次のステップ

ステップ 4: リソースをクリーンアップ AWS する

ステップ 4: リソースをクリーンアップ AWS する

このセクションでは、入門チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する

  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. [設定] を選択します。

  4. スナップショットセクションで「無効」を選択して、更新を選択します。

  5. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する

  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する

  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

開始方法: 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 開始方法 (DataStream API)を使用するチュートリアルのバージョンが含まれています。

Managed Service for Apache Flink アプリケーションのコンポーネント

Apache Flink アプリケーション用 Managed Service では、Apache Flink ランタイムを使用して入力を処理し、出力を生成する Java/Apache Maven または Scala アプリケーションを使用してデータを処理します。

Apache Flink 用 Managed Service のコンポーネントは次のとおりです。

  • ランタイムプロパティ:」「ランタイムプロパティ」を使用すると、アプリケーションコードを再コンパイルせずにアプリケーションを設定できます。

  • ソース:」 アプリケーションは 「ソース」 を使用してデータを消費します。ソースコネクタは、Kinesis データストリーム、Amazon S3 バケットなどからデータを読み取ります。詳細については、「[Sources] (出典)」を参照してください。

  • オペレータ:」アプリケーションは 1 つ以上の「オペレータ」を使用してデータを処理します。オペレータはデータを変換、強化、または集約できます。詳細については、 DataStream API 演算子 を参照してください。

  • シンク:」アプリケーションは「シンク」を使用して外部ソースにデータを生成します。シンクコネクタは、Kinesis データストリーム、Firehose ストリーム、Amazon S3 バケットなどにデータを書き込みます。詳細については、「シンク」を参照してください。

アプリケーションを作成、コンパイル、パッケージ化したら、コードパッケージを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、Apache Flink アプリケーション用 Managed Serviceを作成します。コードパッケージの場所、ストリーミングデータソースとして Kinesis データストリームを渡し、通常はアプリケーションの処理済みデータを受け取るストリーミングまたはファイルの場所を渡します。

演習を完了するための前提条件

このガイドの手順を完了するには、以下が必要です。

  • Java 開発キット (JDK) バージョン 8。JAVA_HOME 環境変数を、JDK のインストール場所を指すように設定します。

  • 開発環境 (Eclipse Java NeonIntelliJ Idea など) を使用してアプリケーションを開発し、コンパイルすることをお勧めします。

  • Git クライアント。Git クライアントをまだインストールしていない場合は、インストールします。

  • Apache Maven Compiler Plugin。Maven が作業パスに含まれている必要があります。Apache Maven のインストールをテストするには、次のように入力します。

    $ mvn -version

開始するには、ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成するに進みます。

ステップ 1: AWS アカウントを設定し、管理者ユーザーを作成する

にサインアップする AWS アカウント

がない場合は AWS アカウント、次の手順を実行して作成します。

にサインアップするには AWS アカウント
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。

    にサインアップすると AWS アカウント、 AWS アカウントのルートユーザーが作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/アカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成する

にサインアップしたら AWS アカウント、 を保護し AWS アカウントのルートユーザー、 を有効にして AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。

のセキュリティ保護 AWS アカウントのルートユーザー
  1. ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、「IAM ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 ユーザーガイド」の「デフォルト でユーザーアクセス IAM アイデンティティセンターディレクトリを設定するAWS IAM Identity Center 」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM Identity Center ユーザーを使用してサインインする方法については、「 AWS サインイン ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」を参照してください。

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの参加」を参照してください。

プログラム的なアクセス権を付与する

ユーザーが の AWS 外部で を操作する場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAM Identity Center で管理されているユーザー)

一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。 「IAM ユーザーガイド」の「 AWS リソースでの一時的な認証情報の使用」の手順に従います。
IAM

(非推奨)

長期認証情報を使用して、、 AWS SDKs AWS CLI、または AWS APIs。

使用するインターフェイス用の手引きに従ってください。

ステップ 2: AWS Command Line Interface (AWS CLI) を設定する

このステップでは、Apache Flink 用 Managed Service で使用する をダウンロードして設定 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
  1. AWS CLIをダウンロードして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の次のトピックを参照してください。

  2. 管理者ユーザーの名前付きプロファイルを 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 全般のリファレンス

    注記

    このチュートリアルのサンプルコードとコマンドでは、米国西部 (オレゴン) リージョンを使用しています。別の リージョンを使用するには、このチュートリアルのコードとコマンドのリージョンを、使用したいリージョンに変更します。

  3. コマンドプロンプトで以下のヘルプコマンドを入力して、セットアップを確認します。

    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 データストリームを作成する

この演習で Apache Flink アプリケーションのマネージドサービスを作成する前に、2 つの Kinesis データストリーム (ExampleInputStreamExampleOutputStream) を作成する必要があります。アプリケーションでは、これらのストリームを使用してアプリケーションの送信元と送信先のストリームを選択します。

これらのストリームは Amazon Kinesis コンソールまたは次の AWS CLI コマンドを使用して作成できます。コンソールでの操作方法については、「Amazon Kinesis Data Streams デベロッパーガイド」 の 「データストリームの作成および更新」 を参照してください。

データストリームを作成するには (AWS CLI)
  1. 最初のストリーム (ExampleInputStream) を作成するには、次の Amazon Kinesis create-stream AWS CLI コマンドを使用します。

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. アプリケーションが出力の書き込みに使用する 2 つめのストリームを作成するには、ストリーム名を ExampleOutputStream に変更して同じコマンドを実行します。

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

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. このチュートリアルの後半では、アプリケーションにデータを送信する stock.py スクリプトを実行します。

    $ python stock.py

Apache Flink ストリーミング Java コードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted_1_6 ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • 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 ドキュメント の説明に従ってビルドする必要があります

アプリケーションコードをコンパイルするには
  1. アプリケーションコードを使用するには、コードをコンパイルして 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) を指定します。

  2. コンパイル中にエラーが発生した場合は、JAVA_HOME 環境変数が正しく設定されていることを確認します。

アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

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

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、Amazon Simple Storage Service (Amazon S3) バケットを作成し、アプリケーションコードをアップロードします。

アプリケーションコードをアップロードするには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。[次へ] をクリックします。

  9. アクセス許可の設定のステップでは、設定をそのままにします。[次へ] をクリックします。

  10. プロパティの設定のステップでは、設定をそのままにします。[アップロード] を選択します。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。

注記

コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. 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」に変更します。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、java-getting-started-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  6. CloudWatch のログ記録では、有効化チェックボックスをオンにします。

  7. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

アプリケーションを実行する
  1. MyApplication ページで、 の実行 を選択します。アクションを確認します。

  2. アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。

アプリケーションの停止

MyApplication ページで、停止 を選択します。アクションを確認します。

アプリケーションの更新

コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。アプリケーションコードを更新する必要がある場合は、アプリケーション JAR を Amazon S3 バケットから再ロードすることもできます。

MyApplication ページで、 の設定 を選択します。アプリケーションの設定を更新し、[更新] を選択します。

アプリケーションの作成と実行 (AWS CLI)

このセクションでは、 を使用して 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 アクセス許可ポリシーを作成します。username を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント ID (012345678901) を自分のアカウント ID に置き換えます。

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

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

注記

その他のアマゾンサービスにアクセスするには、 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 ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。

    [Next: Permissions] (次のステップ: 許可) を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  5. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  6. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシー をアタッチ を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールを作成する step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

Managed Service for Apache Flink アプリケーションを作成する
  1. 次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (username) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_6", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストを指定して CreateApplication アクションを実行し、アプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、StartApplication アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、StopApplication アクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "test" }
  2. 次のリクエストを指定して StopApplication アクションを実行し、アプリケーションを停止します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「」を参照してくださいアプリケーションログ記録の設定

環境プロパティを更新する

このセクションでは、「UpdateApplication」アクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 UpdateApplication AWS CLI アクションを使用します。

を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplicationを指定して を呼び出します。 Amazon S3 アプリケーションは新しいコードパッケージで再起動します。

以下の UpdateApplication アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId を現在のアプリケーションバージョンに更新します。ListApplications または DescribeApplication アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>」) を、 2 つの Amazon Kinesis データストリームを作成する セクションで選択したサフィックスで更新します。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }

ステップ 4: リソースをクリーンアップ AWS する

このセクションでは、入門チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する

  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. [設定] を選択します。

  4. スナップショットセクションで「無効」を選択して、更新を選択します。

  5. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する

  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する

  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

Managed Service for Apache Flink の以前のバージョン (レガシー) の例

注記

現在の例については、「」を参照してください

このセクションでは、 Managed Service for Apache Flink でのアプリケーションの作成と操作の例を示します。これには、Managed Service for Apache Flink アプリケーションの作成と結果のテストに役立つサンプルコードと step-by-step 手順が含まれています。

例に進む前に、以下に目を通しておくことをお勧めします。

注記

これらの例は、米国西部 (オレゴン) リージョン (us-west-2) を使用していると仮定しています。別のリージョンを使用している場合は、アプリケーションコード、コマンド、IAM ロールを適切に更新してください。 

DataStream API の例

次の例は、Apache Flink DataStream API を使用してアプリケーションを作成する方法を示しています。

例: タンブリングウィンドウ

注記

現在の例については、「」を参照してください

この練習では、タンブリングウィンドウを使用してデータを集約する Managed Service for Apache Flink アプリケーションを作成します。Flink では、集約はデフォルトで有効になっています。  以下を無効にするには次のコマンドを使用します。

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

この演習に必要な前提条件を設定するには、まず開始方法 (DataStream API)演習を完了してください。

依存リソースを作成する

この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。

  • 2 つの Kinesis Data Streams (ExampleInputStreamExampleOutputStream)

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

Kinesis ストリームと Amazon S3 バケットは、コンソールを使用して作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

  • 「Amazon Kinesis Data Streamsデベロッパーガイド」の「データストリームの作成および更新」 データストリームExampleInputStreamExampleOutputStreamに名前を付けます。

  • Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。ログイン名 (ka-app-code-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/TumblingWindow ディレクトリに移動します。

アプリケーションコードはTumblingWindowStreamingJob.javaファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 以下のインポートステートメントを追加します。

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • このアプリケーションでは、timeWindow演算子を使用して 5 秒間のタンブリングウィンドウにおける各ストックコードのカウント値を求めます。次のコードは演算子を作成し、集約されたデータを新しい Kinesis Data Streamsシンクに送信します。

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
アプリケーションコードをコンパイルする

アプリケーションをコンパイルするには、次の操作を行います。

  1. Java と Maven がまだインストールされていない場合は、インストールします。詳細については、開始方法 (DataStream API)チュートリアルの「前提条件」を参照してください。

  2. 次のコマンドを使用して、アプリケーションをコンパイルします。

    mvn package -Dflink.version=1.15.3
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。

アプリケーションをコンパイルすると、アプリケーション JAR ファイル (target/aws-kinesis-analytics-java-apps-1.0.jar) が作成されます。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

      注記

      Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  5. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  6. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

アプリケーションを実行する
  1. MyApplication ページで、 の実行 を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。

  2. アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。

CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

AWS リソースをクリーンアップする

このセクションでは、「タンブリングウィンドウ」チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: スライディングウィンドウ

注記

現在の例については、「」を参照してください

注記

この演習に必要な前提条件を設定するには、まず開始方法 (DataStream API)演習を完了してください。

依存リソースを作成する

この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。

  • 2 つの Kinesis Data Streams (ExampleInputStreamExampleOutputStream)

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

Kinesis ストリームと Amazon S3 バケットは、コンソールを使用して作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

  • 「Amazon Kinesis Data Streamsデベロッパーガイド」の「データストリームの作成および更新」 データストリームExampleInputStreamExampleOutputStreamに名前を付けます。

  • Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。ログイン名 (ka-app-code-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/SlidingWindow ディレクトリに移動します。

アプリケーションコードはSlidingWindowStreamingJobWithParallelism.javaファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • このアプリケーションでは、timeWindow演算子を使用して、5 秒ずつスライドする 10 秒のウィンドウで各銘柄コードの最小値を求めます。次のコードは演算子を作成し、集約されたデータを新しい Kinesis Data Streamsシンクに送信します。

  • 以下のインポートステートメントを追加します。

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • このアプリケーションでは、timeWindow演算子を使用して 5 秒間のタンブリングウィンドウにおける各ストックコードのカウント値を求めます。次のコードは演算子を作成し、集約されたデータを新しい Kinesis Data Streamsシンクに送信します。

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
アプリケーションコードをコンパイルする

アプリケーションをコンパイルするには、次の操作を行います。

  1. Java と Maven がまだインストールされていない場合は、インストールします。詳細については、開始方法 (DataStream API)チュートリアルの「前提条件」を参照してください。

  2. 次のコマンドを使用して、アプリケーションをコンパイルします。

    mvn package -Dflink.version=1.15.3
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。

アプリケーションをコンパイルすると、アプリケーション JAR ファイル (target/aws-kinesis-analytics-java-apps-1.0.jar) が作成されます。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロードを選択します

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  5. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  6. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

アプリケーションの並列処理を設定する

このアプリケーション例では、タスクの並列実行を使用しています。次のアプリケーションコードはmin演算子の並列処理を設定します。

.setParallelism(3) // Set parallelism for the min operator

アプリケーションの並列処理は、提供された並列処理 (デフォルトは 1) を超えることはできません。アプリケーションの並列処理を増やすには、次の AWS CLI アクションを使用します。

aws kinesisanalyticsv2 update-application --application-name MyApplication --current-application-version-id <VersionId> --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"

DescribeApplication または ListApplicationsアクションを使用して、現在のアプリケーションバージョン ID を取得できます。

アプリケーションを実行する

Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。

CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

AWS リソースをクリーンアップする

このセクションでは、スライディングウィンドウチュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Amazon S3 バケットへの書き込み

この練習では、Kinesis データストリーム をソースとして、Amazon S3 バケットをシンクとして、Managed Service for Apache Flink を作成します。シンクを使用すると、Amazon S3 コンソール内のアプリケーションの出力を検証できます。

注記

この演習に必要な前提条件を設定するには、まず開始方法 (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-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。Amazon S3 バケットで 2 つのフォルダ (codedata) を作成します。

アプリケーションは、次の CloudWatch リソースがまだ存在しない場合、作成します。

  • /AWS/KinesisAnalytics-java/MyApplicationという名前のロググループ。

  • kinesis-analytics-log-stream というログストリーム。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/S3Sink ディレクトリに移動します。

アプリケーションコードはS3StreamingSinkJob.javaファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 以下のインポートステートメントを追加してください。

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
  • アプリケーションは Apache Flink S3 シンクを使用して Amazon S3 に書き込みます。

    シンクはタンブリングウィンドウでメッセージを読み取り、メッセージを S3 バケットオブジェクトにエンコードし、エンコードされたオブジェクトを S3 シンクに送信します。次のコードは、Amazon S3 に送信するオブジェクトをエンコードします。

    input.map(value -> { // Parse the JSON JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class); return new Tuple2<>(jsonNode.get("ticker").toString(), 1); }).returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v -> v.f0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.minutes(1))) .sum(1) // Count the appearances by ticker per partition .map(value -> value.f0 + " count: " + value.f1.toString() + "\n") .addSink(createS3SinkFromStaticConfig());
注記

アプリケーションは Flink StreamingFileSink オブジェクトを使用して Amazon S3 に書き込みます。の詳細についてはStreamingFileSink、Apache Flink StreamingFileSink ドキュメントの「」を参照してください。 https://nightlies.apache.org/flink/flink-docs-release-1.13/

アプリケーションコードの変更

このセクションでは、Amazon S3 バケットに出力を書き込むようにアプリケーションコードを変更します。

アプリケーションの出力場所を指定するように次の行をユーザー名で更新してください。

private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
アプリケーションコードをコンパイルする

アプリケーションをコンパイルするには、次の操作を行います。

  1. Java と Maven がまだインストールされていない場合は、インストールします。詳細については、開始方法 (DataStream API)チュートリアルの「前提条件」を参照してください。

  2. 次のコマンドを使用して、アプリケーションをコンパイルします。

    mvn package -Dflink.version=1.15.3

アプリケーションをコンパイルすると、アプリケーション JAR ファイル (target/aws-kinesis-analytics-java-apps-1.0.jar) が作成されます。

注記

提供されているソースコードは Java 11 のライブラリーに依存しています。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、コードフォルダに移動して、アップロードを選択します

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

    注記

    コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

    • [アプリケーション名] にはMyApplicationと入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。

  6. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  7. [Create application] を選択します。

注記

コンソールを使用して Managed Service for Apache Flink を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

IAM ポリシーを編集する

IAM ポリシーを編集し、Kinesis データストリームにアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" }, ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、code/aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  5. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  6. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

アプリケーションを実行する
  1. MyApplication ページで、実行 を選択します。「スナップショットなしで実行」オプションを選択したままにして、確定します。

  2. アプリケーションが実行されたら、ページを更新します。コンソールには [Application graph] が示されます。

アプリケーションの出力を確認する

Amazon S3 コンソールで、S3 バケット内のデータフォルダを開きます。

数分後、アプリケーションからの集約データを含むオブジェクトが表示されます。

注記

Flink では、集約はデフォルトで有効になっています。  以下を無効にするには次のコマンドを使用します。

sink.producer.aggregation-enabled' = 'false'
オプション: ソースとシンクをカスタマイズする

このセクションでは、ソースオブジェクトおよびシンクオブジェクトの設定をカスタマイズします。

注記

以下のセクションで説明するコードセクションを変更した後、次の操作を行ってアプリケーションコードをリロードします。

データパーティショニングを設定する

このセクションでは、ストリーミングファイルシンクが S3 バケットに作成するフォルダーの名前を設定します。ストリーミングファイルシンクにバケットアサイナーを追加します。

S3 バケットで作成されたフォルダー名をカスタマイズするには、次の操作を行ってください。

  1. S3StreamingSinkJob.javaファイルの先頭に次のインポートステートメントを追加してください。

    import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy; import org.apache.flink.streaming.api.functions.sink.filesystem.bucketassigners.DateTimeBucketAssigner;
  2. 次のようにcreateS3SinkFromStaticConfig()コード内のメソッドを更新します。

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy(DefaultRollingPolicy.create().build()) .build(); return sink; }

前のコード例では、DateTimeBucketAssignerとカスタム日付形式を使用して S3 バケットにフォルダを作成しました。DateTimeBucketAssignerは現在のシステム時刻を使用してバケット名を作成します。カスタムバケット割り当てを作成して、作成したフォルダ名をさらにカスタマイズする場合は、 を実装するクラスを作成できます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オブジェクトを設定するには、次の操作を行います。

  1. アプリケーションのCheckpointInterval設定を増やしてください。 UpdateApplication アクションの次の入力は、チェックポイント間隔を 10 分に設定します。

    { "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "CheckpointConfigurationUpdate": { "ConfigurationTypeUpdate" : "CUSTOM", "CheckpointIntervalUpdate": 600000 } } }, "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 5 }

    上記のコードを使用するには、現在のアプリケーションバージョンを指定します。ListApplications アクションを使用してアプリケーションバージョンを取得できます。

  2. S3StreamingSinkJob.javaファイルの先頭に次のインポートステートメントを追加します。

    import java.util.concurrent.TimeUnit;
  3. S3StreamingSinkJob.javaファイル内のcreateS3SinkFromStaticConfigメソッドを以下のように更新します。

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy( DefaultRollingPolicy.create() .withRolloverInterval(TimeUnit.MINUTES.toMillis(8)) .withInactivityInterval(TimeUnit.MINUTES.toMillis(5)) .withMaxPartSize(1024 * 1024 * 1024) .build()) .build(); return sink; }

    前述のコード例では、Amazon S3 バケットへの書き込み頻度を 8 分に設定しています。

Apache Flink ストリーミングファイルシンクの詳細については、Apache Flink ドキュメント内のRow-encoded Formatsを参照してください。

AWS リソースをクリーンアップする

このセクションでは、Amazon S3 チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションページで[削除]を選択し、削除を確定します。

Kinesis データストリームを削除する
  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで ロールを選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

チュートリアル: Managed Service for Apache Flink アプリケーションを使用して、MSK クラスター内の 1 つのトピックから VPC 内の別のトピックにデータをレプリケートする

注記

現在の例については、「」を参照してください

次のチュートリアルでは、Amazon MSK クラスターと 2 つのトピックを含む Amazon VPC を作成する方法と、ある Amazon MSK トピックから読み取り、別の Amazon MSK トピックに書き込む 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
  • クラスターのブートストラップサーバーリストを記録します。ブートストラップサーバーのリストは、次のコマンドで取得できます ( を MSK クラスターの ARN ClusterArnに置き換えます)。

    aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn {... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }
  • チュートリアルのステップに従うときは、選択した AWS リージョンをコード、コマンド、コンソールエントリで使用してください。

アプリケーションコードを作成する

このセクションでは、アプリケーション JAR ファイルをダウンロードしてコンパイルします。Java 11 を使用することをお勧めします。

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. アプリケーションコードはamazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.javaファイルに含まれています。コードを調べて、Managed Service for Apache Flink アプリケーションコードの構造を了解することができます。

  4. コマンドライン Maven ツールまたは優先的な開発環境を使用して JAR ファイルを作成します。コマンドライン Maven ツールを使用して JAR ファイルをコンパイルするには、次のように入力します。

    mvn package -Dflink.version=1.15.3

    ビルドが成功する場合、次のファイルが作成されます。

    target/KafkaGettingStartedJob-1.0.jar
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。開発環境を使用している場合は、

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、開始方法 (DataStream API) チュートリアルで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

注記

入門チュートリアルから Amazon S3 バケットを削除した場合は、Apache Flink ストリーミング Java コードをアップロードする手順をもう一度実行してください。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロードを選択します

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した KafkaGettingStartedJob-1.0.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink. で Managed Service for Apache Flink コンソールを開きます。

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink 1.15.2] を選択します。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、KafkaGettingStartedJob-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

    注記

    コンソール ( CloudWatch ログや Amazon VPC など) を使用してアプリケーションリソースを指定すると、コンソールはアプリケーション実行ロールを変更して、それらのリソースへのアクセス許可を付与します。

  4. [プロパティ] で [グループの追加]を選択します。以下のプロパティを入力します。

    グループ ID キー
    KafkaSource トピック AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers 以前に保存したブートストラップサーバーリスト
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    注記

    デフォルト証明書の ssl.truststore.password は「changeit」です。デフォルト証明書を使用している場合は、この値を変更する必要はありません。

    [グループの追加] をもう一度選択します。以下のプロパティを入力します。

    グループ ID キー
    KafkaSink トピック AWS KafkaTutorialTopicDestination
    KafkaSink bootstrap.servers 以前に保存したブートストラップサーバーリスト
    KafkaSink security.protocol SSL
    KafkaSink ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSink ssl.truststore.password changeit
    KafkaSink transaction.timeout.ms 1,000

    アプリケーションコードは上記のアプリケーションプロパティを読み取って、VPC と Amazon MSK クラスターとのやり取りに使用されるソースとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティ」を参照してください。

  5. スナップショット無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。

  6. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  7. CloudWatch ログ記録 で有効化チェックボックスを選択します。

  8. [仮想プライベートクラウド (VPC)] セクションで、アプリケーションに関連する VPC を選択します。アプリケーションが VPC リソースにアクセスするために使用する VPC に関連付けられているサブネットとセキュリティグループを選択します。

  9. [更新] を選択します。

注記

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

宛先トピックにレコードが表示されない場合は、トラブルシューティングトピックのVPC 内のリソースにアクセスできないセクションを参照してください。

例: Kinesis データストリームで EFO コンシューマーを使用する

注記

現在の例については、「」を参照してください

この演習では、拡張ファンアウト (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 を使用します。

注記

この演習に必要な前提条件を設定するには、まず開始方法 (DataStream API)演習を完了してください。

依存リソースを作成する

この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。

  • 2 つの Kinesis Data Streams (ExampleInputStreamExampleOutputStream)

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

Kinesis ストリームと Amazon S3 バケットは、コンソールを使用して作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

  • 「Amazon Kinesis Data Streamsデベロッパーガイド」の「データストリームの作成および更新」 データストリームExampleInputStreamExampleOutputStreamに名前を付けます。

  • Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。ログイン名 (ka-app-code-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/EfoConsumer ディレクトリに移動します。

アプリケーションコードはEfoApplication.javaファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • 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");
アプリケーションコードをコンパイルする

アプリケーションをコンパイルするには、次の操作を行います。

  1. Java と Maven がまだインストールされていない場合は、インストールします。詳細については、開始方法 (DataStream API)チュートリアルの「前提条件」を参照してください。

  2. 次のコマンドを使用して、アプリケーションをコンパイルします。

    mvn package -Dflink.version=1.15.3
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。

アプリケーションをコンパイルすると、アプリケーション JAR ファイル (target/aws-kinesis-analytics-java-apps-1.0.jar) が作成されます。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロードを選択します

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した aws-kinesis-analytics-java-apps-1.0.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

      注記

      Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [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にアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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:*" ] } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、aws-kinesis-analytics-java-apps-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの作成]を選択します。

  5. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    ConsumerConfigProperties flink.stream.recordpublisher EFO
    ConsumerConfigProperties flink.stream.efo.consumername basic-efo-flink-app
    ConsumerConfigProperties INPUT_STREAM ExampleInputStream
    ConsumerConfigProperties flink.inputstream.initpos LATEST
    ConsumerConfigProperties AWS_REGION us-west-2
  6. [プロパティ] で [グループの作成] を選択します。

  7. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    ProducerConfigProperties OUTPUT_STREAM ExampleOutputStream
    ProducerConfigProperties AWS_REGION us-west-2
    ProducerConfigProperties AggregationEnabled false
  8. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  9. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  10. [更新] を選択します。

注記

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 コンソールでコンシューマーの名前 () を確認することもできますbasic-efo-flink-app

AWS リソースをクリーンアップする

このセクションでは、efo Window チュートリアルで作成された AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットの削除
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Firehose への書き込み

注記

現在の例については、「」を参照してください

この演習では、ソースとして Kinesis データストリーム、シンクとして Firehose ストリームを持つ Managed Service for Apache Flink アプリケーションを作成します。シンクを使用すると、Amazon S3 バケット内のアプリケーションの出力を検証できます。

注記

この演習に必要な前提条件を設定するには、まず開始方法 (DataStream API)演習を完了してください。

依存リソースを作成する

このエクササイズで Apache Flink 用 Managed Service を作成する前に、以下の依存リソースを作成します。

  • A Kinesis data stream (ExampleInputStream)

  • アプリケーションが出力を書き込む Firehose ストリーム (ExampleDeliveryStream)。

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

コンソールを使用して、Kinesis ストリーム、Amazon S3 バケット、Firehose ストリームを作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

Apache Flink ストリーミング Java コードをダウンロードして調べる

この例の Java アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/FirehoseSink ディレクトリに移動します。

アプリケーションコードはFirehoseSinkStreamingJob.javaファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • アプリケーションは Firehose シンクを使用して Firehose ストリームにデータを書き込みます。次のスニペットは Firehose シンクを作成します。

    private static KinesisFirehoseSink<String> createFirehoseSinkFromStaticConfig() { Properties sinkProperties = new Properties(); sinkProperties.setProperty(AWS_REGION, region); return KinesisFirehoseSink.<String>builder() .setFirehoseClientProperties(sinkProperties) .setSerializationSchema(new SimpleStringSchema()) .setDeliveryStreamName(outputDeliveryStreamName) .build(); }
アプリケーションコードをコンパイルする

アプリケーションをコンパイルするには、次の操作を行います。

  1. Java と Maven がまだインストールされていない場合は、インストールします。詳細については、開始方法 (DataStream API)チュートリアルの「前提条件」を参照してください。

  2. 次のアプリケーションの Kinesis コネクタを使用するには、Apache Maven をダウンロード、ビルド、インストールする必要があります。詳細については、以前の Apache Flink バージョンでの Apache Flink Kinesis Streams コネクタの使用 を参照してください。

  3. 次のコマンドを使用して、アプリケーションをコンパイルします。

    mvn package -Dflink.version=1.15.3
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。

アプリケーションをコンパイルすると、アプリケーション JAR ファイル (target/aws-kinesis-analytics-java-apps-1.0.jar) が作成されます。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

アプリケーションコードをアップロードするには
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. コンソールで、ka-app-code-<username> バケットを選択し、アップロードを選択します

  3. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した java-getting-started-1.0.jar ファイルに移動します。

  4. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

コンソールまたは AWS CLIのいずれかを使用してManaged Service for Apache Flink を作成し、実行することができます。

注記

コンソールを使用してアプリケーションを作成すると、 AWS Identity and Access Management (IAM) と Amazon CloudWatch Logs リソースが自動的に作成されます。を使用してアプリケーションを作成するときは AWS CLI、これらのリソースを個別に作成します。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. 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 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して アプリケーションを作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

IAM ポリシーを編集する

IAM ポリシーを編集して、Kinesis データストリームと Firehose ストリームにアクセスするためのアクセス許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }
アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、java-getting-started-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  5. CloudWatch のログ記録では、有効化チェックボックスをオンにします。

  6. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

アプリケーションを実行する

Flink ジョブグラフは、アプリケーションを実行し、Apache Flink ダッシュボードを開き、目的の Flink ジョブを選択すると表示できます。

アプリケーションの停止

MyApplication ページで、停止 を選択します。アクションを確認します。

アプリケーションの更新

コンソールを使用して、アプリケーションのプロパティ、モニタリング設定、アプリケーション JAR の場所またはファイル名などのアプリケーション設定を更新できます。

MyApplication ページで、 の設定 を選択します。アプリケーションの設定を更新し、[更新] を選択します。

注記

コンソールでアプリケーションのコードを更新するには、JAR のオブジェクト名を変更するか、別の S3 バケットを使用するか、またはアプリケーションコードの更新セクションで説明されている AWS CLI を使用する必要があります。ファイル名またはバケットが変更されない場合、Configure ページで アップデート を選択してもアプリケーションコードはリロードされません。

アプリケーションの作成と実行 (AWS CLI)

このセクションでは、 を使用して Managed Service for Apache Flink アプリケーション AWS CLI を作成して実行します。

許可ポリシーを作成する

まず、2 つのステートメントを含むアクセス許可ポリシーを作成します。1 つは、ソースストリームの read アクションに対するアクセス許可を付与し、もう 1 つはシンクストリームの write アクションに対するアクセス許可を付与します。次に、IAM ロール (次のセクションで作成) にポリシーをアタッチします。そのため、 Managed Service for Apache Flinkがこのロールを引き受けると、ソースストリームからの読み取りとシンクストリームへの書き込みを行うために必要なアクセス許可がサービスに付与されます。

次のコードを使用して AKReadSourceStreamWriteSinkStream アクセス許可ポリシーを作成します。 を Amazon S3 バケットの作成に使用したユーザー名に置き換え、アプリケーションコードを保存します。Amazon リソースネーム (ARN) のアカウント ID (012345678901) を自分のアカウント ID に置き換えます。

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

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

注記

その他のアマゾンサービスにアクセスするには、 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 ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。[このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。[ユースケースの選択] で、[Kinesis Analytics ] を選択します。

    [Next: Permissions] (次のステップ: 許可) を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  5. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  6. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。このため、前のステップで作成したポリシー、許可ポリシーを作成する をアタッチします。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStream ポリシーを選択し、ポリシー をアタッチ を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールを作成する step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

Managed Service for Apache Flink アプリケーションを作成する
  1. 次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス を、前の依存リソースを作成するセクションka-app-code-<username>で選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" } } } }
  2. 前述のリクエストを指定して CreateApplication アクションを実行し、アプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、StartApplication アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、StopApplication アクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "test" }
  2. 次のリクエストを指定して StopApplication アクションを実行し、アプリケーションを停止します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「」を参照してくださいアプリケーションログ記録の設定

アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 UpdateApplication AWS CLI アクションを使用します。

を使用するには AWS CLI、Amazon S3 バケットから以前のコードパッケージを削除し、新しいバージョンをアップロードして、同じ Amazon S3 バケットとオブジェクト名UpdateApplicationを指定して を呼び出します。 Amazon S3

以下の UpdateApplication アクションのサンプル・リクエストは、アプリケーション・コードを再読み込 み、アプリケーションを再起動します。CurrentApplicationVersionId を現在のアプリケーションバージョンに更新します。ListApplications または DescribeApplication アクションを使用して、現在のアプリケーションバージョンを確認できます。バケット名のサフィックス (「<username>」) を、 依存リソースを作成する セクションで選択したサフィックスで更新します。

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }
AWS リソースをクリーンアップする

このセクションでは、入門チュートリアルで作成した AWS リソースをクリーンアップする手順について説明します。

Managed Service for Apache Flink アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. [設定] を選択します。

  4. スナップショットセクションで「無効」を選択して、更新を選択します。

  5. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、「Kinesis ストリームの削除」を選択し、削除を確定します。

Firehose ストリームを削除する
  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Firehose パネルで、 を選択しますExampleDeliveryStream

  3. ExampleDeliveryStream ページで、Firehose ストリームの削除を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

  4. Firehose ストリームの送信先に Amazon S3 バケットを作成した場合は、そのバケットも削除します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. Firehose ストリームの新しいポリシーを作成した場合は、そのポリシーも削除します。

  7. ナビゲーションバーで [ロール]を選択します。

  8. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  9. [ロールの削除] を選択し、削除を確定します。

  10. Firehose ストリーム用に新しいロールを作成した場合は、そのロールも削除します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: 別のアカウントの Kinesis ストリームからの読み取り

注記

現在の例については、「」を参照してください

この例は、別のアカウントの Kinesis ストリームからデータを読み取る Managed Service for Apache Flinkアプリケーションを作成する方法を示しています。この例では、1 つのアカウントをソース Kinesis ストリームに使用し、もう 1 つのアカウントを Managed Service for Apache Flinkとsink Kinesis streamに使用します。

前提条件
  • このチュートリアルでは、「Getting Started」の例を変更して、別のアカウントの Kinesis ストリームからデータを読み取ります。続行する前に開始方法 (DataStream API)チュートリアルを完了してください。

  • このチュートリアルを完了するには、2 つの AWS アカウントが必要です。1 つはソースストリーム用、もう 1 つはアプリケーションとシンクストリーム用です。アプリケーションとシンクストリーム AWS の入門チュートリアルに使用したアカウントを使用します。ソースストリームには別の AWS アカウントを使用してください。

セットアップ

名前付きプロファイルを使用して 2 つの AWS アカウントにアクセスします。 AWS 認証情報と設定ファイルを変更して、2 つのアカウントのリージョンと接続情報を含む 2 つのプロファイルを含めます。

次の認証情報ファイルの例には、ka-source-stream-account-profileka-sink-stream-account-profile2つの名前付きプロファイルが含まれています。シンクストリームアカウントには、入門チュートリアルで使用したアカウントを使用してください。

[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 ユーザーガイドの次のトピックを参照してください。

シンクアカウントのロールとポリシー
  1. 入門チュートリアルからkinesis-analytics-service-MyApplication-us-west-2ポリシーを編集します。このポリシーにより、ソース ストリームを読み取るためにソースアカウントのロールを引き受けることができます。

    注記

    コンソールを使用してアプリケーションを作成する場合、コンソールはkinesis-analytics-service-<application name>-<application region>というポリシーとkinesisanalytics-<application name>-<application region>というロールを作成します。

    以下の強調表示されたセクションをポリシーに追加します。サンプルアカウント ID (SOURCE01234567) をソースストリームに使用するアカウントID に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRoleInSourceAccount", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role" }, { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] } ] }
  2. サービスロールの Amazon リソースネーム (ARN) をメモしておきます。これは次のセクションで必要になります。[the IAM role ARN number (IAM ロールの ARN 番号)] は、次のようになります。

    arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2
ソースアカウントのロールとポリシー
  1. 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" } ] }
  2. MF-Source-Stream-Roleという名前のソースアカウントでロールを作成します。Managed Flinkユースケースを使用してロールを作成するには、次の手順を実行します。

    1. IAM 管理コンソールで、ロールの作成を選択します。

    2. [Create role] (ロールの作成) ページで、AWS [AWS Service] (AWS サービス) を選択します。サービスリストで Kinesisを選択します。

    3. ユースケースの選択 セクションで、Managed Service for Apache Flinkを選択します。

    4. [Next: Permissions] (次のステップ: 許可) を選択します。

    5. 次の手順を実行して、前のステップで作成した KA-Source-Stream-Policy 許可ポリシーを追加します。[Next:Tags] (次のステップ: タグ) を選択します。

    6. [次へ: レビュー] を選択します。

    7. ロールに KA-Source-Stream-Role という名前を付けます。アプリケーションは、 へのアクセスにこのロールを使用します。

  3. シンクアカウントのkinesis-analytics-MyApplication-us-west-2ARNをソースアカウントのKA-Source-Stream-Role ロールの信頼関係に追加します。

    1. IAM コンソールの KA-Source-Stream-Role を開きます。

    2. [Trust Relationships] タブを選択します。

    3. [Edit trust relationship (信頼関係の編集)] を選択します。

    4. 信頼関係には、次のコードを使用します。サンプルのアカウント ID (SINK012345678) を自分のアカウント ID に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2" }, "Action": "sts:AssumeRole" } ] }
Python スクリプトを更新する

このセクションでは、ソースアカウントプロファイルを使用するようにサンプルデータを生成するPython 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"); } }
アプリケーションを構築、アップロード、実行する

アプリケーションをセットアップするには、以下を実行します。

  1. pom.xmlファイルのあるディレクトリで次のコマンドを実行して、アプリケーションを再構築します。

    mvn package -Dflink.version=1.15.3
  2. Amazon Simple Storage Service (Amazon S3) バケットから以前の JAR ファイルを削除して、S3 バケットに新しいaws-kinesis-analytics-java-apps-1.0.jarファイルをアップロードします。

  3. Managed Service for Apache Flink consoleコンソールのアプリケーションページで、設定更新 を選択してアプリケーション JAR ファイルをリロードします。

  4. stock.pyスクリプトを実行してソースストリームにデータを送信します。

    python stock.py

アプリケーションは別のアカウントの Kinesis ストリームからデータを読み取ります。

ExampleOutputStream コンソールで PutRecords.Bytes メトリックスをチェックして、アプリケーションが動作していることを確認します。出力ストリームに活動があれば、アプリケーションは正常に運行しています。

チュートリアル: Amazon MSK でのカスタムトラストストアの使用

注記

現在の例については、「」を参照してください

現在のデータソース API

現在のデータソース APIs を使用している場合、アプリケーションはここで説明する Amazon MSK Config Providers ユーティリティを活用できます。これにより、 KafkaSource 関数は Amazon S3 の相互 TLS のキーストアと信頼ストアにアクセスできます。

... // define names of config providers: builder.setProperty("config.providers", "secretsmanager,s3import"); // provide implementation classes for each provider: builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider"); builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider"); String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString(); String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString(); String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString(); String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString(); String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString(); String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString(); String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString(); // region, etc.. builder.setProperty("config.providers.s3import.param.region", region); // properties builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}"); builder.setProperty("ssl.keystore.type", "PKCS12"); builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}"); builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); ...

詳細とウォークスルーについては、こちらをご覧ください。

レガシー SourceFunction APIs

レガシー SourceFunction APIs を使用している場合、アプリケーションはカスタム信頼ストアをロードするために openメソッドを上書きするカスタムシリアル化スキーマと逆シリアル化スキーマを使用します。これにより、アプリケーションが再起動したり、スレッドを置き換えたりした後でも、アプリケーションでトラストストアを使用できるようになります。

カスタムトラストストアは、次のコードを使用して取得および保存されます。

public static void initializeKafkaTruststore() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL inputUrl = classLoader.getResource("kafka.client.truststore.jks"); File dest = new File("/tmp/kafka.client.truststore.jks"); try { FileUtils.copyURLToFile(inputUrl, dest); } catch (Exception ex) { throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex); } }
注記

Apache Flink では、トラストストアがJKS 形式である必要があります。

注記

この開始方法 (DataStream API)演習に必要な前提条件を設定するには、まず演習を完了してください。

次のチュートリアルでは、カスタム、プライベート、またはセルフホストの認証局 (CA) が発行したサーバー証明書を使用する Kafka クラスターに安全に接続する (転送中の暗号化) 方法を示しています。

Kafka クライアントを TLS 経由で Kafka クラスターに安全に接続するには、Kafka クライアント (Flink アプリケーションの例など) は、Kafka クラスターのサーバー証明書 (発行 CA からルートレベル CA まで) によって提示される完全な信頼チェーンを信頼する必要があります。カスタムトラストストアの例として、相互 TLS (MTLS) 認証が有効になっている Amazon MSK クラスターを使用します。これは、MSK クラスターノードが AWS 、 Certificate Manager Private Certificate Authority (ACM Private CA) によって発行されたサーバー証明書を使用することを意味します。この証明書は、アカウントとリージョンに対してプライベートであるため、Flink アプリケーションを実行する Java 仮想マシン (JVM) のデフォルトの信頼ストアでは信頼されません。

注記
  • キーストアは、検証のためにアプリケーションがサーバーまたはクライアントの両方に提示する必要があるプライベートキーと ID 証明書を保存するために使用されます。

  • トラストストアは、サーバーによって SSL 接続で提示された証明書を検証する認定機関 (CA) からの証明書を保存するために使用されます。

このチュートリアルの技術は、Managed Service for Apache Flinkアプリケーションと、次のようなその他の Apache Kafka ソースとのやり取りにも使用されます。

  • でホストされているカスタム Apache Kafka クラスター AWS (Amazon EC2 または Amazon EKS )

  • でホストされている Confluent Kafka クラスター AWS

  • AWS Direct Connectまたは 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 アドレスからのすべてのトラフィックを許可するインバウンドルールがあることを確認します。

  • クラスターのブートストラップサーバーリストを記録します。ブートストラップサーバーのリストは、次のコマンドで取得できます ( を MSK クラスターの ARN ClusterArnに置き換えます)。

    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。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. アプリケーションコードはamazon-kinesis-data-analytics-java-examples/CustomKeystoreファイルに含まれています。コードを調べて、Managed Service for Apache Flinkのコードの構造を了解することができます。

  4. コマンドライン Maven ツールまたは優先的な開発環境を使用して JAR ファイルを作成します。コマンドライン Maven ツールを使用して JAR ファイルをコンパイルするには、次のように入力します。

    mvn package -Dflink.version=1.15.3

    ビルドが成功する場合、次のファイルが作成されます。

    target/flink-app-1.0-SNAPSHOT.jar
    注記

    提供されているソースコードは Java 11 のライブラリーに依存しています。

Apache Flink ストリーミング Java コードをアップロードする

このセクションでは、開始方法 (DataStream API) チュートリアルで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

注記

入門チュートリアルから Amazon S3 バケットを削除した場合は、Apache Flink ストリーミング Java コードをアップロードする手順をもう一度実行してください。

  1. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  2. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した flink-app-1.0-SNAPSHOT.jar ファイルに移動します。

  3. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink 1.15.2] を選択します。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Managed Service for Apache Flink を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、flink-app-1.0-SNAPSHOT.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

    注記

    コンソールを使用してアプリケーションリソース (ログや VPC など) を指定すると、コンソールはアプリケーション実行ロールを変更して、それらのリソースにアクセスする権限を付与します。

  4. [プロパティ] で [グループの追加]を選択します。以下のプロパティを入力します。

    グループ ID キー
    KafkaSource トピック AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers 以前に保存したブートストラップサーバーリスト
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    注記

    デフォルト証明書の ssl.truststore.password は「変更してください」です。デフォルト証明書を使用している場合は、この値を変更する必要はありません。

    グループの追加をもう一度選択します。以下のプロパティを入力します。

    グループ 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 クラスターとのやり取りに使用されるソースとシンクを設定します。プロパティ使用の詳細については、「ランタイムプロパティ」を参照してください。

  5. スナップショット無効 を選択します。これにより、無効なアプリケーション状態データを読み込まずにアプリケーションを簡単に更新できます。

  6. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  7. CloudWatch のログ記録では有効化チェックボックスを選択します。

  8. [仮想プライベートクラウド (VPC)] セクションで、アプリケーションに関連する VPC を選択します。アプリケーションが VPC リソースにアクセスするために使用する VPC に関連付けられているサブネットとセキュリティグループを選択します。

  9. [更新] を選択します。

注記

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

宛先トピックにレコードが表示されない場合は、トラブルシューティングトピックのVPC 内のリソースにアクセスできないセクションを参照してください。

Python の例

次の例では、Apache Flink Table API をしようた Python でアプリケーションを作成する方法を示しています。

例: Python でのタンブリングウィンドウの作成

注記

現在の例については、「」を参照してください

この演習では、タンブリングウィンドウを使用してデータを集約する Python Managed Service for Apache Flinkを作成します。

注記

この演習に必要な前提条件を設定するには、まず開始方法 (Python)演習を完了してください。

依存リソースを作成する

この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。

  • 2 つの Kinesis Data Streams (ExampleInputStreamExampleOutputStream)

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

Kinesis ストリームと Amazon S3 バケットは、コンソールを使用して作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

  • 「Amazon Kinesis Data Streamsデベロッパーガイド」の「データストリームの作成および更新」 データストリームExampleInputStreamExampleOutputStreamに名前を付けます。

  • Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。ログイン名 (ka-app-code-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

注記

このセクションの Python スクリプトでは、 AWS CLIを使用しています。アカウント認証情報とデフォルトのリージョンを使用する AWS CLI ように を設定する必要があります。を設定するには AWS CLI、次のように入力します。

aws configure
  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/python/TumblingWindow ディレクトリに移動します。

アプリケーションコードはtumbling-windows.pyファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis テーブルソースを使用して、ソースストリームから読み取りを行います。次のスニペットは、 create_table 関数を呼び出して Kinesis テーブルソースを作成します。

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    このcreate_table関数は SQL コマンドを使用して、ストリーミングソースに裏付けられたテーブルを作成します。

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos)
  • アプリケーションはこのTumble演算子を使用して、指定されたタンブリングウィンドウ内のレコードを集約し、集計されたレコードをテーブルオブジェクトとして返します。

    tumbling_window_table = ( input_table.window( Tumble.over("10.seconds").on("event_time").alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
  • このアプリケーションは、flink-sql-connector-kinesis-1.15.2.jarからの Kinesis Flink コネクタを使用します。

Apache Flink ストリーミング Python コードを圧縮してアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. 任意の圧縮アプリケーションを使用してtumbling-windows.pyおよびflink-sql-connector-kinesis-1.15.2.jarファイルを圧縮します。アーカイブ myapp.zip に名をつけます。

  2. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  3. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した myapp.zip ファイルに移動します。

  4. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

      注記

      Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、myapp.zipと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のように入力します。

    グループ ID キー
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    [保存] を選択します。

  6. プロパティ で、グループの追加をもう一度選択します。

  7. 次のように入力します。

    グループ ID キー
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. プロパティ で、グループの追加をもう一度選択します。[グループ ID] に、「kinesis.analytics.flink.run.options」と入力します。この特別なプロパティグループは、アプリケーションにコードリソースの場所を指定します。詳細については、「コードファイルの指定」を参照してください。

  9. 次のように入力します。

    グループ ID キー
    kinesis.analytics.flink.run.options python tumbling-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis-1.15.2.jar
  10. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  11. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  12. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

IAM ポリシーを編集する

IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Python でのスライディングウィンドウの作成

注記

現在の例については、「」を参照してください

注記

この演習に必要な前提条件を設定するには、まず開始方法 (Python)演習を完了してください。

依存リソースを作成する

この練習用の Managed Service for Apache Flink を作成する前に、以下の依存リソースを作成します。

  • 2 つの Kinesis Data Streams (ExampleInputStreamExampleOutputStream)

  • アプリケーションのコードを保存するためのAmazon S3バケット (ka-app-code-<username>)

Kinesis ストリームと Amazon S3 バケットは、コンソールを使用して作成できます。これらのリソースの作成手順については、次の各トピックを参照してください。

  • 「Amazon Kinesis Data Streamsデベロッパーガイド」の「データストリームの作成および更新」 データストリームExampleInputStreamExampleOutputStreamに名前を付けます。

  • Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。ログイン名 (ka-app-code-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

注記

このセクションの Python スクリプトでは、 AWS CLIを使用しています。アカウント認証情報とデフォルトのリージョンを使用する AWS CLI ように を設定する必要があります。を設定するには AWS CLI、次のように入力します。

aws configure
  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/>amazon-kinesis-data-analytics-java-examples
  3. amazon-kinesis-data-analytics-java-examples/python/SlidingWindow ディレクトリに移動します。

アプリケーションコードはsliding-windows.pyファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis テーブルソースを使用して、ソースストリームから読み取りを行います。次のスニペットは、 create_input_table 関数を呼び出して Kinesis テーブルソースを作成します。

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    このcreate_input_table関数は SQL コマンドを使用して、ストリーミングソースに裏付けられたテーブルを作成します。

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos) }
  • アプリケーションはこのSlide演算子を使用して、指定されたスライディングウィンドウ内のレコードを集約し、集計されたレコードをテーブルオブジェクトとして返します。

    sliding_window_table = ( input_table .window( Slide.over("10.seconds") .every("5.seconds") .on("event_time") .alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time") )
  • アプリケーションは、flink-sql-connector-kinesis-1.15.2.jar ファイルから Kinesis Flink コネクタを使用します。

Apache Flink ストリーミング Python コードを圧縮してアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

このセクションでは、Python アプリケーションをパッケージ化する方法について説明します。

  1. 任意の圧縮アプリケーションを使用してsliding-windows.pyおよびflink-sql-connector-kinesis-1.15.2.jarファイルを圧縮します。アーカイブ myapp.zip に名をつけます。

  2. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  3. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した myapp.zip ファイルに移動します。

  4. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

      注記

      Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、myapp.zipと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    [保存] を選択します。

  6. プロパティで、グループの追加をもう一度選択します。

  7. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. プロパティ で、グループの追加をもう一度選択します。[グループ ID] に、「kinesis.analytics.flink.run.options」と入力します。この特別なプロパティグループは、アプリケーションにコードリソースの場所を指定します。詳細については、「コードファイルの指定」を参照してください。

  9. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    kinesis.analytics.flink.run.options python sliding-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis_1.15.2.jar
  10. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  11. CloudWatch のログ記録では有効化チェックボックスをオンにします。

  12. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

IAM ポリシーを編集する

IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Python で Amazon S3 にストリーミングデータを送信する

注記

現在の例については、「」を参照してください

この演習では、Amazon Simple Storage Service シンクにデータをストリーミングするPython 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-<username> など) を追加して、Amazon S3 バケットにグローバルに一意の名前を付けます。

サンプルレコードを入力ストリームに書き込む

このセクションでは、Python スクリプトを使用して、アプリケーションが処理するサンプルレコードをストリームに書き込みます。

注記

このセクションでは AWS SDK for Python (Boto) が必要です。

注記

このセクションの Python スクリプトでは、 AWS CLIを使用しています。アカウント認証情報とデフォルトのリージョンを使用する AWS CLI ように を設定する必要があります。を設定するには AWS CLI、次のように入力します。

aws configure
  1. 次の内容で、stock.py という名前のファイルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py スクリプトを実行します。

    $ python stock.py

    チュートリアルの残りの部分を完了する間、スクリプトを実行し続けてください。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/python/S3Sink ディレクトリに移動します。

アプリケーションコードはstreaming-file-sink.pyファイルに含まれています。アプリケーションコードに関して、以下の点に注意してください。

  • アプリケーションは Kinesis テーブルソースを使用して、ソースストリームから読み取りを行います。次のスニペットは、 create_source_table 関数を呼び出して Kinesis テーブルソースを作成します。

    table_env.execute_sql( create_source_table(input_table_name, input_stream, input_region, stream_initpos) )

    このcreate_source_table関数は SQL コマンドを使用して、ストリーミングソースに裏付けられたテーブルを作成します。

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  • アプリケーションはfilesystem演算子を使用して Amazon S3 バケットにレコードを送信します。

    def create_sink_table(table_name, bucket_name): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time VARCHAR(64) ) PARTITIONED BY (ticker) WITH ( 'connector'='filesystem', 'path'='s3a://{1}/', 'format'='json', 'sink.partition-commit.policy.kind'='success-file', 'sink.partition-commit.delay' = '1 min' ) """.format(table_name, bucket_name)
  • アプリケーションは、flink-sql-connector-kinesis-1.15.2.jar ファイルから Kinesis Flink コネクタを使用します。

Apache Flink ストリーミング Python コードを圧縮してアップロードする

このセクションでは、依存リソースを作成する のセクションで作成した Amazon S3 バケットにアプリケーションコードをアップロードします。

  1. お好みの圧縮アプリケーションを使用して、 streaming-file-sink.pyおよび flink-sql-connector-kinesis-1.15.2.jar ファイルを圧縮します。アーカイブ myapp.zip に名をつけます。

  2. Amazon S3 コンソールで、ka-app-code-<username> バケットを選択し、アップロード を選択します。

  3. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した myapp.zip ファイルに移動します。

  4. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

Managed Service for Apache Flink アプリケーションを作成して実行する

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

      注記

      Apache Flink 用 Managed Serviceは Apache Flink バージョン 1.15.2 を使用しています。

    • バージョンプルダウンは Apache Flink バージョン 1.15.2 (推奨バージョン) のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、myapp.zipと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    [保存] を選択します。

  6. プロパティ で、グループの追加をもう一度選択します。[グループ ID] に、「kinesis.analytics.flink.run.options」と入力します。この特別なプロパティグループは、アプリケーションにコードリソースの場所を指定します。詳細については、「コードファイルの指定」を参照してください。

  7. 次のアプリケーションのプロパティと値を入力します。

    グループ ID キー
    kinesis.analytics.flink.run.options python streaming-file-sink.py
    kinesis.analytics.flink.run.options jarfile S3Sink/lib/flink-sql-connector-kinesis-1.15.2.jar
  8. プロパティ で、グループの追加をもう一度選択します。[グループ ID] に、「sink.config.0」と入力します。この特別なプロパティグループは、アプリケーションにコードリソースの場所を指定します。詳細については、「コードファイルの指定」を参照してください。

  9. 次のアプリケーションプロパティと値を入力します (bucket-nameをAmazon S3 バケットの実際の名前に置き換えてください)。

    グループ ID キー
    sink.config.0 output.bucket.name bucket-name
  10. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  11. CloudWatch のログ記録では、有効化チェックボックスをオンにします。

  12. [更新] を選択します。

注記

CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

このログストリームはアプリケーションのモニターに使用されます。このログストリームは、アプリケーションの結果の送信に使用されたログストリームとは異なります。

IAM ポリシーを編集する

IAM ポリシーを編集し、Kinesis Data Streamsにアクセスするための許可を追加します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. Kinesis コンソール (https://console.aws.amazon.com/kinesis) を開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

Scala の例

以下の例では、Scala を使用した Apache Flink を使用してアプリケーションを作成する方法を示しています。

例: Scala でのタンブリングウィンドウの作成

注記

現在の例については、「」を参照してください

注記

バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションが Scala の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。

Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteenを参照してください。

この演習では、Scala 3.2.0 と Flink の Java DataStream API を使用するシンプルなストリーミングアプリケーションを作成します。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用して集約し、結果を出力Kinesisストリームに書き込みます。

注記

この練習に必要な前提条件を設定するには、まずGetting Started (Scala)の練習を完了してください。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/TumblingWindow ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • build.sbtファイルには、Managed Service for Apache Flink ライブラリなど、アプリケーションの設定と依存関係に関する情報が含まれています。

  • この BasicStreamingJob.scala ファイルには、アプリケーションの機能を定義するメインメソッドが含まれています。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    また、アプリケーションは Kinesis シンクを使用して結果ストリームに書き込みます。次のスニペットでは、Kinesis シンクが作成されます。

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • アプリケーションはウィンドウ演算子を使用して、5 秒間のタンブリングウィンドウにおける各銘柄記号の値を求めます。次のコードは演算子を作成し、集約されたデータを新しい Kinesis Data Streamsシンクに送信します。

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Int](jsonNode.get("ticker").toString, 1) } .returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v => v.f0) // Logically partition the stream for each ticker .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) .sum(1) // Sum the number of tickers per partition .map { value => value.f0 + "," + value.f1.toString + "\n" } .sinkTo(createSink)
  • アプリケーションは、 StreamExecutionEnvironment オブジェクトを使用して外部リソースにアクセスするためのソースコネクタとシンクコネクタを作成します。

  • アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。

アプリケーション・コードをコンパイルしてアップロードするには

このセクションでは、アプリケーションコードをコンパイルして Amazon S3 バケットにアップロードします。

アプリケーションコードのコンパイル

SBT ビルドツールを使用して、アプリケーションの Scala コードをビルドします。SBTをインストールするには、Install sbt with cs setupを参照してください。また、Java 開発キット(JDK)をインストールする必要があります。演習を完了するための前提条件 を参照してください。

  1. アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。SBT を使用してコードをコンパイルしてパッケージ化できます。

    sbt assembly
  2. アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

    target/scala-3.2.0/tumbling-window-scala-1.0.jar
Apache Flink Streaming Scala Code のアップロード

このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. ka-app-code-<username>バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した tumbling-window-scala-1.0.jar ファイルに移動します。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My Scala test app と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する

アプリケーションを設定するには、次の手順に従います。

アプリケーションを構成するには
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、tumbling-window-scala-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のように入力します。

    グループ ID キー
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    [保存] を選択します。

  6. プロパティ で、グループの追加をもう一度選択します。

  7. 次のように入力します。

    グループ ID キー
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  9. CloudWatch ログ記録 で、有効化チェックボックスを選択します。

  10. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

IAM ポリシーを編集する

Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。

IAM ポリシーを編集して S3 バケット権限を追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

IAM ロールを作成する

このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取り、シンクストリームに書き込むために想定できる IAM ロールを作成します。

Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。IAM ロールを介してこれらの許可を付与します。各 IAM ロールには、2 つのポリシーがアタッチされます。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。

前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。

IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。

  4. [このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。

  5. [ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。

  6. [Next: Permissions] (次のステップ: 許可) を選択します。

  7. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  8. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  9. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStreamポリシーを選択し、[ポリシーを添付]を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールの作成 step-by-step 手順については、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アクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "tumbling_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、 StopApplicationアクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "tumbling_window" }
  2. 前述のリクエストを指定して StopApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「アプリケーションログ記録のセットアップ」を参照してください。

環境プロパティを更新する

このセクションでは、 UpdateApplicationアクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 CLI UpdateApplication アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Scala でのスライディングウィンドウの作成

注記

現在の例については、「」を参照してください

注記

バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションが Scala の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。

Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteenを参照してください。

この演習では、Scala 3.2.0 と Flink の Java DataStream API を使用するシンプルなストリーミングアプリケーションを作成します。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用して集約し、結果を出力Kinesisストリームに書き込みます。

注記

この練習に必要な前提条件を設定するには、まずGetting Started (Scala)の練習を完了してください。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/SlidingWindow ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • build.sbtファイルには、Managed Service for Apache Flink ライブラリなど、アプリケーションの設定と依存関係に関する情報が含まれています。

  • この BasicStreamingJob.scala ファイルには、アプリケーションの機能を定義するメインメソッドが含まれています。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    また、アプリケーションは Kinesis シンクを使用して結果ストリームに書き込みます。次のスニペットでは、Kinesis シンクが作成されます。

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • アプリケーションはウィンドウ演算子を使用して、5 秒ずつスライドする 10 秒間のウィンドウ内の各銘柄記号の値を求めます。次のコードは演算子を作成し、集約されたデータを新しい Kinesis Data Streamsシンクに送信します。

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Double](jsonNode.get("ticker").toString, jsonNode.get("price").asDouble) } .returns(Types.TUPLE(Types.STRING, Types.DOUBLE)) .keyBy(v => v.f0) // Logically partition the stream for each word .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .min(1) // Calculate minimum price per ticker over the window .map { value => value.f0 + String.format(",%.2f", value.f1) + "\n" } .sinkTo(createSink)
  • アプリケーションは、 StreamExecutionEnvironment オブジェクトを使用して外部リソースにアクセスするためのソースコネクタとシンクコネクタを作成します。

  • アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。

アプリケーション・コードをコンパイルしてアップロードするには

このセクションでは、アプリケーションコードをコンパイルして Amazon S3 バケットにアップロードします。

アプリケーションコードのコンパイル

SBT ビルドツールを使用して、アプリケーションの Scala コードをビルドします。SBTをインストールするには、Install sbt with cs setupを参照してください。また、Java 開発キット(JDK)をインストールする必要があります。演習を完了するための前提条件 を参照してください。

  1. アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。SBT を使用してコードをコンパイルしてパッケージ化できます。

    sbt assembly
  2. アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

    target/scala-3.2.0/sliding-window-scala-1.0.jar
Apache Flink Streaming Scala Code のアップロード

このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. ka-app-code-<username>バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した sliding-window-scala-1.0.jar ファイルに移動します。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My Scala test app と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する

アプリケーションを設定するには、次の手順に従います。

アプリケーションを構成するには
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、sliding-window-scala-1.0.jar.と入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のように入力します。

    グループ ID キー
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    [保存] を選択します。

  6. プロパティ で、グループの追加をもう一度選択します。

  7. 次のように入力します。

    グループ ID キー
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  9. CloudWatch のログ記録では有効化チェックボックスを選択します。

  10. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

IAM ポリシーを編集する

Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。

IAM ポリシーを編集して S3 バケット権限を追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

IAM ロールを作成する

このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取り、シンクストリームに書き込むために想定できる IAM ロールを作成します。

Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。IAM ロールを介してこれらの許可を付与します。各 IAM ロールには、2 つのポリシーがアタッチされます。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。

前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。

IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。

  4. [このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。

  5. [ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。

  6. [Next: Permissions] (次のステップ: 許可) を選択します。

  7. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  8. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  9. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStreamポリシーを選択し、[ポリシーを添付]を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールの作成 step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

アプリケーションの作成

次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding_window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

次のリクエストCreateApplicationで を実行してアプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、 StartApplicationアクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    { "ApplicationName": "sliding_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、 StopApplicationアクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "sliding_window" }
  2. 前述のリクエストを指定して StopApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「アプリケーションログ記録のセットアップ」を参照してください。

環境プロパティを更新する

このセクションでは、 UpdateApplicationアクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 CLI UpdateApplication アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis Streams の削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。

例: Scala で Amazon S3 にストリーミングデータを送信する

注記

現在の例については、「」を参照してください

注記

バージョン 1.15 以降、Flink は Scala フリーになりました。アプリケーションが Scala の任意のバージョンから Java API を使用できるようになっています。Flink は今でも内部的にいくつかの主要コンポーネントで Scala を使用していますが、Scala をユーザーコードのクラスローダーに公開していません。そのため、ユーザーは Scala の依存関係を自分の JAR アーカイブに追加する必要があります。

Flink 1.15 での Scala の変更についての詳しい情報は、Scala Free in One Fifteenを参照してください。

この演習では、Scala 3.2.0 と Flink の Java DataStream API を使用するシンプルなストリーミングアプリケーションを作成します。アプリケーションは Kinesis ストリームからデータを読み取り、スライディングウィンドウを使用してデータを集約し、結果を S3 に書き込みます。

注記

この練習に必要な前提条件を設定するには、まずGetting Started (Scala) の練習を完了してください。Amazon S3 バケット ka-app-code-<username> data/に追加フォルダを作成するだけで済みます。

アプリケーションコードをダウンロードして調べる

この例の Python アプリケーションコードは、 から入手できます GitHub。アプリケーションコードをダウンロードするには、次の操作を行います。

  1. Git クライアントをまだインストールしていない場合は、インストールします。詳細については、「Git のインストール」をご参照ください。

  2. 次のコマンドを使用してリモートリポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/S3Sink ディレクトリに移動します。

アプリケーションコードに関して、以下の点に注意してください。

  • build.sbtファイルには、Managed Service for Apache Flink ライブラリなど、アプリケーションの設定と依存関係に関する情報が含まれています。

  • この BasicStreamingJob.scala ファイルには、アプリケーションの機能を定義するメインメソッドが含まれています。

  • アプリケーションは Kinesis ソースを使用して、ソースストリームから読み取りを行います。次のスニペットでは、Kinesis ソースが作成されます。

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    また、アプリケーションは を使用して Amazon S3 バケットに StreamingFileSink 書き込みます。

    def createSink: StreamingFileSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val s3SinkPath = applicationProperties.get("ProducerConfigProperties").getProperty("s3.sink.path") StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder[String]("UTF-8")) .build() }
  • アプリケーションは、 StreamExecutionEnvironment オブジェクトを使用して外部リソースにアクセスするためのソースコネクタとシンクコネクタを作成します。

  • アプリケーションは、動的アプリケーションプロパティを使用してソースコネクタとシンクコネクタを作成します。アプリケーションのプロパティを読み取ってコネクタを設定します。ランタイムプロパティの詳細については、ランタイムプロパティを参照してください。

アプリケーション・コードをコンパイルしてアップロードするには

このセクションでは、アプリケーションコードをコンパイルして Amazon S3 バケットにアップロードします。

アプリケーションコードのコンパイル

SBT ビルドツールを使用して、アプリケーションの Scala コードをビルドします。SBTをインストールするには、Install sbt with cs setupを参照してください。また、Java 開発キット(JDK)をインストールする必要があります。演習を完了するための前提条件 を参照してください。

  1. アプリケーションコードを使用するには、コードをコンパイルして JAR ファイルにパッケージ化します。SBT を使用してコードをコンパイルしてパッケージ化できます。

    sbt assembly
  2. アプリケーションのコンパイルに成功すると、次のファイルが作成されます。

    target/scala-3.2.0/s3-sink-scala-1.0.jar
Apache Flink Streaming Scala Code のアップロード

このセクションでは、Amazon S3 バケットを作成し、アプリケーションコードをアップロードします。

  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. [バケットを作成] を選択します。

  3. [Bucket name (バケット名)] フィールドにka-app-code-<username>と入力します。バケット名にユーザー名などのサフィックスを追加して、グローバルに一意にします。[次へ] をクリックします。

  4. 設定オプションのステップでは、設定をそのままにし、[次へ] を選択します。

  5. アクセス許可の設定のステップでは、設定をそのままにし、[次へ] を選択します。

  6. [バケットを作成] を選択します。

  7. ka-app-code-<username>バケットを選択し、アップロード を選択します。

  8. ファイルの選択のステップで、[ファイルを追加] を選択します。前のステップで作成した s3-sink-scala-1.0.jar ファイルに移動します。

  9. オブジェクトの設定を変更する必要はないので、[アップロード] を選択してください。

アプリケーションコードが Amazon S3 バケットに保存され、アプリケーションからアクセスできるようになります。

アプリケーションの作成と実行 (コンソール)

以下の手順を実行し、コンソールを使用してアプリケーションを作成、設定、更新、および実行します。

アプリケーションの作成
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flinkのダッシュボードで、「分析アプリケーションの作成」 を選択します。

  3. Managed Service for Apache Flink-アプリケーションの作成」ページで、次のようにアプリケーションの詳細を入力します。

    • [アプリケーション名] には MyApplication と入力します。

    • [Description (説明)] に My java test app と入力します。

    • [ランタイム] には、[Apache Flink] を選択します。

    • バージョンはApache Flink バージョン 1.15.2 (推薦バージョン)のままにしておきます。

  4. [アクセス許可] には、[IAM ロールの作成 / 更新kinesis-analytics-MyApplication-us-west-2] を選択します。

  5. [Create application] を選択します。

注記

コンソールを使用して Apache Flink アプリケーション用 Managed Service を作成する場合は、IAM ロールとポリシーをアプリケーションが自動的に作成するオプションを選択できます。アプリケーションではこのロールとポリシーを使用して、依存リソースにアクセスします。これらの IAM リソースは、次のようにアプリケーション名とリージョンを使用して命名されます。

  • ポリシー: kinesis-analytics-service-MyApplication-us-west-2

  • ロール: kinesisanalytics-MyApplication-us-west-2

アプリケーションを設定する

アプリケーションを設定するには、次の手順に従います。

アプリケーションを構成するには
  1. MyApplication ページで、 の設定 を選択します。

  2. [Configure application] ページで、[Code location] を次のように指定します。

    • [Amazon S3 バケット] で、ka-app-code-<username>と入力します。

    • [Amazon S3 オブジェクトへのパス] で、s3-sink-scala-1.0.jarと入力します。

  3. [Access to application resources] の [Access permissions] では、[Create / update IAM rolekinesis-analytics-MyApplication-us-west-2] を選択します。

  4. [プロパティ] で [グループの追加]を選択します。

  5. 次のように入力します。

    グループ ID キー
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    [保存] を選択します。

  6. [プロパティ] で [グループの追加]を選択します。す。

  7. 次のように入力します。

    グループ ID キー
    ProducerConfigProperties s3.sink.path s3a://ka-app-code-<user-name>/data
  8. [Monitoring] の [Monitoring metrics level] が [Application] に設定されていることを確認します。

  9. CloudWatch ログ記録 で有効化チェックボックスを選択します。

  10. [更新] を選択します。

注記

Amazon CloudWatch ログ記録を有効にすると、Managed Service for Apache Flink によってロググループとログストリームが作成されます。これらのリソースの名前は次のとおりです。

  • ロググループ: /aws/kinesis-analytics/MyApplication

  • ログストリーム: kinesis-analytics-log-stream

IAM ポリシーを編集する

Amazon S3 バケットにアクセスする許可を追加するように IAM ポリシーを編集します。

IAM ポリシーを編集して S3 バケット権限を追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。前のセクションでコンソールによって作成された kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  3. [概要] ページで、[ポリシーの編集] を選択します。[JSON] タブを選択します。

  4. 次のポリシー例で強調表示されているセクションをポリシーに追加します。サンプルのアカウント 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" } ] }

アクセス許可ポリシーを作成する step-by-step 手順については、IAM ユーザーガイドの「チュートリアル: 最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

IAM ロールを作成する

このセクションでは、Managed Service for Apache Flink アプリケーションがソースストリームを読み取り、シンクストリームに書き込むために想定できる IAM ロールを作成します。

Apache Flink 用 Managed Service は、許可なしにはストリームにアクセスできません。IAM ロールを介してこれらの許可を付与します。各 IAM ロールには、2 つのポリシーがアタッチされます。信頼ポリシーは、ロールを引き受けるための許可を Managed Service for Apache Flink 付与し、許可ポリシーは、ロールを引き受けた後に Managed Service for Apache Flink が実行できる事柄を決定します。

前のセクションで作成したアクセス許可ポリシーをこのロールにアタッチします。

IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [ロール] を選択し、続いて [ロールを作成] を選択します。

  3. [信頼されるエンティティの種類を選択] で、[AWS のサービス] を選択します。

  4. [このロールを使用するサービスを選択] で、[Kinesis Analytics] を選択します。

  5. [ユースケースの選択]で、[Managed Service for Apache Flink]を選択します。

  6. [Next: Permissions] (次のステップ: 許可) を選択します。

  7. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review] (次: 確認) を選択します。ロールを作成した後に、アクセス許可ポリシーをアタッチします。

  8. [Create role (ロールの作成)] ページで、ロールの名前MF-stream-rw-role を入力します。[ロールの作成] を選択します。

    これで、MF-stream-rw-role と呼ばれる新しい IAM ロールが作成されます。次に、ロールの信頼ポリシーとアクセス許可ポリシーを更新します。

  9. アクセス許可ポリシーをロールにアタッチします。

    注記

    この演習では、Managed Service for Apache Flink が、Kinesis データストリーム (ソース) からのデータの読み取りと、別の Kinesis データストリームへの出力の書き込みの両方を実行するためにこのロールを引き受けます。前のステップである「許可ポリシーの作成」で作成したロールを添付します。

    1. [概要] ページで、[アクセス許可] タブを選択します。

    2. [Attach Policies (ポリシーのアタッチ)] を選択します。

    3. 検索ボックスにAKReadSourceStreamWriteSinkStream(前のセクションで作成したポリシー) と入力します。

    4. AKReadSourceStreamWriteSinkStreamポリシーを選択し、[ポリシーを添付]を選択します。

これで、アプリケーションがリソースにアクセスするために使用するサービスの実行ロールが作成されました。新しいロールの ARN を書き留めておきます。

ロールを作成する step-by-step 手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。

アプリケーションの作成

次の JSON コードを create_request.json という名前のファイルに保存します。サンプルロールの ARN を、前に作成したロールの ARN に置き換えます。バケット ARN のサフィックス (ユーザー名) を、前のセクションで選択したサフィックスに置き換えます。サービス実行ロールのサンプルのアカウント ID (012345678901) を、自分のアカウント ID に置き換えます。

{ "ApplicationName": "s3_sink", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "s3-sink-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

次のリクエストCreateApplicationで を実行してアプリケーションを作成します。

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

これでアプリケーションが作成されました。次のステップでは、アプリケーションを起動します。

アプリケーションを起動する

このセクションでは、 StartApplicationアクションを使用してアプリケーションを起動します。

アプリケーションを起動するには
  1. 次の JSON コードを start_request.json という名前のファイルに保存します。

    {{ "ApplicationName": "s3_sink", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 前述のリクエストを指定して StartApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが実行されます。Amazon CloudWatch コンソールで Managed Service for Apache Flink メトリクスをチェックして、アプリケーションが動作していることを確認できます。

アプリケーションの停止

このセクションでは、 StopApplicationアクションを使用してアプリケーションを停止します。

アプリケーションを停止するには
  1. 次の JSON コードを stop_request.json という名前のファイルに保存します。

    { "ApplicationName": "s3_sink" }
  2. 前述のリクエストを指定して StopApplication アクションを実行し、アプリケーションを起動します。

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

アプリケーションが停止します。

CloudWatch ログ記録オプションを追加する

を使用して AWS CLI 、Amazon CloudWatch ログストリームをアプリケーションに追加できます。アプリケーションで CloudWatch ログを使用する方法については、「アプリケーションログ記録のセットアップ」を参照してください。

環境プロパティを更新する

このセクションでは、 UpdateApplicationアクションを使用して、アプリケーションコードを再コンパイルせずにアプリケーションの環境プロパティを変更します。この例では、ソースストリームおよびレプリケート先ストリームのリージョンを変更します。

アプリケーションの環境プロパティを更新します
  1. 次の JSON コードを update_properties_request.json という名前のファイルに保存します。

    {"ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } } }
  2. 前述のリクエストでUpdateApplicationアクションを実行し、環境プロパティを更新します。

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
アプリケーションコードの更新

アプリケーションコードを新しいバージョンのコードパッケージで更新する必要がある場合は、 CLI UpdateApplication アクションを使用します。

注記

同じファイル名のアプリケーションコードの新しいバージョンをロードするには、新しいオブジェクトバージョンを指定する必要があります。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 アプリケーションを削除する
  1. https://console.aws.amazon.com/flink で Apache Flink 用 Managed Serviceコンソールを開く

  2. Managed Service for Apache Flink パネルで、 を選択しますMyApplication

  3. アプリケーションのページで[削除]を選択し、削除を確認します。

Kinesis データストリームを削除する
  1. https://console.aws.amazon.com/kinesis」で Kinesis コンソールを開きます。

  2. Kinesis Data Streams パネルで、 を選択しますExampleInputStream

  3. ExampleInputStream ページで、Kinesis ストリームの削除を選択し、削除を確定します。

  4. Kinesis ストリームページで、 を選択しExampleOutputStreamアクション を選択し、削除 を選択し、削除を確定します。

Amazon S3 オブジェクトとバケットを削除する
  1. https://console.aws.amazon.com/s3/でAmazon S3 コンソールを開きます。

  2. ka-app-code-<username> バケットを選択します。

  3. [削除] を選択し、バケット名を入力して削除を確認します。

IAM リソースを削除する
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションバーで、[ポリシー] を選択します。

  3. フィルターコントロールに「kinesis」と入力します。

  4. kinesis-analytics-service-MyApplication-us-west-2 ポリシーを選択します。

  5. [ポリシーアクション]、[削除] の順に選択します。

  6. ナビゲーションバーで [ロール]を選択します。

  7. kinesis-analytics-MyApplication-us-west-2 ロールを選択します。

  8. [ロールの削除] を選択し、削除を確定します。

CloudWatch リソースを削除する
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. ナビゲーションバーで [ログ] を選択します。

  3. /aws/kinesis-analytics/MyApplication ロググループを選択します。

  4. [ロググループの削除]を選択し、削除を確認してください。