はじめに
本記事では、AWS Systems Managerドキュメント(以下、SSMドキュメント)を使用してEC2インスタンスを効率的に管理する方法を紹介します。特に、以前ご紹介した記事の応用編として、EC2インスタンスに設定されたタグに基づいて起動・停止を制御する手法に焦点を当てます。
前提
- 今回の例で停止させるEC2インスタンスは、タグキーに「Environment」、タグバリューに「Staging」が設定されているものとする
- 東京リージョンのオンデマンドEC2インスタンスとし、複数台でも可とする
- 月~金曜日の8:00~19:00の間だけ起動し、それ以外の曜日・時間は停止状態にする
主なポイント
本記事は、以下のようなポイントがあります。
Lambdaレス運用によるメンテナンス負荷の軽減
- SSMドキュメントを直接使用することで、Lambda関数の作成・管理が不要に
- インフラストラクチャのシンプル化によるメンテナンスコストの削減
タグベースの柔軟な制御
- EC2インスタンスに付与されたタグを基に、きめ細かな起動・停止スケジュールの設定が可能
- ビジネスニーズや運用要件に応じた柔軟なリソース管理の実現
設定の流れ
- SSMドキュメントの作成
- EventBridge用IAMロールの作成
- EventBridge起動用ルールの作成
- EventBridge停止用ルールの作成
設定
SSMドキュメントの作成
EC2起動用のSSMドキュメント作成
EC2起動用のSSMドキュメントを作成します。
Systems Manager
>ドキュメント
>ドキュメント作成
>オートメーション
を選択- SSMドキュメントの作成
SSMドキュメント名
:左上のSSMドキュメント名に任意の名前を設定する。ここでは「Custom-StartEC2ByTag」とする
SSMドキュメントコード
:コードをクリックし、以下コードを記載する
作成
:SSMドキュメント名、コードを記載後、「ランブックを作成」を押下する
description: Exec AWS-StartEC2Instances Tags:Staging schemaVersion: '0.3' assumeRole: '{{ AutomationAssumeRole }}' parameters: TagKey: type: String default: Environment description: (Required) TagKey TagValue: type: String default: Staging description: (Required) Staging or Product allowedValues: - Staging - Product AutomationAssumeRole: type: String description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf. default: '' mainSteps: - name: StartEC2Instances action: aws:executeAwsApi isEnd: true inputs: Service: ssm Api: StartAutomationExecution DocumentName: AWS-StartEC2Instance TargetParameterName: InstanceId Targets: - Key: tag:{{ TagKey }} Values: - '{{ TagValue }}'
EC2停止用のSSMドキュメント作成
続いてEC2停止用のSSMドキュメントを作成します。
作成手順は基本的に同じですが、停止用SSMドキュメント向けに以下を変更します。- SSMドキュメントの作成
SSMドキュメント名
:左上のSSMドキュメント名に任意の名前を設定する。ここでは「Custom-StopEC2ByTag」とする
SSMドキュメントコード
:コードをクリックし、以下コードを記載する
作成
:SSMドキュメント名、コードを記載後、「ランブックを作成」を押下する
description: Exec AWS-StopEC2Instances Tags:Staging schemaVersion: '0.3' assumeRole: '{{ AutomationAssumeRole }}' parameters: TagKey: type: String default: Environment description: (Required) TagKey TagValue: type: String default: Staging description: (Required) Staging or Product allowedValues: - Staging - Product AutomationAssumeRole: type: String description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf. default: '' mainSteps: - name: StopEC2Instances action: aws:executeAwsApi isEnd: true inputs: Service: ssm Api: StartAutomationExecution DocumentName: AWS-StopEC2Instance TargetParameterName: InstanceId Targets: - Key: tag:{{ TagKey }} Values: - '{{ TagValue }}'
- SSMドキュメントの作成
EventBridge用IAMロールの作成
IAMロールの作成手順は省略いたします。
以前ご紹介した記事を参考に、以下値を設定してください。
なお、本記事の手順ではIAMロール名は「ec2-start-stop-role」とします。
- IAMロールの作成
信頼関係に以下を設定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "ssm.amazonaws.com", "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
ポリシーは以下を設定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ssm:StartAutomationExecution", "ssm:StopAutomationExecution", "ec2:StartInstances", "ec2:StopInstances", "tag:GetResources" ], "Resource": "*" } ] }
EventBridge起動用ルールの作成
EventBridgeで、EC2自動起動用のルールを作成します。
本記事では、月~金曜日の8:00にEC2を起動するルールを想定しています。
ルールの作成
EventBridge
>ルール
>ルールを作成
を選択ルールの詳細 名前:分かりやすい名前を入力(例ではstart-ec2-by-tag)
説明:必要があれば変更
ルールタイプ:スケジュール
「続行してルールを作成する」を押下スケジュールを定義 ここでは実行タイミングをCron式で指定します。 スケジュールパターン:
特定の時刻
Cron式:分 時間 日付 月 曜日 年 0 23 ? * MON-FRI * ※Cron式について EventBridgeのタイムゾーンはUTCです。 日本時間での設定を想定している場合は、その時間の9時間前を設定する必要があります。 「以後 10 回のトリガー日」の横にあるプルダウンでローカルタイムゾーンを選択すると、JSTでの実行時刻を確認することができます。
ターゲットを選択 ここでは実行する内容(今回はEC2の起動)を指定します。 ターゲットタイプ:
AWSのサービス
ターゲットを選択:Systems Managerオートメーション
ドキュメント:上記で作成したSSMドキュメント名。ここではCustom-StartEC2ByTag
TagKey:Environment
TagValue:Staging
実行ロール:既存のロールを使用
、作成したIAMロールを選択する。ここではec2-start-stop-role
タグを追加 必要があればタグを追加し、
次へ
を押下レビューと作成 設定に問題が無ければ、
ルールの作成
を選択します。
これでまず起動用ルールの作成が完了しました。
EventBridge停止用ルールの作成
次に、EC2自動停止用のルールを作成します。 月~金曜日の19:00にEC2を停止するルールを想定しています。
ルールの作成 基本的には自動起動ルールと同じように作成しますが、停止ルール用に以下の部分を変更します。
- ルールの詳細
- 名前:分かりやすい名前を入力(例ではstop-ec2-by-tag)
スケジュールを定義
- Cron式:
分 時間 日付 月 曜日 年 0 10 ? * MON-FRI * ターゲットを選択
- ドキュメント:上記で作成したSSMドキュメント名。ここでは
Custom-StopEC2ByTag
- ドキュメント:上記で作成したSSMドキュメント名。ここでは
- ルールの詳細
これで停止用のルールも作成完了です。
作成したルールが一覧に表示されていることを確認します。
動作確認
指定した時刻にタグが設定されたEC2インスタンスだけが起動・停止されることを確認します。
おわりに
今回は以前ご紹介した記事の応用編として、タグによるEC2インスタンスの自動起動・停止の実装方法をまとめました。
SSMドキュメントとタグを活用したEC2インスタンス管理は、運用の効率化とコスト最適化を同時に実現するアプローチです。Lambdaを使用しないシンプルな構成と、タグによる柔軟な制御を組み合わせることで、より洗練されたクラウドリソース管理が可能になります。
記事では例としてタグキー「Environment」、タグバリュー「Staging」を使用しましたが、SSMドキュメント内の「parameters」セクションを修正することで、環境固有のタグ設定に対応可能です。
SSMドキュメントのパラメーターをカスタマイズすることで、組織固有のニーズに合わせた細やかな制御が実現できますので、是非活用してみてください。
参考
本記事は、以下記事を参考に、SSMドキュメント内容を少し修正させていただきました。
【AWS】オートメーションでEC2を自動停止・起動する手順(画像付き)