

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

# Flink 2.2 へのアップグレード: 完全なガイド
<a name="flink-2-2-upgrade-guide"></a>

このガイドでは、Amazon Managed Service for Apache Flink アプリケーションを Flink 1.x から Flink 2.2 にアップグレードするstep-by-stepについて説明します。これは、慎重な計画とテストを必要とする重大な変更を伴うメジャーバージョンアップグレードです。

**メジャーバージョンのアップグレードは一方向です**  
アップグレードオペレーションでは、状態を保存してアプリケーションを Flink 1.x から 2.2 に移動できますが、2.2 状態を使用して 2.2 から 1.x に戻すことはできません。アップグレード後にアプリケーションが異常になった場合は、Rollback API を使用して、最新のスナップショットから元の 1.x 状態の 1.x バージョンに戻ります。

## 前提条件
<a name="upgrade-guide-prerequisites"></a>

アップグレードを開始する前に:
+ 確認 [重大な変更と廃止](flink-2-2.md#flink-2-2-breaking-changes)
+ 確認 [Flink 2.2 アップグレードのステート互換性ガイド](state-compatibility.md)
+ テスト用の非本番環境があることを確認する
+ 現在のアプリケーション設定と依存関係を文書化する

## 移行パスについて
<a name="upgrade-guide-migration-paths"></a>

アップグレードエクスペリエンスは、アプリケーションの Flink 2.2 との互換性によって異なります。これらのパスを理解することは、適切に準備し、現実的な期待を設定するのに役立ちます。

**パス 1: 互換性のあるバイナリとアプリケーションの状態**

**予想されること:**
+ アップグレードオペレーションを呼び出す
+ アプリケーションステータスが遷移した状態で 2.2 への移行を完了します。 `RUNNING` → `UPDATING` → `RUNNING`
+ データ損失や再処理なしですべてのアプリケーション状態を保持する
+ マイナーバージョン移行と同じエクスペリエンス

最適: ステートレスアプリケーションまたは互換性のあるシリアル化を使用するアプリケーション (Avro、互換性のある Protobuf スキーマ、コレクションのない POJOs)

**パス 2: バイナリ非互換性**

**予想されること:**
+ アップグレードオペレーションを呼び出す
+ オペレーションが失敗し、オペレーション API とログを通じてバイナリの非互換性が表示されます。
+ 自動ロールバックが有効になっている場合: アプリケーションは介入なしで数分以内に自動的にロールバックされます
+ 自動ロールバックが無効の場合: アプリケーションはデータ処理なしで実行状態のままになります。手動で古いバージョンにロールバックします。
+ バイナリが修正されたら、[UpdateApplication API](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) を使用して、パス 1 のようなエクスペリエンスを実現します。

最適: Flink ジョブの起動中に検出された削除APIs を使用するアプリケーション

**パス 3: 互換性のないアプリケーションの状態**

**予想されること:**
+ アップグレードオペレーションを呼び出す
+ 移行が最初に成功したように見える
+ 状態復元が失敗すると、アプリケーションは数秒以内に再起動ループに入る
+ 継続的な再起動を示す CloudWatch メトリクスによる障害の検出
+ ロールバックオペレーションを手動で呼び出す
+ ロールバックを開始してから数分以内に本番環境に戻る
+ アプリケーションの [状態移行](state-compatibility.md#state-compat-migration)を確認する

最適: 状態シリアル化の非互換性を持つアプリケーション (コレクションを持つ POJOs、特定の Kryo シリアル化状態)

**注記**  
本番稼働用アプリケーションのレプリカを作成し、本番稼働用アプリケーションと同じステップを実行する前に、レプリカでアップグレードの以下の各フェーズをテストすることを強くお勧めします。

## フェーズ 1: 準備
<a name="upgrade-guide-phase-1"></a>

**アプリケーションコードを更新する**

Flink 2.2 と互換性があるようにアプリケーションコードを更新します。
+ `pom.xml` または で **Flink の依存関係をバージョン 2.2.0 に更新**する `build.gradle`
+ **コネクタの依存関係を Flink 2.2 互換バージョンに更新**する (「」を参照[コネクタの可用性](flink-2-2.md#flink-2-2-connectors))
+ **非推奨の API の使用を削除します**。
  + DataSet API を DataStream API または Table API/SQL に置き換える
  + レガシー `SourceFunction`/`SinkFunction` を FLIP-27 ソースおよび FLIP-143 シンク APIs
  + Scala API の使用を Java API に置き換える
+ **Java 17 への更新**

**更新されたアプリケーションコードをアップロードする**
+ Flink 2.2 の依存関係を使用してアプリケーション JAR を構築する
+ 現在の JAR **とは異なるファイル名**で Amazon S3 にアップロードする (例: `my-app-flink-2.2.jar`)
+ アップグレードステップで使用する S3 バケットとキーを書き留めます。

## フェーズ 2: 自動ロールバックを有効にする
<a name="upgrade-guide-phase-2"></a>

自動ロールバックにより、Amazon Managed Service for Apache Flink は、アップグレードが失敗した場合に自動的に以前のバージョンに戻すことができます。

**自動ロールバックステータスを確認する**

*AWS マネジメントコンソール:*

1. アプリケーションに移動する

1. **設定**の選択

1. **アプリケーション設定**で、**システムのロールバック**が有効になっていることを確認します。

*AWS CLI:*

```
aws kinesisanalyticsv2 describe-application \
    --application-name MyApplication \
    --query 'ApplicationDetail.ApplicationConfigurationDescription.ApplicationSystemRollbackConfigurationDescription.RollbackEnabled'
```

**自動ロールバックを有効にする (有効になっていない場合)**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --application-configuration-update '{
        "ApplicationSystemRollbackConfigurationUpdate": {
            "RollbackEnabledUpdate": true
        }
    }'
```

## フェーズ 3: スナップショットを作成する (オプション)
<a name="upgrade-guide-phase-3"></a>

アプリケーションで自動スナップショットが有効になっている場合は、このステップをスキップできます。それ以外の場合は、アップグレード前にアプリケーションのスナップショットを作成して、アプリケーションの状態を保存します。

**実行中のアプリケーションからスナップショットを作成する**

*AWS マネジメントコンソール:*

1. アプリケーションに移動する

1. **スナップショット**の選択

1. **スナップショットの作成**を選択する

1. スナップショット名を入力する (例: `pre-flink-2.2-upgrade`)

1. **作成**を選択します。

*AWS CLI:*

```
aws kinesisanalyticsv2 create-application-snapshot \
    --application-name MyApplication \
    --snapshot-name pre-flink-2.2-upgrade
```

**スナップショットの作成を確認する**

```
aws kinesisanalyticsv2 describe-application-snapshot \
    --application-name MyApplication \
    --snapshot-name pre-flink-2.2-upgrade
```

`SnapshotStatus` が になるまで待って`READY`から次に進みます。

## フェーズ 4: アプリケーションをアップグレードする
<a name="upgrade-guide-phase-4"></a>

[https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) アクションを使用して Flink アプリケーションをアップグレードできます。

`UpdateApplication` API は複数の方法で呼び出すことができます。
+ ** AWS マネジメントコンソールを使用します。**
  +  AWS マネジメントコンソールのアプリページに移動します。
  + [**設定**] を選択します。
  + 新しいランタイムと起動元のスナップショット (復元設定とも呼ばれる) を選択します。最新のスナップショットからアプリケーションを起動するには、最新の設定を復元設定として使用します。Amazon S3 上にある、アップグレードされた新しいアプリケーション JAR/zip をポイントします。
+ [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalyticsv2/update-application.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalyticsv2/update-application.html) アクション**を使用します AWS CLI**。
+ **を使用します CloudFormation。**
  + `RuntimeEnvironment` フィールドを更新します。以前は、 CloudFormation がアプリケーションを削除して新しいアプリケーションを作成していたため、スナップショットやその他のアプリケーション履歴は失われていました。これで、 が所定の`RuntimeEnvironment`位置に CloudFormation 更新され、アプリケーションは削除されません。
+ ** AWS SDK を使用します。**
  + 選択したプログラミング言語については、SDK のドキュメントを参照してください。「[https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)」を参照してください。

アップグレードは、アプリケーションが `RUNNING` 状態のとき、またはアプリケーションが `READY` 状態で停止しているときに実行できます。Amazon Managed Service for Apache Flink は、元のランタイムバージョンとターゲットランタイムバージョンの互換性を検証します。この互換性チェックは、 `RUNNING` 状態`UpdateApplication`中に を実行したとき、または `READY`状態中にアップグレード`StartApplication`したときに実行されます。

**RUNNING 状態からのアップグレード**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --runtime-environment-update FLINK-2_2 \
    --application-configuration-update '{
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "FileKeyUpdate": "my-app-flink-2.2.jar"
                }
            }
        }
    }'
```

**READY 状態からのアップグレード**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --runtime-environment-update FLINK-2_2 \
    --application-configuration-update '{
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "FileKeyUpdate": "my-app-flink-2.2.jar"
                }
            }
        }
    }'
```

## フェーズ 5: アップグレードをモニタリングする
<a name="upgrade-guide-phase-5"></a>

**互換性チェック**
+ Operations API を使用して、アップグレードのステータスを確認します。ジョブの起動時にバイナリの非互換性や問題がある場合、アップグレードオペレーションは ログで失敗します。
+ アップグレードオペレーションは成功したが、アプリケーションが再起動ループで停止している場合、状態が新しい Flink バージョンと互換性がないか、更新されたコードに問題があることを意味します。状態の非互換性の問題を特定する方法[Flink 2.2 アップグレードのステート互換性ガイド](state-compatibility.md)を確認します。

**アプリケーションのヘルスをモニタリングする**

*アプリケーションの状態:*
+ アプリケーションステータスが遷移するはずです: `RUNNING` → `UPDATING` → `RUNNING`
+ アプリケーションのランタイムを確認します。2.2 の場合、アップグレードオペレーションは成功しました。
+ アプリケーションが にある`RUNNING`が、まだ古いランタイムにある場合、自動ロールバックが開始されました。Operations API はオペレーションを と表示します`FAILED`。ログをチェックして、失敗の例外を見つけます。

さらに、CloudWatch でこれらのメトリクスをモニタリングします。

*再起動メトリクス:*
+ `numRestarts`: 予期しない再起動をモニタリングする — `numRestarts`がゼロで、 `uptime`または が増加している場合、アップグレード`runningTime`は成功します。

*チェックポイントメトリクス:*
+ `lastCheckpointDuration`: アップグレード前の値と似ている必要があります
+ `numberOfFailedCheckpoints`: 0 のままにする必要があります

## フェーズ 6: アプリケーションの動作を検証する
<a name="upgrade-guide-phase-6"></a>

アプリケーションが Flink 2.2 で実行された後:

**機能検証**
+ ソースからデータが読み取られていることを確認する
+ シンクにデータが書き込まれていることを確認する
+ ビジネスロジックが期待される結果を生成することを確認する
+ 出力をアップグレード前のベースラインと比較する

**パフォーマンス検証**
+ レイテンシーメトリクスのモニタリング (end-to-endの処理時間)
+ スループットメトリクスのモニタリング (1 秒あたりのレコード数)
+ チェックポイントの期間とサイズをモニタリングする
+ メモリと CPU 使用率のモニタリング

**24 時間以上実行**

アプリケーションを本番環境で少なくとも 24 時間実行して、以下を確認します。
+ メモリリークなし
+ チェックポイントの動作が安定している
+ 予期しない再起動なし
+ 一貫したスループット

## フェーズ 7: ロールバック手順
<a name="upgrade-guide-phase-7"></a>

アップグレードが失敗するか、アプリケーションが実行されているが異常がある場合は、以前のバージョンにロールバックします。

**自動ロールバック**

自動ロールバックが有効で、起動中にアップグレードが失敗した場合、Amazon Managed Service for Apache Flink は自動的に以前のバージョンに戻ります。

**手動ロールバック**

アプリケーションが実行されているが異常がある場合は、 `RollbackApplication` API を使用します。

*AWS マネジメントコンソール:*

1. アプリケーションに移動する

1. **アクション**の選択 → **ロールバック**

1. ロールバックを確認する

*AWS CLI:*

```
aws kinesisanalyticsv2 rollback-application \
    --application-name MyApplication \
    --current-application-version-id <version-id>
```

**ロールバック中に何が起こるか:**
+ アプリケーションが停止する
+ ランタイムが以前の Flink バージョンに戻る
+ アプリケーションコードが以前の JAR に戻る
+ アップグレード**前に**最後に成功したスナップショットからアプリケーションが再起動する

**重要**  
Flink 1.x で Flink 2.2 スナップショットを復元することはできません
ロールバックは、アップグレード前に作成されたスナップショットを使用します。
アップグレードする前に必ずスナップショットを作成する (フェーズ 3)

## 次の手順
<a name="upgrade-guide-next-steps"></a>

アップグレード中の質問や問題については、「」を参照[Managed Service for Apache Flink をトラブルシューティングする](troubleshooting.md)するか、 AWS サポートにお問い合わせください。