EC2停止→バックアップ→EC2起動のプロセスをノーコードで自動化してみた

どうもSCSK齋藤です。

EC2のバックアップを取得する際に、アプリケーション整合性の観点から、EC2を停止してからバックアップを取得するユースケースは発生すると考えられます。

Lambdaなどを使って、それらの手順を自動化することはできますが、今回はSystems Manager Automation Runbookを用いてノーコードでその仕組みを作成してみました。

大まかな流れ

Systems Manager Automation Runbookで、以下の流れを自動化するランブックを作成します。

  1. 全EC2をディスクライブ
  2. 全EC2を停止
  3. AWS BackupのAPIを使用してバックアップの作成
  4. 全EC2を起動

今回のバックアップはAWS Backupを用いたいと思います。

 

今回解説しない箇所

今回、下記の箇所は詳しく解説致しません。

  • AWS Backupで必要なIAMロールの作成方法
  • バックアップテスト用のEC2インスタンスの作成方法

AWS Backupで用いるIAMロールについては、本手順で使うIAMロール(backup_role)の画面キャプチャをあらかじめ記載しておきます。

また、EC2をバックアップさせるテスト対象のインスタンスについても、2台用意して検証してみます。

 

やってみた

それでは、早速作成していきましょう!

Runbookの作成

SystemsManagerのコンソール画面の左のメニューから、「オートメーション」をクリックし、「Create Automation Runbook」をクリックします。

 

そうすると、以下のようなステートマシン作成画面に遷移します。

 

全EC2のディスクライブの処理の追加

まず、ディスクライブの処理を追加します。

先ほどのRunbook作成画面の左側の検索欄で、「AWS API」を選択します。

検索欄で、Describeinstancesと検索し、EC2のDescribeinstancesが出てきたら、Runbook内にドラッグ&ドロップします。

そのまま、画面右側のDescribeInstancesのメニューの中で、出力タブに切り替えます。
どのような値を次の処理に渡すかを定義するため、下記の設定を行います。

設定内容の解説は下記になります。

項目 設定値 説明
名前 InstanceIds 任意の名前を入力できるので、どのような値を出力するかを定義します。

今回は、DescribeInstancesでインスタンスIDのリストを出力するので、このような名前とします。

セレクター $.Reservations..Instances..InstanceId AutoMationRunbookでは、裏でboto3が使われているので、boto3のドキュメントのレスポンス構造の中から、取得したい項目を指定します。

Responseの中身については、ここを参照してください。

タイプ StringList 今回はインスタンスIDの集合体を取得したいので、String型のリストとします。

 

全EC2を停止する処理の追加

ディスクライブしたインスタンスのリストを元に、全EC2の停止を行います。

左側の検索欄で、「アクション」を選択し、ChangeInstanceStateを検索します。
出てきたものを、ドラッグ&ドロップします。

まず、名前をわかりやすく変更します。

次にインプットを編集します。

下記の値を設定します。

項目 設定値 説明
Instance IDs DescribeInstances.InstanceIds DescribeInstancesでリスト化したインスタンスIDたちが渡されます。
Desired state stopped 停止を行いたいため、stoppedとします。

全EC2をバックアップする処理を追加

ディスクライブしたインスタンスのリスト元に、全EC2のバックアップを行います。
今回は、Loop処理を追加し、その中でインスタンス1つ1つのバックアップ処理を含める形とします。

 

Loop処理の追加

左側の検索欄で、アクションを指定し、ループを選択します。そのまま、ドラッグ&ドロップで、StopInstancesの下につけます。

ステップ名を自由に設定できるので、わかりやすく「BackupLoop」と名付けます。

 

次に、右側のメニューのインプットを設定します。

ループタイプを今回はFor eachに選択します。

その後、イテレーターを選択しますが、前段のDescribeInstancesで出力した、InstanceIdsを選択します。

 

バックアップ処理の追加

ループ処理の中に、バックアップの処理を追加していきます。

左側の検索欄で、「AWS API」を選択し、StartBackupJobを検索します。
出てきたものを、ドラッグ&ドロップします。

次に、インプットタブを選択し、バックアップの条件を入力していきます。

設定内容の解説は下記になります。

項目 設定値 説明
BackupVaultName Default Backupの保存コンテナであるバックアップVaultの名前を設定します。

今回は、デフォルトでアカウントに用意されているDefaultという名前のバックアップVaultを使用します。

IamRoleArn arn:aws:iam::{account_id}:role/backup_role AWSBackupが用いるIAMロールのARNを指定します。

本ブログでは、冒頭で述べたIAMロールを使用しています。

ResourceArn arn:aws:ec2:{region}:{account_id}:instance/{{ BackupLoop.CurrentIteratorValue }} バックアップ対象のリソースのARNを指定します。

今回はループ処理の中でインスタンス1つずつ処理をしていくため、EC2のARNの型を用意しておき、末尾の部分を{{ BackupLoop.CurrentIteratorValue }}とすることで、ここにインスタンスIDが入り、EC2のARNが完成する形とします。

※上記表の{region}と{account_id}は、それぞれご自身の環境のリージョン名とアカウントIDに置き換えてください。

 

全EC2を起動する処理を追加

左側の検索欄で、「アクション」を選択し、ChangeInstanceStateを検索します。
出てきたものを、ドラッグ&ドロップします。
ついでに名前も、StartInstancesに変更します。

StartInstancesのメニューで、インプットタブを選択します。

項目 設定値 説明
Instance IDs DescribeInstances.InstanceIds DescribeInstancesでリスト化したインスタンスIDたちが渡されます。
Desired state running 起動したいため、runningとします。

 

保存と実行

最後に、名前を保存します。

画面左上のペンマークから編集を行い、お好きな名前で保存します。

次に、右上の「ランブックを作成」を押下します。
下記のような画面が出ますが、特に指定せず、画面下のExecuteを押下します。

そうすると、早速Runbookが走ります。

 

実行画面に遷移後、しばらく時間が経過した後確認すると、正しく実行されたのを確認することができました!

AWSBackupのコンソール画面に遷移し、保存したVaultを確認してみますと2つのバックアップが保存されているのを確認できました!

 

改めてのポイント

今回のRunbookで意識したポイントとして、AutomationRunbookに組み込まれているアクションである「ChangeInstanceState」を使ったところです。

EC2の停止と起動の際にaws:executeAwsApiのStopInstancesや、RunInstancesといったAPIを使う選択肢もありました。

しかし、これらのAPIは、一斉にEC2を停止や起動だけして状態の追跡をしません。

そのため、EC2が停止し切らない状態で次の状態に遷移(バックアップを取得)してしまうため、整合性を確保するという観点から望ましくありません。ですが、AutomationRunbookに組み込まれているアクションである「ChangeInstanceState」を使うことで、状態の追跡まで行ってくれます。

これを用いることで、インスタンスが停止し切った段階で次のワークフローに進んでくれるので、整合性を確保する観点から望ましいものとなります。

 

まとめ

今回は、インスタンスを停止してバックアップを行う自動化を、ノーコードにて実施してみました。

今回作ったRunbookを、EventBridgeルールで定期的にキックするようにすることで、毎日のバックアップなども容易になるかと思いますので、組み合わせてみるといいと思います。

著者について

フロントエンドもバックエンドも両方少しずつ勉強して、フルスタックエンジニアを目指してます。
サーバレス開発の楽しさを実感中!

ANGEL Dojo 2021 ANGEL賞、ベストアーキテクチャ賞ダブル受賞
2023 Japan AWS Jr. Champions
2022〜24 Japan AWS All Certifications Engineers

齋藤友宏をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWS
シェアする
タイトルとURLをコピーしました