はじめに
本記事はEC2のバックアップをS3に保管する方法を紹介させていただきます。 S3でバックアップを保管することによって、保管費用の削減を見込めます。
やり方
AMIをS3にコピーする
AMIのAMI IDをメモします。
AWS CLIを使って以下のコマンドを実行します。成功したらファイル名がObjectKeyとして返ってきます。
aws ec2 create-store-image-task --image-id {AMIのID} --bucket {対象バケット}
必要に応じてストレージティアを変更することで、より安価に保存することか可能です。
S3に保存したAMIから復元する方法
AWS CLIを使って以下のコマンドを実行します。成功したらAMIのIDがObjectKeyとして返ってきます。
aws ec2 create-restore-image-task --bucket {対象バケット} --object-key {ファイルのバケット以降のパス}
復元されたAMI
費用について
EBSスナップショットとS3保存料金の比較です。S3は一見安いですが注意点も合わせて読んでください。
料金参考:https://aws.amazon.com/jp/backup/pricing/?nc1=h_ls
ストレージ種別 | 料金 |
---|---|
EBSボリュームスナップショット | 毎月$0.05/GB |
S3 Standard | 毎月$0.025/GB |
S3 Glacier Instant Retrieval | 毎月$0.005/GB(取り出し料金 $0.03/GB) |
注意点
AMIのバックアップの仕組みは増分的で、前回と変わった部分だけスナップショット化されるため、スナップショットのサイズがそこまで大きくありません。
増分的だから、ベースとなってる古いスナップショットが消されたら、動かなくなるのでは?と感じるところですが、
そんなことはなく、スナップショットを消す場合、別のスナップショットに参照されない情報のみ消されるようです。(画面上から分かりませんが)
https://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/ebs-deleting-snapshot.html
AMIをS3にコピーしたら、スナップショットの情報が全部ファイルに詰まれて、実質フルバックアップになるため、サイズが通常のスナップショットより大きい。
その差によって保存コストが逆に跳ね上がる可能性があります。
おまけ
自動的にAWS BackupのEC2のリカバリーポイントをS3のGlacierに保存し、その後リカバリーポイントを削除する仕組み関連の記事がありましたので紹介します。
- 記事で使われたCloudFormationスタック
https://awsstorageblogresources.s3.us-west-2.amazonaws.com/ec2amiarchivalworkflow/ec2-ami-archival-workflow.yaml
使い方
テンプレートを使って新規CloudFormationスタックを生成します。
パラメーター
- バケット名(AMIを保管する新規バケット)
- ストレージクラス
- 処理対象ボールト名(既存ボールト)
- 何日より前のリカバリーポイントを処理対象にするのか
- 実行時間(UTC)
スタックが生成されたら、指定された時間に以下のことが順番に行われます
- 対象ボールトのリカバリーポイントの元になってるAMIをS3にコピー
- コピーされたファイルのストレージクラスの変更
- リカバリーポイントの削除