運用の効率化を支える AWS Systems Manager Automation の紹介

Kazunori Kiso

2023.2.16

AWS Systems Manager(SSM)では運用に役立つ機能が提供されています。

ただし、提供されている機能が多く、今まで使用した経験があるのは一部の機能に限られていましたので、どのようなことができるのか調べてみました。

今回はその中のうち、Automation という機能についてご紹介したいと思います。

Automation とは

Automation はその名が示す通り、EC2 やその他の AWS リソースのメンテナンスを自動化するための Systems Manager の機能です。

Automation でできること

Automation を利用することでどのようなタスクを自動化できるのかの一例として、以下のようなものが挙げられます。Automation では Document と呼ばれるものに、自動化したい一連の処理を定義します。
Document は事前定義されたものを選択することもできますし、自前で作成することもできます。

以下は事前定義された Document の一例です。

  • EC2 インスタンスの起動・再起動・停止・終了
  • EC2 インスタンスからAMIの作成
  • DynamoDB テーブルのバックアップ作成・削除

今回は事前定義された Document が提供されている EC2 インスタンスの起動・停止を例に、Automation の設定の方法をご紹介したいと思います。

EC2 インスタンスの起動・停止の自動化は、利用していない時間帯に EC2 を停止し、利用し始める時に起動することでコストの削減に寄与するかと思います。
また、単発での実行ではなく、定期的に起動・停止を行うことを考慮して、EventBridge をあわせて利用した方法をご紹介します。

本記事では従来の EventBridge Rules ではなく、新たにリリースされた EventBridge Scheduler を用いたいと思います。

大まかな手順は以下のようになります。

  • (Document は事前定義のものを用いる)
  • Document に記載した処理を実行できる権限をもつ IAM ロール・ポリシーを用意
  • EventBridge Scheduler のスケジュールを作成

実際に試してみる

1.Automation の Document に記載されている処理を実行できる権限をもつIAMロールを作成します。 マネジメントコンソールの IAM のロールの画面にて、「ロールの作成」を選択します。 信頼されたエンティティタイプ に AWSのサービスを選択し、ユースケース には Systems Manager を指定した後、「次へ」を選択します。

2.今回の Automation での EC2 関連の一連の処理は、管理ポリシーである AmazonSSMAutomationRole をアタッチしてあげれば実行することができます。 こちらのポリシーを選択します。

ちなみに AmazonSSMAutomationRole ポリシーの内容は以下のようになっています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:Automation*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateImage",
                "ec2:CopyImage",
                "ec2:DeregisterImage",
                "ec2:DescribeImages",
                "ec2:DeleteSnapshot",
                "ec2:StartInstances",
                "ec2:RunInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances",
                "ec2:DescribeInstanceStatus",
                "ec2:CreateTags",
                "ec2:DeleteTags",
                "ec2:DescribeTags",
                "cloudformation:CreateStack",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:UpdateStack",
                "cloudformation:DeleteStack"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:*"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:*:*:Automation*"
            ]
        }
    ]
}

また、iam:PassRole の権限を付与する必要がありましたので、ロールに対してポリシーを追加でアタッチしています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/auto-start-and-stop-ec2"
        }
    ]
}

3.ロール名を入力して、画面下部の「ロールを作成」を選択します。

4.ロールを作成後、「信頼ポリシーを編集」を選択して、scheduler.events.amazonaws.com を含めるよう更新します
※今回は EventBridge の新しい機能である EventBridge Scheduler を使用しますので、 events.amazonaws.com ではなく scheduler.events.amazonaws.com にしています。

IAMロールの設定は以上になります。

5.EventBridge Scheduler の設定に移ります。 コンソールで EventBridge を開き、画面左側のナビゲーションペインから「スケジュール」、もしくは画面右側の「スケジュールを作成」を選択します。

6.スケジュール名を入力し、以下のような設定をします。

  • 頻度: 定期的なスケジュール
  • スケジュールの種類: cron ベースのスケジュール
  • cron式: 任意のスケジュール
  • フレックスウィンドウ: 任意の設定

7.ターゲットの詳細にて、すべての APIを選択し、Systems Manager を検索して選択します。

8.Automation を実行するために StartAutomationExecution API を選択します。

9.API に渡すパラメータを入力します。
DocumentName には、事前定義されている EC2 を起動するための Document の名前(AWS-StartEC2Instance)を設定します。 AWS-StartEC2Instance Document では、パラメータとして AutomationAssumeRoleInstanceId を受け付けますのでそれらも設定します。
https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-startec2instance.html

{
  "DocumentName": "AWS-StartEC2Instance",
  "Parameters": {
    "AutomationAssumeRole": ["<ROLE_ARN>"],
    "InstanceId": ["<INSTANCE_ID>"]
   }
}

10.設定の画面では、ご自身の環境に合わせて任意の設定をしてください。 アクセス許可のセクションで先ほど作成したIAMロールを選択して、「次へ」を選択します。

11.設定を確認の上、「スケジュールを保存」を選択します。

12.Automation 実行前の EC2 は停止状態でしたが、無事起動したことを確認できました。

実行前

実行後

EventBridge Scheduler で設定した時間通りに起動しています。

正常に実行されたかどうかは CloudTrail を見ることで確認することができます。

EC2 インスタンスの停止も事前定義の Document が提供されています。起動と同様の方法で実現できると思いますので、こちらも合わせて試してみてください。

感想

いかがでしたでしょうか。

上記で紹介した Automation の他にも、EC2 に SSH キーを使うことなく安全にシェルログインができるセッションマネージャーというサービスや、EC2 の起動時などにパッチの適用や設定の反映などを実施できるステートマネージャーというサービスがあったりします。

運用の効率化にまつわるサービスが多い印象でしたので、興味があればぜひ触ってみてはいかがでしょうか。

ブログ一覧へ戻る

お気軽にお問い合わせください

SREの設計・技術支援から、
SRE運用内で使用する
ツールの導入など、
SRE全般についてご支援しています。

資料請求・お問い合わせ