SORACOM LTE-M Button+AWS LambdaでEC2インスタンスの状態を操る
SORACOM LTE-M Button+AWS LambdaでEC2インスタンスの状態を操る:
タイトルそのままです。
SORACOM LTE-M Buttonを買ったので同一リージョン内のインスタンスの起動・停止・再起動をボタンだけでできるようにしました。
Lambda関数のIAMロールを設定しましょう。
この辺りが参考になると思います
今回は1回押すと起動/2回押すと再起動/長押しで停止するようにします。
LTE-Mボタンは外出先でも使えるので使う時だけ起動/作業終わったら停止させればコストも減らせて非常に便利です。
インスタンス常時稼働させとくとコストが...ただいちいちコンソール開くのもなぁ...なんて面倒くさがりな方(主に私)にもいいかもしれません。
はじめに
タイトルそのままです。SORACOM LTE-M Buttonを買ったので同一リージョン内のインスタンスの起動・停止・再起動をボタンだけでできるようにしました。
注意
Lambda関数のIAMロールを設定しましょう。この辺りが参考になると思います
AWS Lambda上での実装(Python 3.6)
今回は1回押すと起動/2回押すと再起動/長押しで停止するようにします。IoTEC2Button.py
from __future__ import print_function import boto3 import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): logger.info('Received event: ' + json.dumps(event)) #今回は東京リージョン内のインスタンスを操作するのでap-northeast-1 client = boto3.client('ec2','ap-northeast-1') responce = client.describe_instances() #全インスタンスIDを入れておく配列 all_list = [] for reservation in responce['Reservations']: for instance in reservation['Instances']: ##ステータスがterminatedになっているインスタンスがあるときのエラー対策 if instance['State']['Name'] != "terminated": all_list.append(instance['InstanceId']) click_type = event['deviceEvent']['buttonClicked']['clickType'] #操作対象のインスタンスのID(個別で操作したい場合はここに操作対象のインスタンスIDを入れる) ilist=list(all_list) #1回押した時 if click_type == "SINGLE": start = client.start_instances(InstanceIds=ilist) return start #2回押した時 elif click_type == "DOUBLE": reboot = client.reboot_instances(InstanceIds=ilist) return reboot #長押しした時 elif click_type == "LONG": forcestop = client.stop_instances(InstanceIds=ilist,Force=True) return forcestop logger.info('OK')
おわりに
LTE-Mボタンは外出先でも使えるので使う時だけ起動/作業終わったら停止させればコストも減らせて非常に便利です。インスタンス常時稼働させとくとコストが...ただいちいちコンソール開くのもなぁ...なんて面倒くさがりな方(主に私)にもいいかもしれません。
コメント
コメントを投稿