Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

AMIをS3に保存する方法

はじめに

本記事はEC2のバックアップをS3に保管する方法を紹介させていただきます。 S3でバックアップを保管することによって、保管費用の削減を見込めます。

やり方

AMIをS3にコピーする

AMIのAMI IDをメモします。
AMI_ID

AWS CLIを使って以下のコマンドを実行します。成功したらファイル名がObjectKeyとして返ってきます。
aws ec2 create-store-image-task --image-id {AMIのID} --bucket {対象バケット}
AMIをS3にコピーするコマンド

必要に応じてストレージティアを変更することで、より安価に保存することか可能です。
ストレージティア変更

S3に保存したAMIから復元する方法

AWS CLIを使って以下のコマンドを実行します。成功したらAMIのIDがObjectKeyとして返ってきます。
aws ec2 create-restore-image-task --bucket {対象バケット} --object-key {ファイルのバケット以降のパス} AMI復元コマンド 復元されたAMI
復元された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スタックを生成します。
テンプレートからスタック生成 スタックパラメーター

パラメーター

  • バケット名(AMIを保管する新規バケット)
  • ストレージクラス
  • 処理対象ボールト名(既存ボールト)
  • 何日より前のリカバリーポイントを処理対象にするのか
  • 実行時間(UTC)

スタックが生成されたら、指定された時間に以下のことが順番に行われます

  • 対象ボールトのリカバリーポイントの元になってるAMIをS3にコピー
  • コピーされたファイルのストレージクラスの変更
  • リカバリーポイントの削除