SORACOM LTE-M Button+AWS LambdaでEC2インスタンスの状態を操る

SORACOM LTE-M Button+AWS LambdaでEC2インスタンスの状態を操る:


はじめに

タイトルそのままです。

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ボタンは外出先でも使えるので使う時だけ起動/作業終わったら停止させればコストも減らせて非常に便利です。

インスタンス常時稼働させとくとコストが...ただいちいちコンソール開くのもなぁ...なんて面倒くさがりな方(主に私)にもいいかもしれません。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)