スポンサーリンク

AWS Lambdaから EC2起動&停止を行う

スポンサーリンク
AWS
スポンサーリンク

AWS Lambda から EC2 の起動と停止を行う方法の紹介。

スポンサーリンク

大まかな流れの紹介

LambdaからEC2の起動・停止の関数作成までの大まかな流れは次のようになります。

IAMポリシー作成

IAMロール作成

Lambda関数作成

IAMロールのアタッチ

こんな流れになります。

IAMポリシー作成

AWSのIAMのページからポリシーを選択します。
ポリシーでは CloudWatch Logs 用のポリシーと、EC2インスタンス起動・停止用のポリシーを作成します。
CustomEc2StartStopPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*"
        }
    ]
}

CustomCWLogsPutLogsPolicy

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

 

ポリシーのアタッチが上手く行われていると次のように表示されます。

IAMロール作成

次にIAMロールを作成します。各項目は次の情報を入力します。

エンティティ: Lambda
アタッチするポリシー: ["CustomEc2StartStopPolicy", "CustomCWLogsPutLogsPolicy"]
ロール名: CustomEc2StartStopRoll

Lambda作成

次にLambdaを作成します。各項目は次のように設定しました。

関数名: StartStopEc2Func
ロール: CustomEc2StartStopRoll
ランタイム: Python3.7

ソースコードは次のように記述しました。

import boto3
 
def lambda_handler(event, context):
    region = event['Region']
    instances = event['Instances']
    ec2 = boto3.client('ec2', region_name=region)
    if event['Action'] == 'start':
        ec2.start_instances(InstanceIds=instances)
    elif event['Action'] == 'stop':
        ec2.stop_instances(InstanceIds=instances)
    else:
        return 1
    return 0

作成が完了すると次のように表示されます。

※この画像はCloudWatch Eventsを設定した場合の画像です。

動作確認

Lambdaのテストイベントからテストを行い、EC2の起動停止ができるか確認します。

起動テスト

起動のテストを行います。テスト名は任意の名前をつけてください。

Lambdaのテストから次のリクエストを行います。

(i-XXXXXXXXXXXXXXXXはEC2のインスタンスID)

{
  "Action": "start",
  "Region": "ap-northeast-1",
  "Instances": [
    "i-XXXXXXXXXXXXXXXX"
  ]
}

EC2のダッシュボードからインスタンス状態を確認し起動していれば成功です。

停止テスト

(i-XXXXXXXXXXXXXXXXはEC2のインスタンスID)

{
  "Action": "stop",
  "Region": "ap-northeast-1",
  "Instances": [
    "i-XXXXXXXXXXXXXXXX"
  ]
}

EC2のダッシュボードからインスタンス状態を確認し停止していれば成功です。

参考

できるだけシンプルな仕組みで簡単にEC2の自動起動・停止を実現したい! | DevelopersIO
こんにちは、このすばのアニメ新企画が決定してテンションが上がっている城内です。 はじめに AWS上でシステムを構築していると、インフラ構築中やアプリ開発中などは、コスト削減のために使わないリソースは極力止めておきたいと考
[AWS]LambdaでEC2の起動・停止を制御する | AWSコスト削減・IaaSインフラ構築のシンプライン株式会社
AWSIAMLambda
スポンサーリンク
スポンサーリンク
スポンサーリンク
404 Motivation Not Found
タイトルとURLをコピーしました