コマンドラインで始めるAWS:EBS・RDSのスナップショット取得手順
目次
- はじめに
- スナップショットとは
- AWS CloudShellの利用準備
- EBSのスナップショット取得手順
- RDSのスナップショット取得手順
- タグ管理の重要性
- ベストプラクティスと注意点
- まとめ
- Q&A
- 参考文献・リソース
- 読者へのフィードバック要請
はじめに
AWS(Amazon Web Services)は、クラウドコンピューティングの分野で広く利用されているサービスです。その中でも、 EBS(Elastic Block Store) と RDS(Relational Database Service) は、データの保存と管理に欠かせないサービスです。データのバックアップと復元は、システムの信頼性を確保するために非常に重要です。スナップショットを活用することで、データの状態を特定の時点で保存し、必要に応じて復元することが可能になります。
本記事では、AWS初心者の方々を対象に、 AWS CloudShell を使用してEBSとRDSのスナップショットを取得する手順を詳しく解説します。CloudShellを活用することで、コマンドラインの操作が容易になり、スクリプト化や自動化が可能となります。初心者の方でも理解しやすいよう、ステップバイステップで進めていきます。
スナップショットとは
スナップショットとは、特定の時点におけるデータの状態を保存する機能です。バックアップやデータ復元、システムの移行、テスト環境の構築など、さまざまな用途で利用されます。AWSでは、EBSとRDSに対してスナップショット機能が提供されています。
EBSスナップショット
EBSスナップショットは、EBSボリュームのデータをAmazon S3に保存するバックアップ機能です。EBSボリュームは、EC2インスタンスに接続されるブロックストレージで、オペレーティングシステムやアプリケーションデータ、ユーザーデータを保持します。EBSスナップショットは増分バックアップ1を採用しており、初回のフルバックアップ以降は変更されたデータのみを保存するため、効率的なストレージ利用が可能です。
RDSスナップショット
RDSスナップショットは、RDSインスタンス(データベース)の状態を保存するためのバックアップ機能です。RDSは、MySQL、PostgreSQL、Oracle、SQL Serverなど、複数のデータベースエンジンをサポートするマネージドデータベースサービスです。RDSスナップショットは、ポイントインタイムリカバリ2をサポートしており、特定の時点にデータベースを復元することができます。
AWS CloudShellの利用準備
AWS CloudShellは、ブラウザベースのシェル環境で、AWSリソースを管理するためのコマンドラインツールを提供します。CloudShellを利用することで、ローカル環境にAWS CLIをインストールする必要がなく、すぐにコマンドを実行することが可能です。以下の手順でCloudShellを準備しましょう。
1. AWS CloudShellの起動
-
AWSマネジメントコンソールにログイン
- AWSマネジメントコンソールにアクセスし、認証情報を使用してログインします。
-
CloudShellの起動
- コンソールの右上にあるCloudShellアイコン(
>_
のシンボル)をクリックします。 - 初めて利用する場合は、CloudShellのセットアップが自動的に開始されます。
- コンソールの右上にあるCloudShellアイコン(
2. 環境の確認
CloudShellが起動したら、以下のコマンドを実行してAWS CLIのバージョンを確認します。
aws --version
出力例:
aws-cli/2.4.0 Python/3.8.8 Linux/5.4.0-1045-aws exe/x86_64.ubuntu.20 prompt/off
CloudShellには既にAWS CLIがインストールされており、認証情報も自動的に設定されています。これにより、追加の設定やインストール作業は不要です。
EBSのスナップショット取得手順
EBSスナップショットを取得するための具体的な手順を以下に示します。スナップショットの作成はコマンドラインで行い、その他の確認はAWSコンソールを使用します。手順は順番に実行することで、スムーズにスナップショットを取得できます。
1. EBSボリュームの確認
EBSボリュームの確認はAWSコンソールで簡単に行えます。手順は以下の通りです。
-
AWSマネジメントコンソールにログイン
- AWSマネジメントコンソールにアクセスし、認証情報を使用してログインします。
-
EC2ダッシュボードに移動
- 左上のナビゲーションメニューから「EC2」を選択します。
-
ボリュームの確認
- 左側のメニューから「ボリューム」をクリックします。
- 表示されるボリューム一覧から、対象のEBSボリュームを探します。
- ボリュームID、サイズ、状態(in-use など)、アベイラビリティゾーン、および**タグ(Nameなど)**が表示されます。
- 必要に応じてフィルタリング機能を使用して、特定のボリュームを迅速に見つけることができます。
2. スナップショットの作成
スナップショットの作成はAWSコンソールではなく、コマンドラインから実施します。以下の手順でスナップショットを作成します。
-
CloudShellを開く
- AWSマネジメントコンソールの右上にあるCloudShellアイコンをクリックして、CloudShellを開きます。
-
スナップショットの作成コマンドを実行
- 以下のコマンドを使用して、EBSスナップショットを作成します。
aws ec2 create-snapshot --volume-id vol-0abcd1234efgh5678 --description "定期バックアップ - ProductionDB" \ --tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=ProductionDB-Backup},{Key=Environment,Value=Production},{Key=Project,Value=WebApp}]'
コマンドの解説:
-
create-snapshot
: スナップショットを作成するコマンド。 -
--volume-id
: スナップショットを取得する対象のEBSボリュームID。 -
--description
: スナップショットの説明。 -
--tag-specifications
: スナップショットに付与するタグの指定。
タグ付けの例:
-
Key=Name,Value=ProductionDB-Backup
: スナップショットの名前。 -
Key=Environment,Value=Production
: 環境情報。 -
Key=Project,Value=WebApp
: プロジェクト名。
注意点:
- スナップショットの名前は一意である必要があります。
- タグを活用することで、スナップショットの管理や検索が容易になります。
-
コマンドの実行結果を確認
コマンドを実行すると、スナップショットの詳細情報がJSON形式で返されます。例:
{ "SnapshotId": "snap-0abc1234defgh5678", "VolumeId": "vol-0abcd1234efgh5678", "State": "pending", "StartTime": "2024-04-20T12:34:56.000Z", "Progress": "", "OwnerId": "123456789012", "Description": "定期バックアップ - ProductionDB", "Tags": [ { "Key": "Name", "Value": "ProductionDB-Backup" }, { "Key": "Environment", "Value": "Production" }, { "Key": "Project", "Value": "WebApp" } ], "VolumeSize": 100, "Encrypted": false, "StorageTier": "standard" }
3. スナップショットの確認
作成されたスナップショットが正しく反映されているか、AWSコンソールで確認します。
-
EC2ダッシュボードに移動
- 左上のナビゲーションメニューから「EC2」を選択します。
-
スナップショットの確認
- 左側のメニューから「スナップショット」をクリックします。
- 作成されたスナップショットの一覧が表示されます。ステータスが「completed」になっていることを確認します。
ポイント:
- Snapshot ID: スナップショットの一意識別子。
- Description: スナップショットの説明。
-
State: スナップショットの状態(
pending
、completed
など)。 - Start Time: スナップショット作成開始時刻。
- Size: スナップショットのサイズ(GiB)。
RDSのスナップショット取得手順
RDSスナップショットを取得するための手順を以下に示します。スナップショットの作成はコマンドラインで行い、その他の確認はAWSコンソールを使用します。EBSと同様に、スナップショットの取得はデータの保護に欠かせないプロセスです。
1. RDSインスタンスの確認
RDSインスタンスの確認はAWSコンソールで簡単に行えます。手順は以下の通りです。
-
AWSマネジメントコンソールにログイン
- AWSマネジメントコンソールにアクセスし、認証情報を使用してログインします。
-
RDSダッシュボードに移動
- 左上のナビゲーションメニューから「RDS」を選択します。
-
データベースの確認
- 左側のメニューから「データベース」をクリックします。
- 表示されるRDSインスタンスの一覧から、対象のインスタンスを確認します。
- DBインスタンス識別子、ステータス(available など)、エンジン(mysql、postgres など)、およびDB名が表示されます。
- 必要に応じてフィルタリング機能を使用して、特定のインスタンスを迅速に見つけることができます。
2. スナップショットの作成
スナップショットの作成はAWSコンソールではなく、コマンドラインから実施します。以下の手順でスナップショットを作成します。
-
CloudShellを開く
- AWSマネジメントコンソールの右上にあるCloudShellアイコンをクリックして、CloudShellを開きます。
-
スナップショットの作成コマンドを実行
- 以下のコマンドを使用して、RDSスナップショットを作成します。
aws rds create-db-snapshot --db-snapshot-identifier mydatabase-snapshot-20240420 --db-instance-identifier mydatabase
コマンドの解説:
-
create-db-snapshot
: RDSスナップショットを作成するコマンド。 -
--db-snapshot-identifier
: スナップショットの一意識別子。<DBInstanceIdentifier>-snapshot-<日付>
の形式がおすすめ。 -
--db-instance-identifier
: スナップショットを取得する対象のRDSインスタンスID。
注意点:
- スナップショット名は一意である必要があります。
- RDSスナップショットでは、タグの指定は不要です。元のインスタンスのタグが自動的に継承されます。
-
コマンドの実行結果を確認
コマンドを実行すると、スナップショットの詳細情報がJSON形式で返されます。例:
{ "DBSnapshot": { "DBSnapshotIdentifier": "mydatabase-snapshot-20240420", "DBInstanceIdentifier": "mydatabase", "SnapshotCreateTime": "2024-04-20T12:34:56.000Z", "Engine": "mysql", "Status": "creating", "AllocatedStorage": 100, "VpcId": "vpc-0abcd1234efgh5678", "InstanceCreateTime": "2024-01-15T08:00:00.000Z", "MasterUsername": "admin", "EngineVersion": "5.7.31", "LicenseModel": "general-public-license", "SnapshotType": "manual", "PercentProgress": 0, "StorageType": "gp2", "Encrypted": false, "KmsKeyId": null } }
3. スナップショットの確認
作成されたスナップショットが正しく反映されているか、AWSコンソールで確認します。
-
RDSダッシュボードに移動
- 左上のナビゲーションメニューから「RDS」を選択します。
-
スナップショットの確認
- 左側のメニューから「スナップショット」をクリックします。
- 作成されたスナップショットの一覧が表示されます。ステータスが「available」になっていることを確認します。
ポイント:
- DBSnapshotIdentifier: スナップショットの一意識別子。
-
Status: スナップショットの状態(
creating
、available
など)。 -
SnapshotType: スナップショットのタイプ(
manual
、automated
)。 - SnapshotCreateTime: スナップショット作成時刻。
- Engine: データベースエンジン。
タグ管理の重要性
AWSでは、リソースの識別や分類、アクセス制御、コスト管理のためにタグを活用します。適切なタグ付けは、リソース管理を効率化し、組織全体での統一的な運用を可能にします。
EBSスナップショットでのタグ付け
EBSスナップショットでは、作成時にタグを明示的に指定する必要があります。タグを付けることで、以下のメリットがあります。
- リソースの検索性向上: 特定のタグでリソースをフィルタリングできます。
- コスト分析: タグを用いてコスト配分レポートを作成できます。
- アクセス制御: タグベースのIAMポリシーでアクセスを制限できます。
タグ付けのベストプラクティス:
- 一貫性のあるキーとバリューを使用する: 組織内で統一されたタグの命名規則を定めます。
- 必要な情報を過不足なく含める: プロジェクト名、環境(開発、本番など)、所有者などをタグに含めます。
例:
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=ProductionDB-Backup},{Key=Environment,Value=Production},{Key=Project,Value=WebApp}]'
RDSスナップショットでのタグ継承
RDSスナップショットの場合、元のインスタンスのタグが自動的に継承されます。これは、タグ付けの手間を省き、一貫性を保つのに役立ちます。
追加のタグ付け:
必要に応じて、新しいタグを追加することも可能です。
aws rds add-tags-to-resource --resource-name arn:aws:rds:ap-northeast-1:123456789012:snapshot:mydatabase-snapshot-20240420 --tags Key=BackupType,Value=Manual
注意:
- リソース名にはスナップショットのARN(Amazon Resource Name)を指定します。
- タグの追加は、必要な情報に応じて柔軟に行いましょう。
ベストプラクティスと注意点
スナップショット取得の際には、以下のベストプラクティスと注意点を押さえておくことが重要です。
1. 自動化の推進
スナップショットの取得を自動化することで、手動操作の手間を削減し、ヒューマンエラーのリスクを低減できます。定期的なバックアップスケジュールを設定し、自動的にスナップショットを取得する仕組みを整えましょう。
2. 定期的な検証
取得したスナップショットが正常に機能しているかを定期的に確認することが重要です。バックアップデータの整合性を保つために、復元テストを実施し、スナップショットからのデータ復元が問題なく行えることを確認してください。
3. セキュリティの確保
スナップショットには重要なデータが含まれるため、適切なセキュリティ対策を講じることが必要です。スナップショットの暗号化やアクセス制御を実施し、データの機密性と整合性を保護しましょう。
まとめ
AWSでのEBSとRDSのスナップショット取得は、検証を通じて最適化できます。
- CloudShellでの取得方法の理解: AWS CloudShellを活用することで、スナップショットの取得手順を自動化し、効率的に管理できます。
- タグ管理の重要性とその実践: 適切なタグ付けにより、スナップショットの検索性やコスト管理、アクセス制御が向上します。
- ベストプラクティスの遵守: 自動化、定期的な検証、セキュリティの確保など、基本的なベストプラクティスを遵守することで、システムの信頼性と安全性を高めることができます。
ぜひ自身の環境でもこれらの方法を活用し、最適なバックアップ戦略を構築してください。
Q&A
Q1: スナップショットを取得するとシステムに影響はありますか?
A1: 基本的にはありません。EBSスナップショットはバックグラウンドで取得され、インスタンスのパフォーマンスに大きな影響を与えません。ただし、RDSスナップショット取得時には、一時的にI/Oが増加する可能性があります。
Q2: スナップショットの保存期間を設定できますか?
A2: はい、可能です。スナップショットのライフサイクルを管理するために、AWS Backupや自動化スクリプトを使用して、古いスナップショットを自動的に削除できます。
Q3: 異なるリージョンにスナップショットをコピーできますか?
A3: できます。EBSとRDSのスナップショットは、他のリージョンにコピーして冗長性を高めることが可能です。以下のコマンドを使用します。
aws ec2 copy-snapshot --source-region ap-northeast-1 --source-snapshot-id snap-0abcd1234efgh5678 --destination-region us-west-2
Q4: スナップショットを共有することはできますか?
A4: はい、可能です。スナップショットを他のAWSアカウントと共有することができます。ただし、共有にはセキュリティリスクが伴うため、慎重に行ってください。
Q5: 暗号化されたボリュームやデータベースのスナップショットはどう扱いますか?
A5: 暗号化されたリソースのスナップショットも暗号化された状態で保存されます。復元時には、適切なキーを使用してアクセスする必要があります。
参考文献・リソース
- AWS公式ドキュメント - EBSスナップショット
- AWS公式ドキュメント - RDSスナップショット
- AWS CLIコマンドリファレンス
- AWS Backup
- AWSブログ - スナップショットの自動化
読者へのフィードバック要請
本記事がお役に立ちましたら、ぜひフィードバックをお寄せください。ご質問やご意見、取り上げてほしいトピックなどがございましたら、お気軽にコメントしてください。皆様の声が、今後の記事作成の励みとなります。また、この記事をSNSやコミュニティで共有していただけると幸いです。