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
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author