0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】EC2インスタンスの夜間停止を自動化する

Last updated at Posted at 2025-02-28

こんにちは。NTTテクノクロスの増田です。
普段はAWSを用いたインフラ構築を行っています。

はじめに

本記事では、EC2インスタンスの夜間停止自動化作業についてご紹介します。

背景

最近の生成AIブームにおいて、GPUインスタンスの需要が増しています。そこで、コスト削減の観点からインスタンス停止漏れによって夜間に起動しているインスタンスの停止自動化を行いました。

今回は、指定したインスタンスを希望の時間に自動停止するためのリソース構築をご紹介します。

構成

構築する簡単な構成図です。
図のサービス以外に、対象インスタンスを管理する Resource Groups & Tag Editor も使用します。

image.png

構築手順

各リソースの構築手順を記載していきます。

Resource Groups & Tag Editor

  • 停止対象のインスタンスをグループ化するため、インスタンスにタグを一括付与します
  • リソースグループ作成後、タグエディタを使用することで対象インスタンスを管理できます
  • 停止対象から除外したい場合は設定したタグを外します

image.png

image.png

System Manager

IAMロール/ポリシー

  • SSMドキュメントに使用するポリシーを設定します
  • マネジメントコンソール > IAM > ロール > ロールを作成 を順に選択し以下を設定します
項目 設定値
信頼されたエンティティタイプ AWSのサービス
ユースケース System Manager
許可ポリシー AmazonSSMAutomationRole ResourceGroupsandTagEditorReadOnlyAccess
ロール名 任意のロール名

SSMドキュメント

  • マネジメントコンソール > System Manager > ドキュメント > ドキュメントの作成 > オートメーション を順に選択します
  • 鉛筆マークを選んで"ドキュメント名"を編集、"{} コード"を選択後、コードを記載し、"ランブックを作成" を選択します

image.png

  • ドキュメントのコードは以下を参考にしてください
    ※"assumeRole"は先ほど作成したロールのARMを記載してください
    ※"Targets"の”Key:Values"はResource Groupsで設定した"キー:値"を設定してください
sample.yaml
description: StopEC2Instances
schemaVersion: '0.3'
assumeRole: arn:aws:iam::AWS:accountId:role/<IAM_roles_name>
mainSteps:
  - name: StopEC2Instances
    action: aws:executeAwsApi
    isEnd: true
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-StopEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: tag:StopInstance
          Values:
            - 'true'

EventBridge

IAMロール/ポリシー

  • EventBridgeに使用するポリシーを設定します
  • マネジメントコンソール > IAM > ロール > ロールを作成 を順に選択し以下を設定します
項目 設定値
信頼されたエンティティタイプ カスタム信頼ポリシー
カスタム信頼ポリシー 以下に記載
許可ポリシー AmazonSSMAutomationRole
ロール名 任意のロール名
  • カスタム信頼ポリシーに記載する内容は以下を参考にしてください
sample.json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"Service": "scheduler.amazonaws.com"
			},
			"Action": "sts:AssumeRole"
		}
	]
}

EventBridgeスケジュール

  • マネジメントコンソール > EventBridge > スケジュール > スケジュールを作成 を順に選択します
  • [スケジュールの詳細を定義] ページは以下を参考にしてください
    ※cron式には停止したい任意の時間を設定します
項目 設定値
スケジュール名 任意のスケジュール名
頻度 定期的なスケジュール
スケジュールの種類 cronベースのスケジュール
cron式 ex) 平日AM0時:cron( 0 0 ? * MON-FRI * )
フレックスタイムウィンドウ オフ
  • [ターゲットの選択] ページで すべてのAPI > System Manager > StartAutomationExecution を選択し以下を記載します
  • "document_name"に先ほど作成したドキュメント名を記載してください
sample.json
{
  "DocumentName": "<document_name>"
}

image.png

  • [設定] ページの [アクセス許可]で先ほど作成したロールを選択し、作成してください

まとめ

以上、EC2インスタンスの夜間停止自動化作業についてご紹介しました。

サーバーレスアーキテクチャの拡大により変化があるものの、インスタンスの活用は依然として有用だと考えます。
今後もAWS環境のコスト削減に向けたサービスの活用事例をご紹介させていただきます。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?