0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EBSボリューム変更の全パターン:Elastic Volumesとオフライン変更を理解する

0
Posted at

概要

EBSボリュームの変更方法には、オンラインで実行できるElastic Volumesと、スナップショット経由のオフライン変更の2つがあります。どの属性がどちらの方法で変更できるかを理解し、適切な変更方法を選択するための実践的なガイドです。

目次

  1. はじめに
  2. Elastic Volumes機能によるオンライン変更
  3. オフライン変更が必要なケース
  4. 変更方法の比較
  5. 実践:AWS CLIでのボリューム変更手順
  6. ベストプラクティスと注意点
  7. 終わりに
  8. 参考文献・参考サイト

はじめに

Amazon EBS(Elastic Block Store)は、EC2インスタンスに接続できる永続的なブロックストレージサービスです。運用を続けていく中で、ストレージ容量の不足やパフォーマンスの調整が必要になることがあります。

EBSボリュームの変更方法には、大きく分けて2つのアプローチがあります。

  1. Elastic Volumes機能:ボリュームをアタッチしたまま、オンラインでバックグラウンド処理により変更
  2. スナップショット経由のオフライン変更:スナップショットから新しいボリュームを作成して切り替え

どの属性がどちらの方法で変更できるのかを理解することが、適切な運用計画を立てる鍵となります。

Elastic Volumes機能によるオンライン変更

Elastic Volumesは、EBSボリュームをインスタンスから切り離すことなく、オンラインで変更できる機能です。AWS公式ドキュメント「Modify an Amazon EBS volume using Elastic Volumes operations」( https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html ) によれば、以下の属性を変更できます。

変更可能な属性

属性 説明 注意点
ボリュームサイズ 容量の増加(縮小は不可) 増加のみ可能、1GiB単位
ボリュームタイプ gp2/gp3/io1/io2/st1/sc1間の変更 一部制限あり
IOPS プロビジョンドIOPS値 gp3/io1/io2のみ
スループット MB/s単位のスループット gp3のみ
Multi-Attach 複数インスタンスへの同時アタッチ io1/io2のみ、アタッチ中は変更不可

バックグラウンド処理の仕組み

Elastic Volumesによる変更は、バックグラウンドで段階的に実行されます。例えば、100GiBのボリュームを200GiBに拡張する場合、以下のように動作します。

  1. 変更リクエスト送信:modify-volumeコマンドで変更を開始
  2. 最適化処理:バックグラウンドでデータ移行やパフォーマンス調整を実行
  3. 完了:最適化が完了し、完全なパフォーマンスを発揮

この間、アプリケーションは継続して動作しますが、最適化が完了するまでは完全なパフォーマンスが得られない場合があります。

変更中のパフォーマンス影響

AWS公式ドキュメント「Modify an Amazon EBS volume using Elastic Volumes operations」( https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html ) では、変更中でもボリュームは使用可能であることが説明されています。ただし、最適化処理が完了するまでは、以下の点に留意する必要があります。

  • 完全なパフォーマンスが発揮されない可能性がある
  • I/Oレイテンシーが通常より高くなる場合がある
  • 最適化完了まで数時間から数日かかることがある(ボリュームサイズに依存)

制限事項

Elastic Volumesには以下の制限があります。

  • 変更頻度:同じボリュームに対して、24時間のローリング期間内に最大4回まで変更可能
  • ボリュームサイズ:縮小は不可、増加のみ
  • Multi-Attach有効時:io1ボリュームでMulti-Attachが有効な場合、ボリュームタイプ、サイズ、IOPSは変更不可。io2ボリュームではボリュームタイプのみ変更不可
  • ルートボリューム:io1/io2/gp2/gp3/standardタイプのルートボリュームをst1/sc1には変更できない
  • アタッチ状態:Multi-Attachの有効化/無効化は、ボリュームがどのインスタンスにもアタッチされていない状態でのみ可能

image.png

オフライン変更が必要なケース

Elastic Volumesでは変更できない属性があります。これらを変更するには、スナップショットを経由した新しいボリュームの作成が必要です。

暗号化キー(KMS)の変更

AWS公式ドキュメント「Amazon EBS encryption」( https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html ) によれば、『You cannot change the KMS key that is associated with an existing snapshot or volume.』とされています。既存のボリュームやスナップショットに関連付けられたKMSキーは変更できません。

暗号化キーを変更するには、以下の手順が必要です。

  1. スナップショット作成:既存ボリュームからスナップショットを作成
  2. 新ボリューム作成:スナップショットから新しい暗号化キーを指定してボリュームを作成
  3. アタッチ切替:元のボリュームをデタッチし、新しいボリュームをアタッチ

この方法では、ボリュームのコピーが作成されるため、ダウンタイムが発生します。

暗号化状態の変更

同様に、暗号化されていないボリュームを暗号化する、または暗号化されたボリュームを非暗号化にすることも、Elastic Volumesではできません。AWS公式ドキュメント「How Amazon Elastic Block Store (Amazon EBS) uses AWS KMS」( https://docs.aws.amazon.com/kms/latest/developerguide/services-ebs.html ) では、『The encryption status of an EBS volume is determined when you create the volume. You cannot change the encryption status of an existing volume.』と説明されています。

暗号化状態を変更する場合も、スナップショット経由で新しいボリュームを作成する必要があります。

image.png

変更方法の比較

2つのアプローチの違いを表にまとめます。

項目 Elastic Volumes スナップショット経由
変更可能項目 サイズ、ボリュームタイプ、IOPS、スループット、Multi-Attach 暗号化キー、暗号化状態、すべての属性
処理方法 バックグラウンドでオンライン変更 新ボリューム作成と切替
ダウンタイム 不要(継続使用可能) 必要(切替時)
変更頻度制限 24時間で4回まで 制限なし
ボリュームサイズ 増加のみ 増減可能
ユースケース 通常の容量拡張、パフォーマンス調整 KMS変更、暗号化状態変更、サイズ縮小

実践:AWS CLIでのボリューム変更手順

ここでは、AWS CLIを使用した実際の変更手順を紹介します。

前提条件

  • AWS CLI v2がインストール済み
  • 適切なIAM権限(ec2:ModifyVolume、ec2:DescribeVolumesModifications等)
  • リージョンはap-northeast-1(東京リージョン)を使用

Elastic Volumesによる変更

例:gp2ボリュームをgp3に変更し、サイズを100GiBから200GiBに拡張

# ボリュームIDを確認
aws ec2 describe-volumes \
  --region ap-northeast-1 \
  --filters "Name=attachment.instance-id,Values=i-1234567890abcdef0"

# ボリュームを変更
aws ec2 modify-volume \
  --region ap-northeast-1 \
  --volume-id vol-1234567890abcdef0 \
  --volume-type gp3 \
  --size 200

# 変更状態を確認
aws ec2 describe-volumes-modifications \
  --region ap-northeast-1 \
  --volume-ids vol-1234567890abcdef0

例:gp3ボリュームのIOPSとスループットを調整

aws ec2 modify-volume \
  --region ap-northeast-1 \
  --volume-id vol-1234567890abcdef0 \
  --iops 5000 \
  --throughput 250

変更状態の確認

変更の進行状況は以下のコマンドで確認できます。

aws ec2 describe-volumes-modifications \
  --region ap-northeast-1 \
  --volume-ids vol-1234567890abcdef0 \
  --query 'VolumesModifications[0].ModificationState' \
  --output text

状態の遷移は以下の通りです。

  • modifying:変更処理中
  • optimizing:最適化処理中
  • completed:完了

OS側でのファイルシステム拡張

ボリュームサイズを拡張した場合、OS側でもファイルシステムの拡張が必要です。

Linuxの場合(ext4)

# パーティション情報の更新
sudo growpart /dev/nvme1n1 1

# ファイルシステムの拡張
sudo resize2fs /dev/nvme1n1p1

Linuxの場合(xfs)

# パーティション情報の更新
sudo growpart /dev/nvme1n1 1

# ファイルシステムの拡張
sudo xfs_growfs -d /mnt/data

スナップショット経由での暗号化キー変更

例:KMSキーを変更する

# 1. 既存ボリュームからスナップショットを作成
aws ec2 create-snapshot \
  --region ap-northeast-1 \
  --volume-id vol-1234567890abcdef0 \
  --description "Snapshot for KMS key change"

# 2. スナップショットから新しいKMSキーで暗号化されたボリュームを作成
aws ec2 create-volume \
  --region ap-northeast-1 \
  --availability-zone ap-northeast-1a \
  --snapshot-id snap-0987654321fedcba0 \
  --encrypted \
  --kms-key-id arn:aws:kms:ap-northeast-1:123456789012:key/your-new-key-id

# 3. インスタンスを停止
aws ec2 stop-instances \
  --region ap-northeast-1 \
  --instance-ids i-1234567890abcdef0

# 4. 古いボリュームをデタッチ
aws ec2 detach-volume \
  --region ap-northeast-1 \
  --volume-id vol-1234567890abcdef0

# 5. 新しいボリュームをアタッチ
aws ec2 attach-volume \
  --region ap-northeast-1 \
  --volume-id vol-newvolumeabcdef012 \
  --instance-id i-1234567890abcdef0 \
  --device /dev/sda1

# 6. インスタンスを起動
aws ec2 start-instances \
  --region ap-northeast-1 \
  --instance-ids i-1234567890abcdef0

ベストプラクティスと注意点

変更前の準備

  1. バックアップの作成:変更前には必ずスナップショットを作成することを推奨します。これにより、問題が発生した場合でも元の状態に戻すことができます。

  2. 変更タイミングの選択:本番環境では、メンテナンスウィンドウ中やトラフィックの少ない時間帯に変更を実施することを推奨します。

  3. 容量の余裕確保:ファイルシステムが80%以上使用されている場合は、変更前にデータのクリーンアップを検討してください。

最適化完了までの時間

AWS公式ドキュメント「Modify an Amazon EBS volume using Elastic Volumes operations」( https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html ) によれば、最適化処理の時間はボリュームサイズに依存します。

  • 小規模(100GiB未満):数時間程度
  • 中規模(100-1000GiB):半日から1日程度
  • 大規模(1000GiB以上):数日かかる場合もある

最適化が完了する前でもボリュームは使用可能ですが、完全なパフォーマンスを得るには完了を待つ必要があります。

変更頻度の制限

同じボリュームに対して、24時間のローリング期間内に最大4回まで変更可能です。この制限を超えると、以下のようなエラーメッセージが表示されます。

Volume modification limit exceeded. You can modify this volume up to 4 times in a 24-hour period.

頻繁な変更が予想される場合は、変更をバッチ処理するか、計画的に実施することを推奨します。

Multi-Attach有効時の制限

Multi-Attachが有効なボリュームには、以下の制限があります。

  • io1ボリューム:Multi-Attach有効時は、ボリュームタイプ、サイズ、IOPSの変更が不可
  • io2ボリューム:Multi-Attach有効時は、ボリュームタイプの変更のみ不可(サイズとIOPSは変更可能)
  • 有効化/無効化:どのインスタンスにもアタッチされていない状態でのみ可能

コスト最適化

gp2からgp3への移行は、コスト削減とパフォーマンス向上の両方を実現できます。AWS公式ブログ「Modify Amazon EBS volumes on Kubernetes with Volume Attributes Classes」( https://aws.amazon.com/blogs/containers/modify-amazon-ebs-volumes-on-kubernetes-with-volume-attributes-classes/ ) では、gp3がgp2と比較して最大20%低価格であることが紹介されています。

料金は変動する可能性があるため、最新情報は公式料金ページ ( https://aws.amazon.com/ebs/pricing/ ) でご確認ください。

終わりに

EBSボリュームの変更方法には、Elastic Volumesによるオンライン変更と、スナップショット経由のオフライン変更の2つがあります。

Elastic Volumesは、ボリュームサイズ、ボリュームタイプ、IOPS、スループット、Multi-Attachの変更に適しており、ダウンタイムなしで変更できます。一方、スナップショット経由の変更は、暗号化キーや暗号化状態の変更が必要な場合に使用します。

どちらの方法を選択するかは、変更したい属性と運用要件によって決まります。適切な方法を選択し、ベストプラクティスに従うことで、安全かつ効率的にEBSボリュームを管理できます。

次のステップ

  • EBS Fast Snapshot Restore機能を活用して、スナップショットからの復元時間を短縮する
  • CloudWatch メトリクスを使用して、ボリュームのパフォーマンスを継続的に監視する
  • Data Lifecycle Managerを使用して、スナップショットのバックアップを自動化する

参考文献・参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?