AWS認定資格 WEB問題集&徹底解説機械学習エンジニア アソシエイト(MLA)

Amazon Managed Service for Apache Flink の概要と試験出題ポイントは?

AWSサービスの一つであるAmazon Managed Service for Apache Flinkはどんな内容なのでしょうか?また、AWS認定資格の機械学習エンジニア-アソシエイト(MLA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います

Amazon Managed Service for Apache Flink 徹底解説 | AWS認定試験の頻出ポイントまとめ

1. サービス概要

Amazon Managed Service for Apache Flink(旧 Amazon Kinesis Data Analytics)は、オープンソースのストリーム処理エンジンApache Flinkのアプリケーションを、サーバーやクラスターを管理せずに実行できるフルマネージドサービスです。 2023年8月にKinesis Data Analyticsから名称が変更されましたが、APIやCLI、IAMの権限は従来のまま利用できます。

Kinesis Data StreamsやAmazon MSKから流れてくるデータを継続的に読み取り、集計・結合・フィルタリング・異常検知などの処理を行い、結果をS3、Data Firehose、OpenSearch Service、DynamoDBなどへ出力します。 データを「運ぶ」Data Firehoseや、データを「ためて流す」Kinesis Data Streamsに対し、Flinkはストリームをリアルタイムに「処理・分析する」役割を担います。

なお、旧サービスのうちSQLだけでストリームを処理する「Kinesis Data Analytics for SQL アプリケーション」は提供が終了しています(2025年10月15日に新規作成停止、2026年1月27日以降アプリケーション削除)。後継はManaged Service for Apache Flink(およびStudioノートブック)です。

2. 主な特徴と機能

2.1 Apache Flinkのフルマネージド実行

Java、Scala、Pythonで書いたFlinkアプリケーションをパッケージ(JAR/ZIP)としてS3に置き、サービスに登録するだけで実行できます。 FlinkのDataStream API、Table API、Flink SQLが利用でき、細かな状態管理やタイマー制御が必要ならDataStream API、宣言的に書きたいならSQLやTable APIを選びます。

2.2 Managed Service for Apache Flink Studio

Apache Zeppelinベースのノートブックで、ストリームに対してSQL、Python、Scalaの対話的なクエリを実行できます。 アドホックなデータ探索やプロトタイプ作成に向き、作ったノートブックを長時間稼働するアプリケーションとしてデプロイすることもできます。

2.3 状態管理と正確な処理

Flinkはウィンドウ集計や重複排除のための状態(ステート)を保持しながら処理します。 サービスは状態を定期的にチェックポイントとして自動保存し、障害時にはそこから復旧します。 利用者が任意のタイミングで取得するスナップショットを使えば、アプリケーションの更新や停止・再開の際に状態を引き継げます。 イベント時刻に基づくウィンドウ処理(タンブリング、スライディング、セッション)や、遅れて到着したデータの扱いもFlinkの得意分野です。

2.4 スケーリング

処理能力はKPU(Kinesis Processing Unit)と並列度(Parallelism)で決まります。 自動スケーリングを有効にすると、CPU使用率などに応じて並列度が増減します。ソースのKinesis Data Streamsのシャード数やMSKのパーティション数と並列度のバランスも性能に影響します。

2.5 豊富なコネクター

ソースとしてKinesis Data Streams、Amazon MSK(Apache Kafka)、S3など、シンクとしてS3、Data Firehose、Kinesis Data Streams、OpenSearch Service、DynamoDB、JDBC対応データベースなどにFlinkのコネクターで接続できます。

3. アーキテクチャおよび技術要素

  1. 開発者がFlinkアプリケーションをビルドし、成果物(JAR/ZIP)をS3にアップロードする。
  2. Managed Service for Apache Flinkでアプリケーションを作成し、コードの場所、ランタイム(Flinkのバージョン)、並列度、実行ロールを設定する。
  3. サービスがFlinkのジョブマネージャーとタスクマネージャーに相当する環境をAWS側で用意し、複数AZにまたがる耐障害性を確保して実行する。
  4. アプリケーションはKinesis Data Streams/MSKからレコードを読み取り、ウィンドウ集計、結合、エンリッチメントなどを行う。
  5. 結果をS3、Data Firehose、OpenSearch Service、DynamoDB、別のストリームなどへ出力する。
  6. 状態はチェックポイントで自動保存され、CloudWatchメトリクス/ログで処理の遅延(ラグ)やエラーを監視する。

Kinesis Data Streams+Lambdaでもストリーム処理はできますが、Lambdaはレコードのバッチ単位の処理が中心で、長時間のウィンドウや大きな状態を扱う処理には向きません。 状態を伴う複雑な連続処理や、正確なイベント時刻ベースの集計が要件ならFlinkを選びます。

4. セキュリティと認証・認可

  • サービス実行ロール: アプリケーションがソース(Kinesis/MSK)、シンク(S3、Firehoseなど)、コードを置いたS3、CloudWatch Logsにアクセスするための権限を最小限で付与する。
  • VPC接続: VPC内のMSKクラスターやデータベースに接続する場合は、アプリケーションにVPC(サブネット、セキュリティグループ)を設定する。
  • 暗号化: 実行中の状態データやバックアップは保存時に暗号化される。ソースのKinesis Data StreamsやS3の暗号化(KMS)も合わせて設定する。
  • 転送中の暗号化: MSKへの接続ではTLSやIAM認証を使い、通信を保護する。
  • 監査と監視: 管理API呼び出しはCloudTrailに記録され、アプリケーションのログとメトリクスはCloudWatchで確認できる。

5. 料金形態

料金は、アプリケーションが使用するKPUの時間数を基本に、秒単位で課金されます。データ量ではなく確保した処理能力に対する課金である点が、Data Firehoseと異なります。

  • KPU時間: 1 KPUは1 vCPUと4 GBメモリに相当する。並列度や自動スケーリングの結果に応じてKPU数が変わる。
  • オーケストレーション用KPU: ストリーミングアプリケーションごとに1 KPUが追加で課金される。
  • 実行中アプリケーションのストレージ: 状態の保持などに使うストレージ(KPUあたりの容量)がGB-月で課金される。
  • バックアップ: スナップショットなどの永続バックアップの保存容量が課金される。
  • Studioノートブック: 対話的に利用している間は、オーケストレーション用と開発環境用のKPUが追加される。
  • コスト最適化: 自動スケーリングで必要なときだけKPUを増やす、使わないStudioノートブックを停止する、並列度を処理量に合わせて調整する。

6. よくあるアーキテクチャ・設計パターン

  • リアルタイムダッシュボード: Kinesis Data Streamsのクリックストリームを1分ごとのウィンドウで集計し、OpenSearch Serviceに書き込んで可視化する。
  • ストリーミングETL: MSKのイベントを整形・結合・重複排除し、Data Firehose経由またはFlinkのシンクで直接S3(Iceberg形式など)に書き込み、データレイクを継続的に更新する。
  • 異常検知・不正検知: IoTセンサー値や決済イベントをしきい値やパターンで判定し、異常を検知したらKinesis Data Streams→Lambda→SNSで通知する。
  • ML推論のリアルタイム化: ストリームから特徴量を計算してSageMaker AIのエンドポイントやFeature Storeへ送り、オンライン推論に使う。
  • 旧SQLアプリケーションの移行: 提供終了したKinesis Data Analytics for SQLのクエリを、StudioノートブックのFlink SQLで書き直して移行する。

7. 設定・デプロイ手順(ハンズオン例)

  1. 入力用のKinesis Data Streamsのストリームと、出力先のS3バケットを作成する。
  2. Flinkアプリケーション(例: 1分間のタンブリングウィンドウで件数を集計)をJavaまたはPythonで実装し、ビルドした成果物をS3にアップロードする。
  3. Managed Service for Apache Flinkのコンソールでアプリケーションを作成し、Flinkランタイムのバージョン、コードのS3パス、実行時プロパティ(ストリーム名など)を指定する。
  4. サービス実行ロールにKinesisの読み取り、S3の読み書き、CloudWatch Logsへの書き込み権限を付与する。
  5. 並列度、自動スケーリング、チェックポイントの設定を確認し、アプリケーションを起動する。
  6. テストデータをストリームへ送信し、S3に集計結果が出力されることを確認する。
  7. CloudWatchで処理の遅延やKPU使用状況を監視し、更新時はスナップショットを取得してから新しいコードをデプロイする。

8. 試験で問われやすいポイント

8.1 サービス選択

  • Q: ストリーミングデータに対して、時間ウィンドウ集計や異常検知をリアルタイムで継続的に行いたい。
    A: Amazon Managed Service for Apache Flinkを使う。
  • Q: ストリームを変換せずにS3へ保存するだけでよい。最小の運用負荷にしたい。
    A: Amazon Data Firehoseを使う。Flinkは処理ロジックが必要な場合に選ぶ。
  • Q: Kinesis Data Analytics for SQLアプリケーションで動かしていた処理の移行先は?
    A: Managed Service for Apache Flink(Studioノートブックを使えばFlink SQLで書き直しやすい)。SQLアプリケーションは提供終了済み。
  • Q: Kinesis Data Streams+Lambdaとの使い分けは?
    A: 単純なレコード単位の処理はLambdaで十分。長いウィンドウ、大きな状態、イベント時刻に基づく正確な集計が必要ならFlink。

8.2 データパイプラインの設計(DEA/MLA)

  • Q: MSKのイベントをリアルタイムに整形し、データレイクへ継続的に書き込みたい。
    A: Managed Service for Apache FlinkでMSKを読み取り、S3(またはData Firehose)へ出力する。
  • Q: ストリームから特徴量を計算してリアルタイム推論に使いたい。
    A: Flinkで特徴量を算出し、SageMaker AIのエンドポイントやFeature Storeと連携する。
  • Q: ストリームデータをSQLで対話的に探索したい。
    A: Managed Service for Apache Flink Studioノートブックを使う。

8.3 運用・耐障害性

  • Q: アプリケーションを更新するときに集計途中の状態を失わないようにするには?
    A: スナップショットを取得し、更新後のアプリケーションをスナップショットから再開する。
  • Q: 障害発生時の状態復旧はどう行われる?
    A: 自動的に取得されるチェックポイントから復旧する。
  • Q: 処理が入力に追いつかず遅延が増えている。
    A: 自動スケーリングを有効にする、並列度を上げる、ソースのシャード/パーティション数とのバランスを見直す。

8.4 料金

  • Q: Managed Service for Apache Flinkの課金単位は?
    A: KPU(1 vCPU・4 GBメモリ)の使用時間。アプリケーションごとにオーケストレーション用の1 KPUと、実行中のストレージ・バックアップの料金が加わる。