AWS Batch
ユーザーガイド

AWS Batch トラブルシューティング

コンピューティング環境、ジョブキュー、ジョブ定義、またはジョブに関する問題でトラブルシューティングが必要な場合があります。この章は、AWS Batch 環境におけるトラブルシューティングと問題の解決に役立ちます。

INVALID コンピューティング環境

マネージド型コンピューティング環境が不正確に設定されると、INVALID 状態となり、ジョブの配置を受け付けられません。このセクションでは、考えられる原因とその修正方法について説明します。

正しくないロール名または ARN

無効なコンピューティング環境の最も一般的な原因は、AWS Batch サービスロールまたは Amazon EC2 スポットフリートロールの正しくない名前、あるいは ARN です。これは、AWS CLI あるいは AWS SDKs; で作成されたコンピューティング環境に発生しやすい問題です。AWS マネジメントコンソールでコンピューティング環境を作成すると、AWS Batch が正しいサービスまたはスポットフリートロールの選択を援助するため、名前や ARN を誤って入力することがありません。

ただし、AWS CLI コマンドで IAM の名前あるいは ARN を手動で入力すると、AWS Batch は文字列を検証できずに不正な値として受取り、環境を作成しようと試みます。環境の作成に失敗したあとで、この環境は INVALID 状態に移り、次のエラーが表示されます。

無効なサービスロールの場合:

CLIENT_ERROR - Not authorized to perform sts:AssumeRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: dc0e2d28-2e99-11e7-b372-7fcc6fb65fe7)

無効なスポットフリートロールの場合:

CLIENT_ERROR - Parameter: SpotFleetRequestConfig.IamFleetRole is invalid. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: 331205f0-5ae3-4cea-bac4-897769639f8d) Parameter: SpotFleetRequestConfig.IamFleetRole is invalid

この問題によくある原因の 1 つとしては、AWS CLI または AWS SDK に、完全な ARN ではなく、IAM ロールにのみ名前を指定することが挙げられます。これは、ロールを作成した方法によって、ARN に service-role パスプレフィックスが含まれる場合があるからです。たとえば、AWS Batch サービスの IAM ロール の手順を使用して AWS Batch サービスロールを手動で作成すると、サービスロール ARN は次のようになります。

arn:aws:iam::123456789012:role/AWSBatchServiceRole

ただし、コンソールの最初の実行ウィザードの一環としてサービスロールを作成した場合、サービスロール ARN は次のようになります。

arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole

AWS CLI または AWSSDK を使用する場合に IAM ロールの名前のみを指定すると、AWS Batch は ARN が service-role パスプレフィックスを使用しないと判断します。このため、コンピューティング環境を作成するときには、IAM ロールに完全 ARN を指定することが推奨されます。

この設定の誤りがあるコンピューティング環境を修復するには、「INVALID コンピューティング環境の修復」を参照してください。

INVALID コンピューティング環境の修復

コンピューティング環境が INVALID 状態にある場合、無効なパラメータを修復して更新する必要があります。「正しくないロール名または ARN」に対応する場合、正しいサービスロールでコンピューティング環境を更新できます。

誤って設定されたコンピューティング環境を修復するには

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

  2. ナビゲーションバーから、使用するリージョンを選択します。

  3. ナビゲーションペインで、[コンピューティング環境] を選択します。

  4. [コンピューティング環境] ページで、編集するコンピューティング環境の横にあるラジオボタンを選択し、[編集] を選択します。

  5. [コンピューティング環境の更新] ページの [サービスロール] で、コンピューティング環境に使用する IAM ロールを選択します。AWS Batch コンソールには、コンピューティング環境と正しい信頼関係があるロールのみが表示されます。

  6. [保存] を選択して、コンピューティング環境を更新します。

RUNNABLE 状態でジョブが止まる

コンピューティング環境にコンピューティングリソースがあるのにジョブが RUNNABLE 状態よりも先に進まない場合、実際に配置されるコンピューティングリソースから何かがジョブを妨げています。この問題の一般的な原因を次に示します。

awslogs ログドライバが、コンピューティングリソースで設定されていない

AWS Batch ジョブは、ログ情報を CloudWatch Logs に送信します。この機能を有効にするには、awslogs ログドライバーを使用するようにコンピューティングリソースを設定する必要があります。Amazon ECS に最適化された AMI (または Amazon Linux) で基本コンピューティングリソース AMI をオフにすると、このドライバはデフォルトで ecs-init パッケージに登録されます。別の基本 AMI を使用する場合、Amazon ECS コンテナエージェントが開始するときに、awslogs ログドライバが ECS_AVAILABLE_LOGGING_DRIVERS 環境変数で使用可能なログドライバとして指定されていることを確認する必要があります。詳細については、「コンピューティングリソースの AMI 仕様」および「コンピューティングリソース AMI の作成」を参照してください。

リソースが不十分である

コンピューティングリソースが割り当てられるリソースを超えた CPU またはメモリーリソースがジョブ定義に指定されていると、ジョブは配置されません。たとえば、ジョブが 4 GiB のメモリーを指定し、コンピューティングリソースがそれ以下の場合、このジョブをこのコンピューティングリソースに配置することはできません。この場合、ジョブ定義に指定するメモリを減らすか、あるいは環境のコンピューティングリソースを追加する必要があります。

Amazon EC2 インスタンス制限に到達

アカウントで AWS リージョンで起動できる Amazon EC2 インスタンスの数は、EC2イ ンスタンスの制限によって決定されます。特定のインスタンスタイプには、インスタンスタイプごとの制限もあります。アカウントの Amazon EC2 インスタンス制限の詳細 (制限の引き上げをリクエストする方法を含む) については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Amazon EC2 サービス の制限」を参照してください

作成時にタグが付けられていないスポットインスタンス

AWS Batch コンピューティングリソースのスポットインスタンスのタグ付けは、2017 年 10 月 25 日にサポートが開始されました。このサポート以前に推奨されていた Amazon EC2 スポットフリート用の IAM 管理ポリシー (AmazonEC2SpotFleetRole) には、起動時にスポットインスタンスにタグを付けるアクセス権限が含まれていませんでした。新しい推奨の IAM 管理ポリシーは、AmazonEC2SpotFleetTaggingRole と呼ばれます。

作成時にスポットインスタンスのタグ付けを修正するには、以下の手順に従って、現在推奨の IAM 管理ポリシーを Amazon EC2 スポットフリートロールに割り当てます。その後、そのロールで作成されるスポットインスタンスには、作成時にインスタンスタグを適用する権限が付与されます。

現在の IAM 管理ポリシーを Amazon EC2 スポットフリートロールに割り当てるには

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

  2. [Roles] を選択し、Amazon EC2 スポットフリートロールを選択します。

  3. [Attach policy] を選択します。

  4. [AmazonEC2SpotFleetTaggingRole] を選択し、[Attach policy] を選択します。

  5. Amazon EC2 スポットフリートロールを再度選択し、前のポリシーを削除します。

  6. AmazonEC2SpotFleetRole ポリシーの右側にある [x] を選択し、[Detach] を選択します。