AWS Systems Manager で EC2 のバックアップを取得(ドキュメント作成・手動実行篇)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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 ユーザ名や作業履歴等も残りますので、作業としてより安全と言えるでしょう。

ここまでくると、指定した日時に自動的にバックアップを取得する、ということがやりたくなると思いますが、それについては別記事にて紹介いたします。

参考

脚注


  1. 「ドキュメントに AWS というプレフィックスをつけることはできません。AWS-name や AWSname と指定すると、エラーが発生します。」 https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-createdoc.html