Cloudwatch EventsとLambdaでLightsailのスナップショットを定期取得する
仮想プライベートサーバー(VPS)を簡単に利用できる Amazon Lightsail は
- インスタンス(EC2 の AMI 相当)
- ストレージ(EC2 の EBS 相当)
の粒度でスナップショットを作成できます。
今回は Cloudwatch Events と Lambda を連携させて、スナップショットを定期取得する方法を紹介します。
API 理解のために AWS CLI からスナップショットを作成する方法は次の記事を参照ください。
AWS CLIからLightsailのスナップショットを作成する | Developers.IO
awslabs の提供するソリューション
AWS がこのソリューションを AWS サーバーレスアプリケーションモデル (AWS SAM) で提供しているため、このテンプレートをありがたく活用させていただきます。
レポジトリ https://github.com/awslabs/lightsail-auto-snapshots
(※ 画像 https://davidhayden.org/articles/scheduling-lambda-functions-using-cloudwatch-events/)
機能
- コマンド一発でデプロイ完了
- リージョンが指定可能
- 実行スケジュールが指定可能
- スナップショットの保持期間が指定可能
とスナップショット運用をする上で必要になる、基本機能が備わっています。
{インスタンス名}-system-{UNIXTIME}-auto というフォーマット(例"WP-system-1530987471369-auto")のスナップショットが作成されます。
デプロイ
それではデプロイしてます。
コードは GitHub の awslabs 組織以下で管理されています。 手元にクローンします。
$ git clone https://github.com/awslabs/lightsail-auto-snapshots.git $ cd lightsail-auto-snapshots
AWS SAM で構成されているため
$ aws cloudformation package $ aws cloudformation deploy
のコンボでデプロイします。
これらコマンドやオプションなどをラップしたシェルスクリプト bin/deploy
が用意されており、このコマンドを呼び出すだけでデプロイは完了します。
$ bin/deploy
オプションの指定
デプロイ時に
- リージョン(
REGION
)デフォルトは バージニア(us-east-1) - スナップショットの保持期間(
DAYS
)デフォルトは30日 - 実行スケジュール(
SCHEDULE
)デフォルトは1日1回(rate(1 day)
) - AWS プロファイル(
AWS_PROFILE
)デフォルトはdefault
を指定できます。
$ REGION=ap-northeast-1 DAYS=90 SCHEDULE="cron(0 19 * * ? *)" AWS_PROFILE=foo_prd bin/deploy
SCHEDULE
オプションは CloudWatch Events のスケジュール式を指定できます。
スケジュール式の詳細は次のドキュメントを参照ください。
AWS ドキュメント » Amazon CloudWatch » ユーザーガイド » ルールのスケジュール式
実行時の Lambda ログ
スナップショップ用 Lambda が呼び出されると、以下の様なログが出力されます。
START RequestId: 0e2d6bfd-8212-11e8-9f70-69fee0f8cd9a Version: $LATEST Created Snapshot name="WP-system-1530987471369-auto" Deleted Snapshot name="WP-system-1530987218757-auto" END RequestId: 0e2d6bfd-8212-11e8-9f70-69fee0f8cd9a REPORT RequestId: 0e2d6bfd-8212-11e8-9f70-69fee0f8cd9a Duration: 3354.20 ms Billed Duration: 3400 ms Memory Size: 128 MB Max Memory Used: 34 MB
まとめ
Lightsail インスタンススナップショットの定期取得ソリューションを紹介しました。
差分スナップショットに対応しているため、定期的に取得しても、無駄なコストは発生しません。 s AWS SAM で構成管理されているため、構築は一瞬です。
- ディスクのスナップショットには対応していない
- スナップショット名には日付ではなく UNIXTIME が含まれているため、いつ取得されたものか直感的にわかりにくい
といった点は改善の余地があるかもしれませんが、スナップショット運用のスタートラインとしては十分ではないでしょうか?
参考
- https://github.com/awslabs/lightsail-auto-snapshots
- https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-lightsail