AWS Systems Manager で EC2 のバックアップを取得(ドキュメント作成・手動実行篇)
AWS Systems Manager を使って、EC2 インスタンスのバックアップ取得( AMI の作成)をしてみたいと思います。
出来合の AWS Systems Manager ドキュメントには無いので、その作成から行いました。
バックアップ取得のためのドキュメント作成
下記のような内容のドキュメントを作成しました。
- 指定されたインスタンスの AMI を取得する(
aws:createImage
) - 取得時にインスタンスのリブートはしない
- AMI名は「
backup_(インスタンスID)_(日時)-cm
」 - ドキュメント名は「
CM-BackupEC2Instance
」
ドキュメント名は判別できれば(かつ AWS で始まらなければ1)何でも良いのですけど取りあえず。
既存のドキュメントを参考にしつつ、 YAML で記述します。
# CM-BackupEC2Instance schemaVersion: '0.3' description: Backup EC2 Instance (AMI) parameters: InstanceId: type: String description: (Required) EC2 Instance ID to backup mainSteps: - name: createImage action: 'aws:createImage' maxAttempts: 3 onFailure: Abort inputs: InstanceId: '{{ InstanceId }}' ImageName: 'backup_{{ InstanceId }}_{{ global:DATE_TIME }}-cm' NoReboot: true ImageDescription: 'Created by ASM on {{ global:DATE_TIME }} UTC from {{ InstanceId }}' outputs: - createImage.ImageId
ドキュメントの内容を簡単に説明しますと、
- schemaVersion: 今回の用途(オートメーション)として使用するドキュメントの場合は、今のところ 0.3 で決め打ちのようです
- description: このドキュメントの説明
- parameters: 実行前に指定するパラメータ群。今回はインスタンスID(
InstanceId
)のみとなります - mainSteps: ここに処理を記述します。今回は
createImage
のみとなります - outputs: 実行完了時に出力する内容です。今回は作成された AMI のイメージ ID を出力します
mainSteps内の {{ InstanceId }}
は、paramaters にて指定されたインスタンス ID が代入されます。これを inputs
パラメータ InstanceId に入力します。
再起動せずに AMI を作成するので、inputs
パラメータ NoReboot を true にします。
また {{ global:DATE_TIME }}
は システム変数 として定義されているもので、実行時の日時(UTC)を yyyy-MM-dd_HH.mm.ss
の形式で代入してくれますので、インスタンス ID とこれを AMI 名と説明に利用します。
このドキュメントを、AWS Systems Manager に登録します。
設定手順
AWS Systems Manager のコンソールから「Documents」を選択し、「ドキュメントの作成」をクリックします。
「ドキュメントの作成」画面で、必要な情報を埋めます。
- 名前 : CM-BackupEC2Instance
- ドキュメントタイプ : オートメーション
- コンテンツ : YAML を選択、上述した YAML ドキュメントを貼り付けます
「ドキュメントの作成」をクリックすると、ドキュメントが登録されます。自己所有のドキュメントのみを表示させるなどして、一覧に表示されることを確認下さい。
バックアップの取得
それでは、登録したドキュメントを使ってバックアップを取得します。操作の詳細説明は、こちらの記事を参考にして下さい。
AWS Systems Manager で複数の EC2 インスタンスを 1 台ずつ停止・起動してみた #reinvent
今回は予め、バックアップ対象となるインスタンスに共通のタグをつけ、リソースグループ「Backup_20171228」として登録しておきました。
- AWS Systems Manager のコンソールから「オートメーションの実行」をクリック
- 先ほど作成した「 CM-BackupEC2Instance 」を選択
- 「ターゲットとレート制御を有効にする」をON
- ターゲットとして Resource Group
- パラメータの選択 : Instance Id
- リソースグループ名 : Backup_20171228
- 同時実行数やエラーのしきい値はお好みで
設定したら「オートメーションの実行」をクリックします。
自動的に、EC2 の台数分だけ AMI が作成されたら成功です。実行履歴や、EC2 のコンソールなどから確認してみて下さい。
所感
例えば計画メンテナンス作業前のバックアップなどであれば、予め対象にタグ付けしておいてグループ化しておくことで、確実かつ少ない手順で AMI の作成が可能になります。実行した IAM ユーザ名や作業履歴等も残りますので、作業としてより安全と言えるでしょう。
ここまでくると、指定した日時に自動的にバックアップを取得する、ということがやりたくなると思いますが、それについては別記事にて紹介いたします。
参考
- Creating an Automation Document - AWS Systems Manager
- Automation System Variables - AWS Systems Manager
脚注
- 「ドキュメントに AWS というプレフィックスをつけることはできません。AWS-name や AWSname と指定すると、エラーが発生します。」 https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-createdoc.html ↩