Edited at

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とかも削除するようにしようかと思ってましたが、キリが無くなりそうなのでやめました。

検証環境とかで全てのインスタンスを燃やし尽くしたいときとか便利ですね(私は怖いので使いません。