

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

# Amazon EMR on EKS での Flink ジョブのメンテナンスとトラブルシューティング
<a name="jobruns-flink-troubleshooting"></a>

以下のセクションでは、実行時間が長い Flink ジョブを維持する方法と、Flink ジョブのいくつかの一般的な問題のトラブルシューティング方法についてのガイダンスを提供します。

# Flink アプリケーションのメンテナンス
<a name="jobruns-flink-maintain"></a>

**Topics**
+ [アップグレードモード](#jobruns-flink-upgrademode)

Flink アプリケーションは通常、数週間、数か月、さらには数年といった長期間の実行を想定して設計されています。長時間実行されるすべてのサービスと同様に、Flink ストリーミングアプリケーションも保守する必要があります。これには、バグ修正、改善、および新しいバージョンの Flink クラスターへの移行が含まれます。

`FlinkDeployment` および `FlinkSessionJob` リソースの仕様が変更された場合は、実行中のアプリケーションをアップグレードする必要があります。そのためには、オペレーターは実行中のジョブを停止し (すでに中断されている場合を除く)、最新のスペックと、ステートフルアプリケーションの場合は前回の実行時の状態で再デプロイします。

ユーザーは、ステートフル アプリケーションの停止および復元時の状態の管理方法を、`JobSpec` の `upgradeMode` の設定で制御します。

## アップグレードモード
<a name="jobruns-flink-upgrademode"></a>

必要に応じて導入

**ステートレス**  
ステートレスアプリケーションは空の状態からアップグレードします。

**最後の状態**  
アプリケーションの状態に関係なく (ジョブが失敗した場合でも) クイックアップグレードでは、常に最新の成功したチェックポイントを使用するため、正常なジョブは必要ありません。HA メタデータが失われた場合は、手動によるリカバリが必要な場合があります。最新のチェックポイントを取得する際にジョブがフォールバックする時間を制限するように `kubernetes.operator.job.upgrade.last-state.max.allowed.checkpoint.age` を設定できます。チェックポイントが設定された値より古い場合は、ジョブを正常にするためにセーブポイントが使用されます。これはセッションモードではサポートされていません。

**セーブポイント**  
アップグレードにセーブポイントを使うと、最大限の安全性とバックアップ/フォークポイントとしての役割を果たすことができます。セーブポイントは、アップグレード処理中に作成されます。セーブポイントを作成するには Flink ジョブが実行中である必要があることに注意してください。ジョブが異常な状態にある場合は、最後のチェックポイントが使用されます (kubernetes.operator.job.upgrade.last-state-fallback.enabled が false に設定されている場合を除く)。最後のチェックポイントが利用できない場合、ジョブのアップグレードは失敗します。

# トラブルシューティング
<a name="jobruns-flink-troubleshoot"></a>

このセクションでは、Amazon EMR on EKS に関する問題をトラブルシューティングする方法について説明します。Amazon EMR に関する一般的な問題をトラブルシューティングする方法については、「Amazon EMR 管理ガイド」の「[Troubleshoot a cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-troubleshoot.html)」を参照してください。
+ [PersistentVolumeClaims (PVC) を使用するジョブのトラブルシューティング](permissions-for-pvc.md)
+ [Amazon EMR on EKS 垂直自動スケーリングのトラブルシューティング](troubleshooting-vas.md)
+ [Amazon EMR on EKS Spark オペレータのトラブルシューティング](troubleshooting-sparkop.md)

## Amazon EMR on EKS での Apache Flink のトラブルシューティング
<a name="jobruns-flink-troubleshooting-apache-flink"></a>

### Helm チャートのインストール時にリソースマッピングが見つからない
<a name="w2aac21c21b7b7b3"></a>

Helm チャートをインストールするときに、次のエラーメッセージが表示されることがあります。

```
Error: INSTALLATION FAILED: pulling from host 1234567890.dkr.ecr.us-west-2.amazonaws.com failed with status code [manifests 6.13.0]: 403 Forbidden Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "flink-operator-serving-cert" namespace: "<the namespace to install your operator>" from "": no matches for kind "Certificate" in version "cert-manager.io/v1"

ensure CRDs are installed first, resource mapping not found for name: "flink-operator-selfsigned-issuer" namespace: "<the namespace to install your operator>" " from "": no matches for kind "Issuer" in version "cert-manager.io/v1"

ensure CRDs are installed first].
```

このエラーを解決するには、cert-manager をインストールして、ウェブフックコンポーネントを追加できるようにします。使用する Amazon EKS クラスターごとに cert-manager をインストールする必要があります。

```
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0
```

### AWS のサービス アクセス拒否エラー
<a name="jobruns-flink-troubleshooting-access-denied"></a>

*access denied* エラーが表示された場合は、Helm チャート `values.yaml` ファイル内の `operatorExecutionRoleArn` の IAM ロールに適切な権限が付与されていることを確認します。また、`FlinkDeployment` 仕様の `executionRoleArn` に記載されている IAM ロールに適切な権限が付与されていることを確認します。

### `FlinkDeployment` がスタックしている
<a name="jobruns-flink-troubleshooting-stuck"></a>

`FlinkDeployment` がずっと停止した状態になる場合は、次の手順を使用して、問題のデプロイを強制的に削除します。

1. デプロイ実行を編集します。

   ```
   kubectl edit -n Flink Namespace flinkdeployments/App Name
   ```

1. このファイナライザーを削除します。

   ```
   finalizers:
     - flinkdeployments.flink.apache.org/finalizer
   ```

1. デプロイを削除します。

   ```
   kubectl delete -n Flink Namespace flinkdeployments/App Name
   ```

### オプトインで Flink アプリケーションを実行するときの s3a AWSBadRequestException の問題 AWS リージョン
<a name="jobruns-flink-troubleshooting-optin-region"></a>

[オプトイン AWS リージョン](https://docs.aws.amazon.com/controltower/latest/userguide/opt-in-region-considerations.html)で Flink アプリケーションを実行すると、次のエラーが表示されることがあります。

```
Caused by: org.apache.hadoop.fs.s3a.AWSBadRequestException: getFileStatus on 
s3://flink.txt: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request 
(Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: ABCDEFGHIJKL; S3 Extended Request ID:
ABCDEFGHIJKLMNOP=; Proxy: null), S3 Extended Request ID: ABCDEFGHIJKLMNOP=:400 Bad Request: Bad Request 
(Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: ABCDEFGHIJKL; S3 Extended Request ID: ABCDEFGHIJKLMNOP=; Proxy: null)
```

```
Caused by: org.apache.hadoop.fs.s3a.AWSBadRequestException: getS3Region on flink-application: software.amazon.awssdk.services.s3.model.S3Exception: null 
(Service: S3, Status Code: 400, Request ID: ABCDEFGHIJKLMNOP, Extended Request ID: ABCDEFGHIJKLMNOPQRST==):null: null 
(Service: S3, Status Code: 400, Request ID: ABCDEFGHIJKLMNOP, Extended Request ID: AHl42uDNaTUFOus/5IIVNvSakBcMjMCH7dd37ky0vE6jhABCDEFGHIJKLMNOPQRST==)
```

これらのエラーを修正するには、`FlinkDeployment` 定義ファイルで次の設定を使用します。

```
spec:
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
    fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME
```

また、SDKv2 認証情報プロバイダーを使用することをお勧めします。

```
fs.s3a.aws.credentials.provider: software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider
```

SDKv1 認証情報プロバイダーを使用する場合は、SDK がオプトインリージョンをサポートしていることを確認してください。詳細については、「[aws-sdk-java GitHub リポジトリ](https://github.com/aws/aws-sdk-java)」を参照してください。

オプトインリージョンで Flink SQL ステートメントを実行するときに `S3 AWSBadRequestException` が表示される場合は、必ず flink 設定仕様で設定 `fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME` を設定してください。

### CN リージョンで Flink セッションジョブを実行するときの S3A AWSBadRequestException
<a name="jobruns-flink-troubleshooting-optin-region"></a>

Amazon EMR リリース 6.15.0～7.2.0 では、CN リージョンで Flink セッションジョブを実行すると、次のエラーメッセージが表示されることがあります。これには中国 (北京) および中国 (寧夏) が含まれます。

```
Error:  {"type":"org.apache.flink.kubernetes.operator.exception.ReconciliationException","message":"org.apache.hadoop.fs.s3a.AWSBadRequestException: 
                    getFileStatus on s3://ABCDPath: software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: 
                    ABCDEFGH:null: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH","additionalMetadata":{},"throwableList":
                    [{"type":"org.apache.hadoop.fs.s3a.AWSBadRequestException","message":"getFileStatus on s3://ABCDPath: software.amazon.awssdk.services.s3.model.S3Exception: 
                    null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH:null: null (Service: S3, Status Code: 400, Request ID: ABCDEFGH, 
                    Extended Request ID: ABCDEFGH","additionalMetadata":{}},{"type":"software.amazon.awssdk.services.s3.model.S3Exception","message":"null (Service: S3, Status Code: 400, 
                    Request ID: ABCDEFGH, Extended Request ID: ABCDEFGH","additionalMetadata":{}}]}
```

この問題は認識されています。チームは、これらのすべてのリリースバージョンで flink オペレータのパッチ適用に取り組んでいます。ただし、パッチが完了する前にこのエラーを修正する場合は、flink オペレータの helm チャートをダウンロードして解凍 (圧縮されたファイルを抽出) し、helm チャートの設定を変更する必要があります。

具体的な手順は次のとおりです。

1. 特にディレクトリを helm チャートのローカルフォルダに変更し、次のコマンドラインを実行して helm チャートをプルして解凍 (抽出) します。

   ```
   helm pull oci://public.ecr.aws/emr-on-eks/flink-kubernetes-operator \
   --version $VERSION \
   --namespace $NAMESPACE
   ```

   ```
   tar -zxvf flink-kubernetes-operator-$VERSION.tgz
   ```

1. helm チャートフォルダに移動し、`templates/flink-operator.yaml` ファイルを見つけます。

1. ConfigMap `flink-operator-config` を検索し、次の `fs.s3a.endpoint.region` 設定を `flink-conf.yaml` に追加します。例えば、次のようになります。

   ```
   {{- if .Values.defaultConfiguration.create }}
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: flink-operator-config
     namespace: {{ .Release.Namespace }}
     labels:
       {{- include "flink-operator.labels" . | nindent 4 }}
   data:
     flink-conf.yaml: |+
   fs.s3a.endpoint.region: {{ .Values.emrContainers.awsRegion }}
   ```

1. ローカル helm チャートをインストールし、ジョブを実行します。