Python
AWS
lambda
SORACOM
awsIoT

SORACOM Button でバスターコールを発令してみた

どうも若松です。

SORACOM LTE-M Button で何作ろうかと悩むのは楽しいですね。
せっかくなので押しがいがあるのを作りたいといろいろ考えていたときに、あるマンガの場面を思い出しました。

バスターコール

  
ワンピースに出てくる、全てを破壊する命令ですね。
このバスターコールを発令するきっかけがボタンなのです。

AWS式バスターコール

(プロレス技みたいですね)

せっかくLambdaをキックできるので、AWSリソースを破壊してみようと思います。
流石にAWSサービスは多すぎるので、EC2インスタンスの範囲に限定することにしました。

SORACOM Button → AWS IoT → Lambda → EC2Terminate

という構成です。

Lambda

コードは以下となります。
言語はPython3.6です。

BusterCall
import boto3
import jmespath

def lambda_handler(event, context):

    ec2 = boto3.client('ec2')

    instanceids = jmespath.search(
        'Reservations[].Instances[?State.Name!=`terminated`][].InstanceId',
        ec2.describe_instances()
    )

    for instanceid in instanceids:
        ec2.modify_instance_attribute(
            InstanceId=instanceid,
            DisableApiTermination={
                'Value': False
            }
        )

    ec2.terminate_instances(
        InstanceIds=instanceids
    )

    print(instanceids)

    return

AWS IoT

以下のように設定を済ませます。
スクリーンショット 2018-11-05 22.38.11.png
スクリーンショット 2018-11-05 22.38.24.png

EC2

流石に東京リージョンは怖いので、オレゴンで行います。
インスタンスは何でもいいのでt2.nanoで2台起動しました。
ENIES LOBBY には世界政府の旗代わりにTerminateProtectionを設定しておきます。
スクリーンショット_2018-11-05_22_41_15.png

バスターコール発令

全てを焼き尽くします。
TerminateProtectionとて効きません。
無慈悲です。
スクリーンショット_2018-11-05_22_45_00.png
スクリーンショット_2018-11-05_22_45_18.png

まとめ

ボタンひとつでインスタンスが消し飛んでいくのは意外と爽快です。

本当はAMIやEIPとかも削除するようにしようかと思ってましたが、キリが無くなりそうなのでやめました。
検証環境とかで全てのインスタンスを燃やし尽くしたいときとか便利ですね(私は怖いので使いません。