AWS Batch のコンピューティング環境が INVALID 状態です。このエラーをトラブルシューティングする方法を教えてください。
簡単な説明
次のエラーが表示されます。「CLIENT_ERROR – Your compute environment has been INVALIDATED and scaled down because none of the instances joined the underlying ECS Cluster. Common issues preventing instances joining are the following: VPC/Subnet configuration preventing communication to ECS, incorrect Instance Profile policy preventing authorization to ECS, or customized AMI or LaunchTemplate configurations affecting ECS agent.」(基盤となる ECS クラスターに参加しているインスタンスが見つからないため、このコンピューティング環境は INVALIDATED に設定され、スケールダウンされました。インスタンスの参加を妨げる一般的な問題としては、VPC/サブネットの設定が ECS との通信を妨げている、不適切なインスタンスプロファイルポリシーが ECS の認証を妨げている、あるいは、カスタマイズされた AMI または LaunchTemplate 設定が ECS エージェントに影響を与えている、などの場合が考えられます。)
Amazon Elastic Container Service (Amazon ECS) クラスターにインスタンスが参加できない場合は、次のような問題があると考えられます。
- Amazon Virtual Private Cloud (Amazon VPC) のサブネット設定 が原因で、Amazon ECS への正常な通信が妨げられている。
- インスタンスプロファイルポリシー内に不適切な設定があるため、Amazon ECS の認証が妨げられている。
- カスタマイズされた Amazon マシンイメージ (AMI) または起動テンプレートの構成が、ECS エージェントに影響を与えている。
CLIENT_ERROR メッセージは、AWS Batch のコンピューティング環境によって作成された Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが、ECS クラスターに参加できなかったことを示しています。CLIENT_ERROR メッセージが発生すると、AWS Batch は自動的に EC2 インスタンスを終了し、その後コンピューティング環境を INVALID 状態に移行します。
コンピューティング環境が INVALID 状態の場合は、表示されているエラーメッセージに応じ、次のいずれかの解決策を選択します。
CLIENT_ERROR - sts:AssumeRole を実行する権限がありません「有効でないサービスロールを修正する」のセクションの手順を実行します。
CLIENT_ERROR - パラメータ: SpotFleetRequestConfig.IamFleetRole が無効です
「有効でない Spot Fleet ロールを修正する」のセクションの手順を実行します。
CLIENT_ERROR - テンプレート ID [xxx] の指定された起動テンプレートは存在しません
「コンピューティング環境を非アクティブ化して削除する」のセクションの手順を実行します。
CLIENT_ERROR - アクセスが拒否されました
正しいアクセス権限を持つサービスロールを作成するか、正しいアクセス権限を持つ既存のサービスロールを選択します。
内部エラー
「コンピューティング環境を非アクティブ化してからアクティブ化する」のセクションの手順を実行します。
INVALID CLIENT_ERROR - null
「コンピューティング環境を非アクティブ化してからアクティブ化する」のセクションの手順を実行します。
CLIENT_ERROR - リクエストは、以前のリクエストと同じクライアントトークンを使用しますが、同一ではありません
「コンピューティング環境を非アクティブ化してからアクティブ化する」のセクションの手順を実行します。
CLIENT_ERROR - 起動テンプレートを使用する権限がありません
以下を確認します。
- サービスロールをチェックし、Amazon Elastic Compute Cloud および Auto Scaling グループに関するアクセス許可が付与されているか確認します。その後、「有効でないサービスロールを修正する」のセクションの手順を実行します。
- アカウントが AWS Organizations の一部であり、サービスコントロールポリシーが Amazon EC2 のアクセス権限へのアクセスをブロックしているかどうかを確認します。その後、必要に応じてサービスコントロールポリシーを更新します。
解決方法
有効でないサービスロールを修正する
1. AWS Batch コンソールを開きます。
2. ナビゲーションペインで、[Compute environments] (コンピューティング環境) を選択します。
3. INVALID 状態のコンピューティング環境を選択します。
注: コンピューティング環境が DISABLED 状態の場合は、[Enable] (有効化) を選択してコンピューティング環境をアクティブ化します。
4. [Edit] (編集) を選択します。
5. [Service role] (サービスロール) で、AWS Batch が他の AWS のサービスを呼び出すために必要なアクセス権限を持つサービスロールを選択します。
重要: サービスロールは、サービスで使用するリソースを管理します。サービスを使用する前に、AWS Batch に必要なアクセス権限を提供する AWS Identity and Access Management (IAM) ポリシーとロールが必要です。アクセス権限がない場合は、アクセス権限を持つサービスロールを作成する必要があります。
6. [Save] (保存) を選択します。
有効でない Spot Fleet ロールを修正する
Amazon EC2 Spot Fleet Instances を使用するマネージドコンピューティング環境では、ロールを作成して、Spot Fleet に以下のアクセス権限を付与します。
- インスタンスへの入札
- インスタンスの起動
- インスタンスへのタグ付け
- インスタンスの終了
スポットフリートロールがない場合は、次のステップを実行してコンピューティング環境用に作成します。
1. IAM コンソールを開きます。
2. ナビゲーションペインで [Roles] を選択します。
3. [ロールの作成] を選択します。
4. [AWS service] (AWS のサービス) を選択します。その後、作成するロールを使用するサービスとして [EC2] を選択します。
5. [Select your use case] (ユースケースを選択) セクションで、[EC2 Spot Fleet Role] (EC2 スポットフリートロール) を選択します。
**重要:**類似の名前が付けられた EC2 - Spot Fleet を選択しないでください。
6. [Next: Permissions] を選択します。
7. [Next: Tags] (次のステップ: タグ) を選択します。その後、[Next: Review] (次へ: 確認) を選択します。
8. [Role name] (ロール名) に AmazonEC2SpotFleetRole と入力します。
9. [Create role] (ロールの作成) を選択します。
**注意:**新しいコンピューティング環境を作成するには、新しいスポットフリートロールを使用します。既存のコンピューティング環境ではスポットフリートのロールを変更できません。古い環境を取り除くには、その環境を非アクティブ化してから削除します。
10. AWS Batch コンソールを開きます。
11. ナビゲーションペインで、[Compute environments] (コンピューティング環境) を選択します。
12. INVALID 状態のコンピューティング環境を選択します。その後、[Disable] (無効化) を選択します。
13. [Delete] (削除) を選択します。
コンピューティング環境を非アクティブ化して削除する
コンピューティング環境に関連付けられた起動テンプレートが存在しないため、コンピューティング環境を非アクティブ化して削除する必要があります。つまり、起動テンプレートに関連付けられたコンピューティング環境を使用することはできません。そのコンピューティング環境を削除してから、新しいコンピューティング環境を作成する必要があります。
1. AWS Batch コンソールを開きます。
2. ナビゲーションペインで、[Compute environments] (コンピューティング環境) を選択します。
3. INVALID 状態のコンピューティング環境を選択します。その後、[Disable] (無効化) を選択します。
4. [Delete] (削除) を選択します。
5. 新しいコンピューティング環境を作成します。
コンピューティング環境を非アクティブ化してからアクティブ化する
1. AWS Batch コンソールを開きます。
2. ナビゲーションペインで、[Compute environments] (コンピューティング環境) を選択します。
3. INVALID 状態のコンピューティング環境を選択します。その後、[Disable] (無効化) を選択します。
4. ステップ 3 と同じコンピューティング環境を選択します。その後、[Enable] (有効化) を選択します。
関連情報
AWS Batch のトラブルシューティング
Amazon ECS または Amazon EC2 インスタンスがクラスターに参加できないのはなぜですか?
ステータスが [RUNNABLE] である AWS Batch ジョブがスタックしているのはなぜですか?