AWS Batch の「No space left on device (デバイスに空きスペースがありません)」エラーを解決する方法を教えてください。

最終更新日: 2020 年 4 月 23 日

AWS Batch ジョブが失敗した際に、「No space left on device (デバイスに空きスペースがありません)」というエラーメッセージが表示されます。このエラーの解決方法を教えてください。

簡単な説明

次の一般的なシナリオで、このエラーが発生することがあります。

  • Amazon Elastic Block Store (Amazon EBS) のボリューム (dev/xvdcz) に十分なディスク容量がない場合。
  • デフォルトの Docker ストレージ制限の 10 GiB に達した場合。

注: 以下の解決方法は、Amazon Elastic Container Service(Amazon ECS) 用に最適化された Amazon Linux 1 Amazon マシンイメージ (AMI) に適用されます。Amazon ECS に最適化された AMI は、AWS Batch で マネージド型コンピューティング環境を作成するときに使用するデフォルトのイメージです。Docker が Logical Volume Management (LVM) デバイスを使用する方法について詳しくは、「バージョン 2015.09.d 以降」を参照してください。

解決方法

Docker で使用可能なストレージ (dev/xvdcz) の容量を確認するには、「AMI ストレージ設定」の「Docker の使用可能なストレージを判断するには」で説明されている手順に従ってください。

AWS Batch で起動したインスタンスの Amazon EBS ボリュームを拡張する必要がある場合は、起動テンプレートを使用して AWS Batch で Amazon EBS ボリュームを増やします

Amazon EBS ボリュームの拡張がシナリオに最適なソリューションではないため、デフォルトのストレージ制限である 10 GiB を超える必要がある場合は、Amazon Linux 1 AMI から起動した Amazon ECS インスタンスの Docker コンテナストレージボリューム制限を引き上げます

注: 起動テンプレートを使用して、AWS Batch で起動されたすべての Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに適用される設定テンプレートを構築することができます。起動テンプレートを使用すると、カスタム AMI を使用せずに、AWS Batch で使われるデフォルトの Amazon ECS 最適化 AMI をカスタマイズできます。

Amazon EC2 コンソールでユーザーデータを起動テンプレートに追加する場合、ユーザーデータをプレーンテキストとして貼り付けるか、またはユーザーデータをファイルからアップロードします。

AWS コマンドラインインターフェイス (AWS CLI) または AWS SDK を使用する場合、最初にユーザーデータを base64 でエンコードする必要があります。その文字列を、CreateLaunchTemplate を呼び出すときに UserData パラメータの値として送信します。たとえば、次の JSON テンプレートの例をご覧ください。

{
    "LaunchTemplateName": "base64-user-data",
    "LaunchTemplateData": {
        "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..."
    }
}

次の MIME マルチパートファイルの例では、コンピューティングリソースのデフォルトの 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==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Set any ECS agent configuration options
echo ECS_CLUSTER=default>>/etc/ecs/ecs.config
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==BOUNDARY==--

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合