AWS Batch で「DockerTimeoutError」エラーを解決する方法を教えてください。

所要時間2分
0

AWS Batch コンピューティング環境のジョブが失敗し、「DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s. (DockerTimeoutError: 作成済みに移行できませんでした; 4 分 0 秒が経過した後にタイムアウトしました。)」エラーが返されます。 AWS Batch の「DockerTimeoutError」エラーをどのようにトラブルシューティングすればよいですか?

簡単な説明

docker start および docker create の API コールに 4 分以上かかる場合、AWS Batch が DockerTimeoutError エラーを返します。

注: Amazon Elastic Container Service (Amazon ECS) コンテナエージェントによって設定されるデフォルトのタイムアウト制限は 4 分です。

このエラーの発生にはさまざまな理由が考えられますが、通常は次のいずれかが原因になっています。

  • AWS Batch コンピューティング環境の ECS インスタンスボリュームは、キュー内の他のすべてのジョブから高い I/O プレッシャーを受けます。ECS インスタンスで作成され実行されるこれらのジョブが、バーストバランスを枯渇させる可能性があります。この問題を解決するには、この記事のバーストバランスの問題の解決セクションの手順に従います。
  • 停止した ECS コンテナは、Docker デーモンを解放するのに十分な速度でクリーンアップされません。AWS Batch が提供するデフォルトの Amazon マシンイメージ (AMI) の代わりにカスタマイズされた AMI を使用している場合は、Docker の問題が発生する可能性があります。AWS Batch のデフォルト AMI は、Amazon ECS のクリーンアップ設定を最適化します。この問題を解決するには、この記事のDocker の問題を解決するセクションの手順に従います。

いずれの問題もエラーの原因になっていない場合は、次の手順を実行して問題をさらにトラブルシューティングできます。

  • Docker ログを確認してエラーの原因を特定します。
  • AWS Batch コンピューティング環境に関連付けられている ECS クラスター内の ECS インスタンスで Amazon ECS ログコレクタースクリプトを実行します。

解決方法

バーストバランスの問題の解決

ECS インスタンスのバーストバランスを確認する

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで、[Clusters] (クラスター) をクリックします。その後、ジョブを含むクラスターを選択します。

注: クラスターの名前はコンピューティング環境の名前で始まり、その後に _Batch_ とランダムな数字と文字を含むハッシュが続きます。

3.    [ECS Instances] タブを選択します。

4.    [EC2 Instance] (EC2 インスタンス) 列で、インスタンスを選択します。

注: 失敗したジョブのインスタンス ID を検索するには、AWS Batch describe-jobs コマンドを実行します。インスタンス ID が、containerInstanceArn の出力に表示されます。

5.    Amazon EC2 コンソールの [Descriptions] (説明) タブの [Block devices] (ブロックデバイス) で、ボリュームのリンクを選択します。

6.    EBS ID のブロックデバイスのポップアップウィンドウで、ボリュームを選択します。

7.    [Monitoring] (モニタリング) タブを選択します。次に、[Burst Balance] (バーストバランス) を選択してバーストバランスメトリクスを確認します。バーストバランスが 0 まで低下すると、バーストバランスが枯渇します。

マネージド型コンピューティング環境用の起動テンプレートを作成する

注意: 起動テンプレートを変更した場合は、新しいコンピューティング環境を作成する必要があります。

1.    Amazon EC2 コンソールを開き、[Launch Templates] を選択します。

2.    [Create launch template] を選択します。

3.    AMI ID では、デフォルトの Amazon ECS に最適化された AMI を選択します。

4.    [Storage (Volumes)] (ストレージ (ボリューム)) セクションにある [Volume type] (ボリュームタイプ) 列でボリュームの種類を選択します。次に、[Size(GiB)] (サイズ (GiB)) 列に整数値を入力します。

注: ボリュームの種類に [Provisioned IOPS SSD (io1)] (プロビジョンド IOPS SSD (io1)) を選択した場合、IOPS に対応して許可されている整数値を入力します。

5.    [Create launch template] を選択します。

6.    新しい起動テンプレートを使用して、新しいマネージド型コンピューティング環境を作成します。

AMI で、AWS Batch コンピューティング環境を作成する

注: AMI を変更した場合は、AMI ID パラメータを更新できないため、新しいコンピューティング環境を作成する必要があります。

1.    Amazon EC2 コンソールを開きます。

2.    [Launch instance] を選択します。

3.    セットアップウィザードの手順に従ってインスタンスを作成します。

重要: Add Storage ページで、インスタンスの種類またはサイズを変更します。ボリュームサイズが大きいほど、ベースラインパフォーマンスが高くなり、バーストバランスの補充が遅くなります。高 I/O 負荷の高いパフォーマンスを得るには、ボリュームの種類を io1 に変更します。

4.    インスタンスからコンピューティングリソース AMI を作成します。

5.    AMI ID を含む AWS Batch のコンピューティング環境を作成します。

Docker の問題を解決する

デフォルトでは、Amazon ECS コンテナエージェントが、停止したタスクと、コンテナインスタンスで使用されていない Docker イメージを、自動的にクリーンアップします。新しいイメージで新しいジョブを実行すると、使用していない Docker イメージでコンテナストレージがいっぱいになる可能性があります。

1.    AWS Batch コンピューティング環境のコンテナインスタンスに接続するために SSH を使用します。

2.    Amazon ECS コンテナエージェントを検査するには、Docker inspect ecs-agent コマンドを実行します。次に、出力の env セクションを確認します。

注: 次の変数の値を小さくすると、タスクとイメージのクリーンアップを高速化できます。

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

また、自動化されたタスクとイメージのクリーンアップ調整可能なパラメータを使用することもできます。

3.    更新された値を含む新しい AMI を作成します。

  • または -

新しい環境変数を含めたユーザーデータを含む起動テンプレートを作成します。

更新された値を含む新しい AMI を作成するには

1.    /etc/ecs/ecs.config ファイルでエージェント設定パラメータを設定します。

2.    コンテナエージェントを再起動します。

3.    インスタンスからコンピューティングリソース AMI を作成します。

4.    AMI ID を含む AWS Batch のコンピューティング環境を作成します。

新しい環境変数を含めたユーザーデータを含む起動テンプレートを作成するには

1.    ユーザーデータ含む起動テンプレートを作成します

例えば、次の MIME マルチパートファイルのユーザーデータでは、コンピューティングリソースのデフォルトの Docker イメージのクリーンアップ設定が上書きされます。

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==MYBOUNDARY==--

2.    新しい起動テンプレートを使用して、マネージド型コンピューティング環境を作成します。


関連情報

CloudWatch メトリクスを発行する AWS のサービス

コンピューティングリソースの AMI

amazon-ecs-agent (AWS GitHub)

AWS公式
AWS公式更新しました 2年前
コメントはありません