Cloud9のディスクサイズを拡張してみた

Cloud9を使っていてディスクサイズが足りないと感じることはありませんか? Cloud9のディスクサイズを増やす方法を紹介します!
2020.10.15

Cloud9はクラウド上で利用できるIDE(統合開発環境)です。

ローカル環境に左右されることなくAWS開発環境をすばやく立ち上げることができ、 同じ開発環境を複数メンバーで同時編集も可能で、とても便利です。

しかしCloud9のディスクサイズは有限なので、各種ライブラリをインストールしたりDockerを動かしたりしていると、ディスクが不足してしまいます。

そこで、Cloud9のディスクサイズを増やす方法を紹介します。

この方法は次の公式ドキュメントに記載されています。詳細はこちらをご参照ください。

Cloud9の構成

Cloud9の実態は EC2 です。

実際にCloud9の環境を構築すると、CloudFormationのスタックが作成されてEC2とセキュリティグループが 構築されていることがわかります。

要するに、Cloud9のディスクサイズを拡張するということは、EBS のボリュームサイズを変更するということです。

すなわち、この作業を行うためには EBSのボリュームサイズを変更する権限 をログインしているIAMユーザー、またはCloud9のEC2にアタッチしたIAM Roleが持っている必要があります。

このあたりのCloud9でAWS CLIを実行する際の権限の詳細は、次の弊社ブログをご参照ください。

現在のCloud9のディスクサイズを確認する

df コマンドを利用して、シェルからCloud9のディスクサイズを確認してみます。

サイズは10Gで8.2G使用しているので、Dockerを使おうとすると一瞬でサイズが足りなくなりそうです。

Cloud9のディスクサイズを拡張する

次のシェルスクリプトを作成します。

resize.sh

#!/bin/bash

# Specify the desired volume size in GiB as a command-line argument. If not specified, default to 20 GiB.
SIZE=${1:-20}

# Get the ID of the environment host Amazon EC2 instance.
INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id)

# Get the ID of the Amazon EBS volume associated with the instance.
VOLUMEID=$(aws ec2 describe-instances \
  --instance-id $INSTANCEID \
  --query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \
  --output text)

# Resize the EBS volume.
aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE

# Wait for the resize to finish.
while [ \
  "$(aws ec2 describe-volumes-modifications \
    --volume-id $VOLUMEID \
    --filters Name=modification-state,Values="optimizing","completed" \
    --query "length(VolumesModifications)"\
    --output text)" != "1" ]; do
sleep 1
done

#Check if we're on an NVMe filesystem
if [ $(readlink -f /dev/xvda) = "/dev/xvda" ]
then
  # Rewrite the partition table so that the partition takes up all the space that it can.
  sudo growpart /dev/xvda 1

  # Expand the size of the file system.
  # Check if we are on AL2
  STR=$(cat /etc/os-release)
  SUB="VERSION_ID=\"2\""
  if [[ "$STR" == *"$SUB"* ]]
  then
    sudo xfs_growfs -d /
  else
    sudo resize2fs /dev/xvda1
  fi

else
  # Rewrite the partition table so that the partition takes up all the space that it can.
  sudo growpart /dev/nvme0n1 1

  # Expand the size of the file system.
  # Check if we're on AL2
  STR=$(cat /etc/os-release)
  SUB="VERSION_ID=\"2\""
  if [[ "$STR" == *"$SUB"* ]]
  then
    sudo xfs_growfs -d /
  else
    sudo resize2fs /dev/nvme0n1p1
  fi
fi

作成できたら、シェルのウィンドウで次のコマンドを実行します。 実行時に、何GBまで増やすかを指定します。今回は30GBまで増やしてみます。

$ sh resize.sh 30

実行すると、こんな感じにメッセージが表示されて、ディスクサイズの拡張が完了します。

df コマンドを利用して、現在のディスクサイズを確認してみると、ディスクサイズが30GBに増えていることがわかります。

終わりに

Cloud9のディスクサイズの拡張方法を紹介いたしました。

Cloud9を利用すると、統合開発環境がとても簡単に構築できます。 ぜひご活用ください。