AWS Batch ジョブが失敗した際に、「No space left on device」(デバイスに空きスペースがありません) というエラーメッセージが表示されます。どうすればこの問題を解決できますか。
簡単な説明
AWS Batch は、次の 2 つの理由から**「No space left on device」** (デバイスに空きスペースがありません) というエラーを返すことがあります。
- Amazon Elastic Block Store (Amazon EBS) でホストされている Docker ボリュームに十分なディスク容量がない。
- (Amazon Linux 1 のみ) Docker ストレージのデフォルト制限である 10 GiB に達した。
このエラーを解決するには、まず Amazon EBS でホストされている Docker ボリュームに十分なディスク容量があることを確認します。十分なディスク容量がない場合は、Amazon EBS ボリュームのサイズを大きくします。十分なディスク容量がある場合は、デフォルトの Docker ストレージ制限を増やします。
どちらのソリューションでも、新しいカスタム起動テンプレートと新しいコンピューティング環境を作成する必要があります。AWS Batch の既存のコンピューティング環境に、新しいカスタム起動テンプレートを追加することはできません。
注: Amazon Elastic Container Service (Amazon ECS) に最適化された Amazon Linux Amazon マシンイメージ (AMI) 1 は廃止されました。Amazon ECS に最適化された Amazon Linux 2 AMI は、AWS Batch でマネージド型コンピューティング環境を作成するときに使用するデフォルトのイメージです。詳細については、AMI ストレージ設定を参照してください。この記事では、下位互換性のためにのみ Amazon Linux 1 を参照しています。
- ECS Optimized Amazon Linux 1 AMI を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動する AWS Batch ComputeEnvironment がある場合は、新しい ComputeEnvironment を作成することをお勧めします。次に AWS Batch は、作成時に利用可能な最新の ECS Optimized Amazon Linux 2 AMI を使用します。
- あなたが見れば**「デバイスに空き容量がありません」**ECS Optimized Amazon Linux 2 AMI を使用して起動された Amazon EC2 インスタンスで実行されているジョブでエラーが発生した場合は、ルート ボリューム (/dev/xvda) のサイズを増やして、コンテナで使用できるストレージ容量を増やしてください。
解決方法
注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。AWS CloudShell を使用して次のコマンドを実行することもできます。
Amazon EBS でホストされている Docker ボリュームに十分なディスク容量があるかどうかを確認します
「Docker で使用可能なストレージを確認するには」セクションまたは AMI ストレージ設定の手順に従います。
十分なディスク容量がない場合は、AWS Batch で Amazon EBS ボリュームのサイズを増やすにはこの記事のセクション。
十分なディスク容量がある場合は、この記事の「(Amazon Linux 1 のみ) デフォルトの Docker ストレージ制限を増やすには」セクションを参照してください。
AWS Batch で Amazon EBS ボリュームのサイズを増やす
1. AWS Batch コンピューティングリソースの Docker データボリューム (デフォルトの ECS 最適化 AL2 イメージでは /dev/xvdaデフォルトの ECS 最適化 AL2 イメージ) を AWS Batch コンピューティング リソースに。手順については、「起動テンプレートのサポート」を参照してください。
注: Amazon Linux 1 を使用している場合は、 DeviceName の値に必要な Docker ボリューム (/dev/xvda と /dev/xvdcz) の両方を必ず入力してください。
2. 新しい起動テンプレートを使用する新しいコンピューティング環境を作成します。
ノート: 関連付けられた Amazon EC2 インスタンスは、AWS Batch がインスタンスをスピンアップすると、新しいドライブ サイズを示します。
(Amazon Linux 1 のみ) デフォルトの Docker ストレージ制限を増やすには
1. デフォルトの Docker ストレージ制限を増やす MIME マルチパートアーカイブ形式を使用して、新しいカスタム起動テンプレートを作成します。詳細については、「起動テンプレートの Amazon EC2 ユーザーデータ」を参照してください。
MIME マルチパートファイルの例では、AWS Batch のコンピューティングリソースのデフォルトの Docker イメージ設定をオーバーライドしている
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0
--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"
#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker
--==BOUNDARY==--
重要: AWS CLI または AWS SDK を使用する場合、最初にユーザーデータを base64 でエンコードする必要があります。その文字列を、CreateLaunchTemplate API を呼び出すときに UserData パラメータの値として送信します。
2. 新しい起動テンプレートを使用する新しいコンピューティング環境を作成します。