Cloudwatch EventsとLambdaでLightsailのスナップショットを定期取得する

仮想プライベートサーバー(VPS)を簡単に利用できる Amazon Lightsail は

  • インスタンス(EC2 の AMI 相当)
  • ストレージ(EC2 の EBS 相当)

の粒度でスナップショットを作成できます。

今回は Cloudwatch EventsLambda を連携させて、スナップショットを定期取得する方法を紹介します。

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 が含まれているため、いつ取得されたものか直感的にわかりにくい

といった点は改善の余地があるかもしれませんが、スナップショット運用のスタートラインとしては十分ではないでしょうか?

参考