新しい AWS Batch 機能を使用しようとしています:バッチ
最も単純なバッチ ジョブ (「echo hello world」というデモを使用) さえ実行できません。ジョブは実行可能な状態のままになります。
問題を切り分けるために、新しい AWS アカウントですべてのデフォルト設定を使用しています。
私の理解では、この機能を使用するために EC2 インスタンスを手動で起動する必要はなく、AWS Batch が代わりに起動するはずです。ただし、ジョブを実行するために利用可能な EC2 インスタンスを待機しているようです。ジョブを実行するために EC2 インスタンスを自動的に起動するだけでよいのではないでしょうか。
前もって感謝します。
答え1
8000 MiB のジョブ定義を指定すると、7986 MB しかないインスタンスが起動され、ジョブが実行可能状態で停止することに気付きました。
8000 MiB は 8388.608 MB に等しいため、起動中のインスタンスにはジョブを実行するのに十分なメモリがなく、ハングしているように見えます。
7000 MiB のジョブ定義を作成すると、ジョブは 7986 MB のメモリを持つ同じインスタンスを引き続き使用するため、実行可能状態で停止しなくなります。
答え2
「ジョブが RUNNABLE ステータスのままになる」という問題のトラブルシューティングについては、バッチ ドキュメントにトラブルシューティング ガイドがあります。 https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#job_stuck_in_runnable
コンピューティング環境にコンピューティング リソースが含まれているにもかかわらず、ジョブが RUNNABLE ステータスを超えて進まない場合は、ジョブが実際にコンピューティング リソースに配置されるのを妨げる何かがあります。この問題の一般的な原因は次のとおりです。
awslogs ログ ドライバーがコンピューティング リソースに設定されていません
AWS Batch ジョブは、ログ情報を CloudWatch Logs に送信します。これを有効にするには、awslogs ログドライバーを使用するようにコンピューティングリソースを設定する必要があります。コンピューティングリソース AMI を Amazon ECS に最適化された AMI (または Amazon Linux) に基づいて作成する場合、このドライバーはデフォルトで ecs-init パッケージに登録されます。別のベース AMI を使用する場合は、Amazon ECS コンテナエージェントの起動時に、ECS_AVAILABLE_LOGGING_DRIVERS 環境変数で awslogs ログドライバーが使用可能なログドライバーとして指定されていることを確認する必要があります。詳細については、「コンピューティングリソース AMI の仕様」および「コンピューティングリソース AMI の作成」を参照してください。
リソース不足
ジョブ定義で、コンピューティング リソースが割り当て可能な量よりも多くの CPU またはメモリ リソースを指定した場合、ジョブは配置されません。たとえば、ジョブで 4 GiB のメモリが指定され、コンピューティング リソースがそれよりも少ない場合、ジョブをそれらのコンピューティング リソースに配置することはできません。この場合、ジョブ定義で指定されたメモリを減らすか、環境にさらに大きなコンピューティング リソースを追加する必要があります。
Amazon EC2 インスタンスの制限に達しました
AWS リージョンでアカウントが起動できる Amazon EC2 インスタンスの数は、EC2 インスタンスの制限によって決まります。特定のインスタンス タイプには、インスタンス タイプごとの制限もあります。アカウントの Amazon EC2 インスタンスの制限 (制限の引き上げをリクエストする方法を含む) の詳細については、Amazon EC2 ユーザー ガイドの Linux インスタンスの Amazon EC2 サービスの制限を参照してください。
これを引き起こす他の非常に一般的な問題は次のとおりです。
- インターネットへのルートがありません
- ジョブ定義のCPU/メモリはインスタンスよりも高い
- インスタンスがECSクラスタに登録されていません
- エージェントが切断されました -ecs-agent の切断
実行できる追加のトラブルシューティング手順:
- クラスター内で関連するECSタスク定義を手動で起動します
- SSHでコンテナインスタンス内からdocker runを試みる
- コンテナインスタンス内からの Curl ECS および Batch エンドポイント
- ジョブ定義におけるCPU/メモリの制約を取り除く
- /etc/ecs/ecs.configを確認する
- ECSログを取得 -ecs-logs-collector は、Amazon のログ コレクターがログを収集するのを手助けします。
答え3
今日、私も同じ問題に遭遇しました。私は次のことを実行することでこの問題を解決しました。
VPC
→ Subnets
→ <YOUR SUBNET>
→ Subnet Actions
→設定を開きますModify Auto-assign IP
。
Enable auto-assign public IPV4 address
AWS バッチコンピューティング環境を再作成するをチェックします。
コンテナ インスタンスはインターネットにアクセスする必要があるためです。そのため、コンテナ インスタンスにはグローバル パブリック IP が必要になります。