1
0

タグ付きAWS EC2の自動停止・自動起動

Posted at

AWSで設定検証する際にEC2を立てて起動したままで無駄な課金を発生させてしまうことが多々あり、反省を込めてEC2の自動停止(+自動起動)の設定を記事にします。対象EC2の判別はタグ付けで行い、特定のタグが付いているEC2のみを対象とします。

本記事でのゴール

時間になったら特定のタグが付いているEC2を自動停止、自動起動する

スケジュールイメージ.jpg

設定構成としてこんな感じです。
EC2_自動停止_全体構成.jpg

[AWS EventBridge]で時間指定で、SSM内の実行したい内容を記述した[ドキュメント]を呼び出し、[Run Command]で実行すると流れになります。

前提条件(免責事項)

  • タグ付けしたEC2を対象として自動停止、自動起動を行う
  • 自動化はAWS System Manager(旧SSM)を利用し、時間指定によるトリガーはAWS EventBridgeを利用する
  • 本件の停止処理はOSからのシャットダウンとは違い、OS内のデータが破損する可能性があります

設定流れ

① 実行時に利用するIAMロールを作成
② EC2に特定タグを付与
③ 動作内容を記述したSSMドキュメントを作成
④ AWS EventBridgeで時間指定でSSMドキュメントを呼び出す設定

実際にやってみた

①実行時に利用するIAMロールを作成

後ほど作成する③のドキュメントで作成したロールを使って処理を実行するように記述しますので、そのロールを作っていきます。
AWSコンソール画面で[IAM]>[ロール]にアクセスし、新規ロールを作成します。「信頼されたエンティティを選択」で「カスタム信頼ポリシー」を選択します

image.png

ポリシーは以下の内容を記述します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com",
                    "events.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

許可するポリシーには以下2つを追加します。

・AmazonSSMAutomationRole
・ResourceGroupsandTagEditorReadOnlyAccess
image.png

設定後はこんな感じになります。

image.png

ロールを作成した後にARNを控えておきましょう。後ほど設定に必要となります。

②EC2に特定タグを付与

自動起動、自動停止の対象としたいECを起動させたあと、「タグ」の設定で任意のタグを設定します。今回は自動停止はキー名=”STOP”で値="STOP"という設定にします。

image.png

自動起動も同じようにキー名=”START”で値="START"で設定します。これで対象のEC2を選別する設定ができました。

③動作内容を記述したSSMドキュメントを作成

では実際の動作内容を記述するドキュメントを作成していきます。左下の「共有リソース」-「ドキュメント」をクリックします。

image.png

右上のアクションタブ横の「ドキュメントの作成」をクリックし、「オートメーション」を選択します。
image.png

こんな感じでどういう操作をするか記述する画面が表示されますので、ここに内容を記載していきます。
image.png

左上の「NewRunbook」はドキュメント名になるので判別しやすい任意のものに変更してください。
自動停止の記載はこんな感じです。

image.png

description: StopEC2Instances
schemaVersion: '0.3'
assumeRole: arn:<①で作成したIAMロールのARN>
mainSteps:
  - name: StopEC2Instances
    action: aws:executeAwsApi
    isEnd: true
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-StopEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: tag:STOP
          Values:
            - STOP

この内容の”STOP”の部分を”START”に書き換えたものが自動起動のドキュメントになりますので、セットで作成していきます。

この段階でこのドキュメントの内容が実際に動作するのかはテスト可能ですので左上の「オートメーションを実行する」でテストしてみましょう。テスト結果は「変更管理」>「オートメーション」をクリックして実行ログで確認可能です。ステータスがSuccessになっていればOKです。

image.png

④AWS EventBridgeで時間指定でSSMドキュメントを呼び出す設定

あとはAW EventBridgeで設定したドキュメントを呼び出せればOKです。「ルールの作成」をクリックして、ルールを設定していきます。
image.png

ルールの名前は任意の値を設定し、ルールタイプを「スケジュール」に設定し、「続行してルールを作成する」をクリックします。
image.png

スケジュールパターンで「特定の時刻~」を選択し、Cronを設定します。
image.png

画像では自動停止側のルールを設定しているので、毎日20:00に実行したいため上記のように設定しました。
設定パラメーターは日付を「?」に「月」、「曜日」、「年」の値を「*」に設定します。
タイムゾーンがUTCになっているため、日本時間になっているか注意してください。

ターゲットタイプを「AWSサービス」で、ターゲットを「SystemManagerオートメーション」を選択します。
image.png

あとはロール名やドキュメント名は先ほど作成したものを選択します。
image.png

このルールセットをcronの時間設定と実行ドキュメントを変えて自動停止分自動起動分の2つ作成すれば完成です。

終わりに

lambdaでコードを書く方法もあるみたいですがなるべくコードは書きたいない精神で設定してみました。手抜きをして自動起動側の設定はあまり載せずに記事にしてしまいましたのであしからず。

参考

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