EBSスナップショット、暗号化、RAID
ポイントインタイムバックアップ用のEBSスナップショットを作成・自動化し、KMSでボリュームを暗号化して、EC2におけるRAID 0とRAID 1の違いを理解します。
「EBSスナップショット、暗号化、RAID」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
EBS スナップショット:特定時点のバックアップ
EBS スナップショットは、Amazon S3 に耐久性の高い形で保存される EBS ボリュームの特定時点のバックアップです(EBS によって管理され、S3 コンソールから直接アクセスするものではありません)。最初のスナップショットは完全コピーで、以降のスナップショットは増分です。つまり、前回のスナップショット以降に変更されたブロックだけが保存されます。増分方式で保存されますが、任意の 1 つのスナップショットから完全なボリュームを復元できます。スナップショットは、EBS ボリュームのバックアップ、移行、災害復旧における主要な仕組みです。
# Create a snapshot of an EBS volume with a description
aws ec2 create-snapshot \
--volume-id vol-0abc1234def567890 \
--description 'Production DB backup 2024-01-01' \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Environment,Value=Production},{Key=Backup,Value=Daily}]'
# Monitor snapshot completion
aws ec2 describe-snapshots \
--snapshot-ids snap-0abc1234def567890 \
--query 'Snapshots[].{State:State,Progress:Progress}'スナップショットの料金とライフサイクル
課金対象となるのは、ボリュームのすべてのスナップショットに含まれる増分スナップショットブロックが実際に消費するストレージ容量であり、ボリュームサイズではありません。中間のスナップショットを削除すると、S3 がデータを統合するため、残ったスナップショットは引き続き完全な復元ポイントとして機能します。大規模環境でコストを管理するには、Amazon Data Lifecycle Manager(DLM)を使用して、スナップショットのスケジュールと保持ポリシーを作成します。たとえば、毎日スナップショットを取得し、直近 7 日分、4 週間分、12 か月分を保持して、それより古いものを自動的に削除できます。
# Create a DLM lifecycle policy for daily snapshots with 7-day retention
aws dlm create-lifecycle-policy \
--description 'Daily DB snapshots' \
--state ENABLED \
--execution-role-arn arn:aws:iam::111122223333:role/AWSDataLifecycleManagerDefaultRole \
--policy-details '{
"PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
"ResourceTypes": ["VOLUME"],
"TargetTags": [{"Key": "Backup", "Value": "Daily"}],
"Schedules": [{
"Name": "DailySnapshots",
"CreateRule": {"Interval": 24, "IntervalUnit": "HOURS", "Times": ["03:00"]},
"RetainRule": {"Count": 7}
}]
}'リージョン間およびアカウント間でのスナップショットコピー
災害復旧や地理的な分散のために、スナップショットをリージョン間でコピーできます。また、特定の AWS アカウントとスナップショットを共有したり、パブリックに公開したりすることで、ネットワークを使用せずにアカウント間で EBS データを転送できます。スナップショットのコピー時には、暗号化キーを変更できます。これにより、暗号化されていないボリュームから暗号化されたボリュームへ、または一方のアカウントのキーから別のアカウントのキーへデータを移行できます。
# Copy a snapshot to another region with a new KMS key
aws ec2 copy-snapshot \
--source-region us-east-1 \
--source-snapshot-id snap-0abc1234def567890 \
--destination-region eu-west-1 \
--description 'DR copy' \
--encrypted \
--kms-key-id arn:aws:kms:eu-west-1:111122223333:key/KEY_ID \
--region eu-west-1
# Share a snapshot with another account
aws ec2 modify-snapshot-attribute \
--snapshot-id snap-0abc1234def567890 \
--attribute createVolumePermission \
--operation-type add \
--user-ids '999888777666'スナップショットからのボリュームの復元
スナップショットからのボリュームの作成は簡単ですが、パフォーマンスに関する注意点があります。スナップショットから復元したボリュームでは、すべてのブロックが最初は S3 に保存されており、初回アクセス時に遅延ロードされます。そのため、まだボリュームにロードされていないブロックではレイテンシーが高くなる可能性があります。本番データベースでは、Fast Snapshot Restore(FSR)を使用してください。これは有料機能で、スナップショットを事前にウォームアップするため、ボリュームをすぐに最大パフォーマンスで利用できます。別の方法として、復元後に dd や fio で全ブロックを読み取り、事前にウォームアップすることもできます。
# Enable Fast Snapshot Restore for instant full-performance volumes
aws ec2 enable-fast-snapshot-restores \
--availability-zones us-east-1a us-east-1b \
--source-snapshot-ids snap-0abc1234def567890
# Create a volume from the snapshot (FSR enabled = full performance immediately)
aws ec2 create-volume \
--snapshot-id snap-0abc1234def567890 \
--volume-type gp3 \
--availability-zone us-east-1aEBS 暗号化の仕組み
EBS 暗号化では、保存時(ボリューム上)のデータ、ボリュームと EC2 インスタンス間の転送中のデータ、スナップショットを AES-256 で暗号化します。暗号化は EC2 ハイパーバイザーによって透過的に処理されるため、アプリケーションから見た違いはありません。暗号化には AWS KMS キーを使用します。AWS マネージドキー(aws/ebs)またはカスタマーマネージドキー(CMK)を利用できます。ボリュームを暗号化すると、そのボリュームに書き込まれるすべてのデータと、そこから取得されるすべてのスナップショットも暗号化されます。
# Create an encrypted gp3 volume with a customer-managed key
aws ec2 create-volume \
--volume-type gp3 \
--size 100 \
--encrypted \
--kms-key-id arn:aws:kms:us-east-1:111122223333:key/KEY_ID \
--availability-zone us-east-1a
# Enable encryption by default for all new volumes in a region
aws ec2 enable-ebs-encryption-by-default
aws ec2 get-ebs-encryption-by-default
# { "EbsEncryptionByDefault": true }既存の暗号化されていないボリュームの暗号化
既存の暗号化されていない EBS ボリュームを直接暗号化することはできません。回避策は複数の手順から成ります。(1) 暗号化されていないボリュームのスナップショットを作成する、(2) --encrypted を指定してスナップショットをコピーし、暗号化されたスナップショットを作成する、(3) 暗号化されたスナップショットから新しい暗号化ボリュームを作成する、(4) インスタンスを停止し、古いボリュームをデタッチして、新しい暗号化ボリュームをアタッチし、再起動する、という流れです。このプロセスはスクリプト化でき、SAA-C03 試験では移行シナリオとして出題されます。
# Step-by-step: encrypt an existing unencrypted volume
# 1. Snapshot the unencrypted volume
aws ec2 create-snapshot --volume-id vol-UNENCRYPTED --description 'Pre-encryption backup'
# 2. Copy snapshot with encryption
aws ec2 copy-snapshot \
--source-region us-east-1 \
--source-snapshot-id snap-UNENCRYPTED \
--region us-east-1 \
--encrypted \
--kms-key-id alias/aws/ebs
# 3. Create encrypted volume from the encrypted snapshot
aws ec2 create-volume \
--snapshot-id snap-ENCRYPTED \
--volume-type gp3 \
--availability-zone us-east-1aRAID 0:パフォーマンスのストライピング
RAID 0(ストライピング)は、複数の EBS ボリュームにデータを分散し、IOPS とスループットを合算します。16,000 IOPS の gp3 ボリュームを 2 つ RAID 0 で構成すると、約 32,000 IOPS を提供できます。一方のボリュームに障害が発生するとすべてのデータを失い、冗長性がないというトレードオフがあります。RAID 0 は、最大スループットを優先する一時データまたは容易に再作成できるデータに適しています。たとえば、キャッシュレイヤー、処理キュー、スクラッチ領域などです。RAID アレイ全体の EBS スナップショットを取得するには、一貫性を調整する必要があります。
# Set up RAID 0 across two EBS volumes on Linux
# (After creating and attaching two gp3 volumes)
# Install mdadm
sudo yum install -y mdadm
# Create a RAID 0 array across /dev/xvdf and /dev/xvdg
sudo mdadm --create /dev/md0 \
--level=0 \
--raid-devices=2 \
/dev/xvdf /dev/xvdg
# Format and mount
sudo mkfs.xfs /dev/md0
sudo mkdir /mnt/raid0
sudo mount /dev/md0 /mnt/raid0RAID 1:冗長性のためのミラーリング
RAID 1(ミラーリング)は、2 つの EBS ボリュームに同一のデータを同時に書き込みます。一方のボリュームに障害が発生しても、もう一方に完全なコピーが残ります。RAID 1 は、2 つのボリュームによる冗長性を、1 つ分の容量で提供します。ただし、EBS ボリュームでは、これは一般にEBS に組み込まれた AZ レベルのレプリケーションと重複します。AWS は、EBS 上で RAID 1 を使用するよりも、EBS のマルチ AZ アーキテクチャ(Multi-AZ RDS または AZ をまたぐ ASG)を推奨しています。EBS はすでに AZ 内でレプリケーションを行うためです。現代のアーキテクチャで EBS に RAID 1 を使用することはまれです。
# RAID 1 example (mirroring) — rarely needed with EBS
sudo mdadm --create /dev/md1 \
--level=1 \
--raid-devices=2 \
/dev/xvdh /dev/xvdi
# RAID 1 performance:
# Read: up to 2x (both disks can serve reads)
# Write: same as a single volume (data written to both)
# Fault tolerance: survives single volume failureAMI と EBS スナップショット
Amazon Machine Image(AMI)は EC2 インスタンスを起動するための設計図であり、1 つ以上の EBS スナップショットを基盤とします。AMI に含まれるボリュームごとに 1 つのスナップショットが使用され、通常はルートボリューム用に 1 つ作成されます。実行中のインスタンスからカスタム AMI を作成すると、AWS はインスタンスを停止する(または Windows では VSS を使用する)ことで、アタッチされているすべての EBS ボリュームのスナップショットを取得し、その対応関係を AMI に記録します。AMI の登録解除を行っても、基盤となるスナップショットは自動的に削除されません。料金の発生を止めるには、スナップショットを別途削除する必要があります。
# Create an AMI from a running EC2 instance
aws ec2 create-image \
--instance-id i-0abc1234def567890 \
--name 'MyApp-v2.0-2024-01-01' \
--description 'Application server AMI with v2.0 release' \
--no-reboot
# List snapshots backing an AMI
aws ec2 describe-images \
--image-ids ami-0abc1234def567890 \
--query 'Images[].BlockDeviceMappings[].Ebs.SnapshotId'
# Deregister AMI then delete its snapshots separately
aws ec2 deregister-image --image-id ami-0abc1234def567890
aws ec2 delete-snapshot --snapshot-id snap-0abc1234def567890スナップショットのベストプラクティス
本番ワークロードにおけるスナップショットのベストプラクティス:データベースのスナップショットを取得する前に、ファイルシステムをフリーズまたは静止させて一貫性を確保します(RDS などのマネージドデータベースの多くは自動的に実行します)。スナップショットにタグを付けると、環境、ボリューム ID、日付を記録でき、ライフサイクル管理とコスト配分が容易になります。復元手順を定期的にテストしてください。一度も復元したことのないスナップショットは、バックアップとはいえません。災害復旧のためにリージョン間コピーを保存します。AWS Backupを使用すると、EBS、RDS、DynamoDB、その他のサービスにまたがるポリシーを一元管理できます。
# Freeze filesystem on Linux before snapshotting
# (Example for ext4 filesystem)
sudo fsfreeze -f /mnt/data # Freeze writes
aws ec2 create-snapshot --volume-id vol-0abc1234 --description 'Consistent snapshot'
sudo fsfreeze -u /mnt/data # Unfreeze
# AWS Backup policy for EBS volumes
aws backup create-backup-plan \
--backup-plan '{
"BackupPlanName": "EBSDaily",
"Rules": [{
"RuleName": "DailyRule",
"TargetBackupVaultName": "Default",
"ScheduleExpression": "cron(0 3 * * ? *)",
"DeleteAfterDays": 30
}]
}'EBS スナップショットのごみ箱
EBS Snapshot Recycle Binは、スナップショットと AMI の誤削除から保護します。保持ルールを有効にすると、削除されたスナップショットは完全に破棄されず、ごみ箱に移動されます。保持期間中(1 日から 1 年)は復元できます。これは、管理者や暴走した自動化スクリプトによる誤削除から、古いバックアップ階層を使って復元することなく復旧する必要があるコンプライアンスシナリオで特に重要です。
# Create a Recycle Bin retention rule for EBS snapshots
aws rbin create-rule \
--retention-period RetentionPeriodValue=30,RetentionPeriodUnit=DAYS \
--resource-type EBS_SNAPSHOT \
--description '30-day retention for all EBS snapshots'
# List snapshots currently in the Recycle Bin
aws rbin list-resources \
--resource-type EBS_SNAPSHOT \
--query 'Resources[].{SnapshotId:ResourceId,DeleteDate:DeleteScheduledAt}'理解度チェック
このレッスンで扱った AWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、次のことを学びました。EBS スナップショットは増分方式で S3 に保存され、DLM によってライフサイクルを自動管理できます。暗号化されていないボリュームを暗号化するには、スナップショットのコピー手順が必要です。RAID 0 はボリュームをストライピングしてパフォーマンスを合算し、RAID 1 は冗長性のためにミラーリングします(ただし、EBS はすでに AZ 内でレプリケーションを行います)。次は、共有 Linux ファイルストレージ向けの EFS について学びます。
よくある質問
「EBSスナップショット、暗号化、RAID」レッスンは無料ですか?
はい。「EBSスナップショット、暗号化、RAID」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「EBSスナップショット、暗号化、RAID」で何を学びますか?
ポイントインタイムバックアップ用のEBSスナップショットを作成・自動化し、KMSでボリュームを暗号化して、EC2におけるRAID 0とRAID 1の違いを理解します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「EBSスナップショット、暗号化、RAID」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- EBSボリュームタイプ:gp3、io2、st1、sc1
- EBSスナップショット、暗号化、RAID
- EFS:Linux向け共有ファイルストレージ
- FSx:WindowsファイルサーバーとLustre