AWS CLIを使ってAmazon EBSの新しいボリュームタイプgp3へ移行してみた。

記事タイトルとURLをコピーする

こんにちは、完全に出遅れたCSM課の城です。
gp3については、他のメンバーもブログを書いておりますので、こちらもご覧いただけますと幸いです。

blog.serverworks.co.jp

blog.serverworks.co.jp

re:Inventが始まりまして、色々なアップデートが発表される中、ストレージ関連のアップデートに興味津々です。
中でもgp3については、安い、パフォーマンスが良い、ふむふむ、これは使わざるをえないな、というところで、今後発生しそうな大量設定変更に向けて、AWS CLIで変更を実施してみます。

1. 実行環境

実行環境はWSL(Windows Subsystemu for Linux)のUbuntuです。

$ cat /etc/issue
Ubuntu 18.04.3 LTS \n \l

$ aws --version
aws-cli/1.18.191 Python/3.6.8 Linux/4.4.0-18362-Microsoft botocore/1.19.31

2. プロファイルの指定

対象アカウントのプロファイルを指定します。

export AWS_DEFAULT_PROFILE=dev-admin

指定できているか、アカウントIDやロール名を確認します。

$ aws sts get-caller-identity

{
    "UserId": "AROAJ463SWRII2K52TOGI:botocore-session-1607420724",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/ServerworksControlRolePU/botocore-session-1607420724"
}

3. 対象ボリュームの指定

対象のボリュームを指定します。

EBS_VOLUME_ID="vol-0f167ad9e9ffeb083"

4. 事前確認

対象ボリュームの現在のタイプを確認します。

aws ec2 describe-volumes \
  --volume-ids ${EBS_VOLUME_ID} \
  --query Volumes[].VolumeType \
  --output text

gp2

5. ボリュームタイプ変更

対象ボリュームをgp2からgp3へ変更します。
次のAWSブログに記載のとおり、Amazon EBS Elastic Volumesを使用可能であれば、インスタンスの停止を伴わずに変更を書けることが可能です。

aws.amazon.com

旧世代のインスタンスの一部においては、Elastic Volumesがサポートしていないものもございますので、ご注意ください。

docs.aws.amazon.com

実行コマンド、結果は下記となります。

aws ec2 modify-volume \
  --volume-id ${EBS_VOLUME_ID} \
  --volume-type gp3 

{
    "VolumeModification": {
        "VolumeId": "vol-0f167ad9e9ffeb083",
        "ModificationState": "modifying",
        "TargetSize": 30,
        "TargetIops": 3000,
        "TargetVolumeType": "gp3",
        "TargetThroughput": 125,
        "OriginalSize": 30,
        "OriginalIops": 100,
        "OriginalVolumeType": "gp2",
        "Progress": 0,
        "StartTime": "2020-12-08T10:20:35.000Z"
    }
}

6. ボリューム変更の進行状況の確認

下記のAWSドキュメントに記載がありますが、ボリューム変更の進行状況を確認することが出来ます。
状態としてはmodifying、optimizing、completed の順に変わっていきます。

ボリューム変更の進行状況のモニタリング - Amazon Elastic Compute Cloud

aws ec2 describe-volumes-modifications \
  --volume-id ${EBS_VOLUME_ID}

{
    "VolumesModifications": [
        {
            "VolumeId": "vol-0f167ad9e9ffeb083",
            "ModificationState": "optimizing",
            "TargetSize": 30,
            "TargetIops": 3000,
            "TargetVolumeType": "gp3",
            "OriginalSize": 30,
            "OriginalIops": 100,
            "OriginalVolumeType": "gp2",
            "Progress": 0,
            "StartTime": "2020-12-08T10:20:35.000Z"
        }
    ]
}

こんな感じでProgressの値が増えていきます。

{
    "VolumesModifications": [
        {
            "VolumeId": "vol-0f167ad9e9ffeb083",
            "ModificationState": "optimizing",
            "TargetSize": 30,
            "TargetIops": 3000,
            "TargetVolumeType": "gp3",
            "OriginalSize": 30,
            "OriginalIops": 100,
            "OriginalVolumeType": "gp2",
            "Progress": 21,
            "StartTime": "2020-12-08T10:20:35.000Z"
        }
    ]
}

100になるとcompletedになります。

$ aws ec2 describe-volumes-modifications   --volume-id ${EBS_VOLUME_ID}
{
    "VolumesModifications": [
        {
            "VolumeId": "vol-0f167ad9e9ffeb083",
            "ModificationState": "completed",
            "TargetSize": 30,
            "TargetIops": 3000,
            "TargetVolumeType": "gp3",
            "OriginalSize": 30,
            "OriginalIops": 100,
            "OriginalVolumeType": "gp2",
            "Progress": 100,
            "StartTime": "2020-12-08T10:20:35.000Z",
            "EndTime": "2020-12-08T10:56:04.000Z"
        }
    ]
}

7. 事後確認

対象ボリュームの変更作業後のタイプを確認します。

aws ec2 describe-volumes \
  --volume-ids ${EBS_VOLUME_ID} \
  --query Volumes[].VolumeType \
  --output text

gp3

さいごに

簡単にgp2からgp3への変更を実施することができました。
特にサイズの小さいボリュームですと、IOPSが3,000になるメリットは大きいですね。
また、料金的な面でも東京リージョンでいえば、gp2が$0.12/GBhに対しgp3は$0.096GBhと20%のEBSコストの削減が出来るところも嬉しいです。
(2020年12月8日現在の料金です。)
今後もre:Inventでの魅力的なアップデートが来ることを期待しつつ、特に日本時間12/11(金)午前0:30-2:30のInfrastructure Keynoteは正座待機の予定です。

https://virtual.awsevents.com/media/1_qsv5itu8

ではでは、引き続き1年に1度のイベントを楽しみましょう!
どなたかの助けになれば幸いです。

2020年12月10日 旧世代インスタンスでの注意事項追記

現在、旧世代(Previous generation instances)のインスタンスタイプでは gp3 に変更(Modify)を行うと変更がスタックしてしまうという事象が発生しております。事象が発生してしまった場合、以下の手順で対応可能です。

  1. EC2 インスタンスを停止し、当該のボリュームをデタッチする
  2. modifying 状態が解消されたことを確認後、gp3 以外のボリュームタイプ(gp2から変更したのであればgp2)に変更する
  3. EC2 インスタンスに再度アタッチを行い、インスタンスを起動(Start)する

そのため、旧世代のインスタンスをご利用されている場合は、現時点では gp3 への変更は控えて頂くようお願いします。補足しますと、旧世代は、 C1, C3, G2, I2, M1, M2, M3, R3, T1 のファミリーが該当します。

なお、旧世代のインスタンスでは、gp3 をアタッチして正常に利用することもできない状況です。

城 航太 (記事一覧)

サイトリライアビリティエンジニアリング部・CSM課・課長

AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020