presents by IT Consulting 109

AWS インスタンスの起動・停止の自動化(簡易版)

概要

常時起動を必要としない検証や開発環境など、業務時間だけサーバを起動して終業後は停止。
または、定期バッチの実行時間の前後だけサーバを起動して停止する。
など、コストを抑えた運用を行なう際、業務終了後に手動で停止を行なう手間や、業務開始時にサーバを起動する手間など、など一連のアクションをAWSの機能を利用して行なう事が可能です。

簡易的な起動・停止の自動化設定について記載。

手順

ポリシーの作成

起動、停止のアクションを管理するポリシーを作成します。

1.IAM ポリシーで [ポリシーの作成] をクリック。

 

2.『 JSON 』タブを表示して以下のコードを貼り付けて [ポリシーの確認] をクリック。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                  "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*"
        }
    ]
}

3.名前に [ EC2StatusActionPolicy ] と入力して [ポリシーの作成] をクリック。


ロールの作成

ポリシー管理するロールを作成します。

1.IAM ロールで [ロールの作成] をクリック。

 

2.『信頼されたエンティティの種類を選択』画面が表示される。
 「このロールを私用するサービス」で [ Lambda ] を選択し、[次のステップ:アクセス制御] をクリック。

 

3.『Attach アクセス権限ポリシー』画面が表示される。
 「ポリシーの作成」手順で作成した [ EC2StatusActionPolicy ] を有効にして、[次のステップ:タグ] をクリック。

 

4.『タグの追加』画面が表示される。
 そのまま [次のステップ:確認] をクリック。

 

5.『確認』画面が表示される。
 ロール名に [ EC2StatusActionRole ] を入力して、[ロールの作成] をクリック。


Lambdaの作成

実際にEC2インスタンスに対して起動、停止の処理を行なう関数を作成します。

1.Lambdaで [関数の作成] をクリック。

 

2.以下の値を設定後 [関数の作成] をクリック。

 

起動用の関数を作成時

項目設定値
関数名EC2RunAction
ランタイムPython 3.9
アクセス権EC2StatusActionRole

停止用の関数を作成時

項目設定値
関数名EC2StopAction
ランタイム Python 3.9
アクセス権EC2StatusActionRole

3.作成された関数で以下の設定し [保存] をクリック。**(共通の設定)**

項目設定値
関数コード※以下のコードを参照
タイムアウト10秒

起動用のLambda関数コード

region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxxxxxxxx', 'i-yyyyyyyyyyyyyyyyy']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))

停止用のLambda関数コード

import boto3
region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxxxxxxxx', 'i-yyyyyyyyyyyyyyyyy']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))

※必要に応じてテストを行なう。
以下で記述したインスタンスに対してActionが実行されるので、不意のて停止などがないように細心の注意を払う。

4.[テスト] をクリック。

 

5.『テストイベントの設定』画面が表示される。
 イベント名に [ test ] を入力して [作成] をクリック。
 ※JSONは初期値のままで問題ない。

 

6.[テスト] をクリック。
 「実行結果: 成功」と表示される事を確認。


イベントの作成

Lambda関数を定期的に実行するイベントを作成します。

1.CloudWatch イベント を表示し、[今すぐ始める] をクリック。

 

2.『ステップ1:ルールを作成する』画面が表示される。
 以下の値を設定して [詳細の設定] をクリック。

例)毎週月曜日から金曜日まで午前 9:00に起動する。

項目設定値
パターンスケジュール
タイプCron式
0 0 ? * MON-FRI *
ターゲットLambda関数
関数EC2RunAction

3.『ステップ2:ルールの詳細を設定する』画面が表示される。
 以下の値を設定して [ルールの作成] をクリック。

項目設定値
名前EC2RunEvent
説明 ※必要に応じて記載
状態■ 有効化

4.ルールの作成が成功している事を確認・

例)毎日午後 19:00に停止する。

項目設定値
パターン スケジュール
タイプ Cron式
0 10 * * ? *
ターゲットLambda関数
関数EC2StopAction
この記事を書いた人
名前:TRUE's。 千葉県育ち、神奈川県在住のIT系フリーエンジニア。 IT系のナレッジサイトを不定期で更新中。 フォトグラファー兼エンジニアとして日々勤しんでいる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です