LoginSignup
0
1

AWS EC2インスタンスの起動/停止をスケジュール実行(タグ指定あり)

Last updated at Posted at 2024-01-01

1. はじめに

テスト環境の場合、コスト削減の観点で、決まった時間に起動、停止したいケースは多いと思います。
よくある方法として、インスタンスIDを指定する方式がありますが、対象のインスタンスが変動する場合は、メンテナンスが面倒になります。

ベターな方法として、タグの編集で制御する方法が考えられます。

本記事では、定期的なEC2の起動/停止を特定タグで管理して実現する方法を纏めました。

2. 実現したいこと(要件)

  • 稼働時間帯:月-金の9時-20時
  • 停止要件
    • 時間帯:月-金の20時に対象インスタンスを停止する
    • 対象インスタンス:下記のタグが設定されていること
      • Key:EC2AutoStop
      • Value:true
  • 起動要件
    • 時間帯:月-金の9時に対象インスタンスを起動する
    • 対象インスタンス:下記のタグが設定されていること
      • Key:EC2AutoStart
      • Value:true

3. 構成図

停止要件を満たす、構成は下図の通りです。
image.png

実行の流れ
  • ①Amazon EventBridgeにより、設定した時刻にSSMのDocumentsを呼出す
  • ②SSMのDocumentが、条件が一致するタグを検索し、該当のEC2インスタンスを停止
    ※起動要件は停止と同じになる為、記載省略

4. 実装の流れ

  • 事前準備
    • テスト用EC2準備
  • IAM
    • ポリシー作成:タグ情報取得用
    • ロール作成:SSM操作実行用
  • SSM
    • デザイン編集:StartAutomationExecutionを流用
    • コード編集:タグ指定版にカスタマイズ
  • EventBridge
    • スケジュール設定
    • ターゲット選択:SSMのドキュメント指定

5. 事前準備(テスト用EC2準備)

① EC2を2台用意する
停止/起動対象として処理されるもの、されないものをテストしたい為

② タグを設定する。
EC2AutoStart、EC2AutoStopをそれぞれ設定
image.png

6. IAM

下記記事を参考に「ポリシー」「ロール」を作成してください。
https://www.k-friendly.com/16551

①読替え1:作成対象
 起動・停止それぞれで作成する必要はありません。兼用可

②読替え2:信頼ポリシーを編集
 編集前: “Service”: “ec2.amazonaws.com”
 編集後: “Service”: “scheduler.amazonaws.com”
 ※このIAMロールは、EventBridgeSchedulerが実行する為、上記サービス名になります

7. SSM

7.1 デザイン編集:StartAutomationExecutionを流用

①AWS Systems Managerに移動する
②左メニューから、「ドキュメント」をクリックする。

③「ドキュメントの作成->オートメーション」をクリックする
image.png

④任意の名前を設定し、AWS APIタブをクリック
image.png

⑤StartAutomationExecutionを検索

⑥ドラックして配置
image.png

7.2 コード編集:タグ指定版にカスタマイズ

①コードモードで編集

②カスタマイズ

編集前
schemaVersion: '0.3'
description: '*このデフォルトのテキストをランブックに関する指示や他の情報に置き換えてください。* --- # Markdown とは何ですか? Markdown とは、プレーンテキスト形式のコンテンツを、構造的に有効なリッチテキストに変換する軽量のマークアップ言語です。## 見出しを追加できます *斜体*を追加したり、フォントを**太字**にしたりできます。1. 番号付きリストを作成する * 箇条書きを追加する > `コードサンプル`にインデントを設定する [別のウェブページへのリンク](https://aws.amazon.com) を作成できます。'
mainSteps:
  - name: StartAutomationExecution
    action: aws:executeAwsApi
    isEnd: true
    inputs:
      Service: ssm
      Api: StartAutomationExecution
編集後
schemaVersion: '0.3'
description: Stop EC2 instances by tagname
parameters:
  TagName:
    type: String
    description: ''
    default: EC2AutoStop
mainSteps:
  - name: StopEC2Instances
    action: aws:executeAwsApi
    isEnd: true
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-StopEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: tag:{{ TagName }}
          Values:
            - 'true'
  • parameters:追加
    • TagNameを設定
    • default:停止用タグ名を指定
    • description:任意
  • mainSteps:
    • name:任意
    • DocumentName: AWS-StopEC2Instanceを指定
    • TargetParameterName: InstanceIdを指定
    • Tatgets:EC2停止条件を設定

③「ランブックを作成」をクリック
image.png

④「自己所有」タブから該当ドキュメントが作成されていることを確認
image.png

⑤検証
作成したドキュメントをお試し実行する
「オートメーションを実行する」をクリック
image.png

何も変更せず、「Excecute」をクリック
image.png

実行結果
image.png

EC2停止の確認
image.png

8. EventBridge

8.1 スケジュール設定

①「EventBridge」を検索する
②左のメニューから、「スケジュール」をクリック

③「スケジュールを作成」をクリック
④スケジュール名と説明を入力
任意の情報を記載
image.png

⑤スケジュールのパターン
停止要件を満たす時間帯を指定
image.png

夏時間は特に設定せず、次へを押下

8.2 ターゲット選択:SSMのドキュメント指定

①「すべてのAPI」を選択
②「Systems」を検索し、「SystemsManager」をクリック
image.png
③「StartAuto」を検索し、「StartAutomation」をクリック
image.png

④入力に作成した、「EC2AutoStop」のドキュメントを指定し、「次へ」をクリック
image.png

⑤スケジュールを有効化

⑥既存ロールを設定
「6. IAM」で作成したロールを指定
image.png

⑤「スケジュールを作成」をクリック

image.png

9. EC2起動要件の対応

9.1 SSM

「7. SSM」で作成したドキュメントを流用する
①「EC2AutoStop」を選択し、アクションから「ドキュメントのクローン作成」をクリック
image.png

②ドキュメント名編集し、「コードモード」で編集する

③「Stop」を「Start」に置き換え、ランブックを作成する
image.png

④ドキュメント作成完了
image.png

⑤検証
作成したドキュメントを実行する
「オートメーションを実行する」をクリックする
image.png

「Excexute」をクリックする
image.png

⑥実行結果
image.png

7.SSM⑤で「停止」したインスタンスが「実行中」になったことを確認
image.png

9.2 EventBridge

「8. EventBridge」と同様に作成する

image.png

image.png

10. 全体テスト

スケジュールの時刻をテスト時間に近い時刻に設定し、
想定通りの動作を確認した方が良いと思います。
今回は割愛します。

引用元

本記事は下記資料を参考に作成しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1