
AWS Lambdaから EC2起動&停止を行う
2019-09-036 min read
目次
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のダッシュボードからインスタンス状態を確認し停止していれば成功です。
参考
https://dev.classmethod.jp/cloud/aws/simple-auto-start-stop-for-ec2/
Recommends
New Posts
Hot posts!
Date
Tags
Author