どうも若松です。
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
以下のように設定を済ませます。
EC2
流石に東京リージョンは怖いので、オレゴンで行います。
インスタンスは何でもいいのでt2.nanoで2台起動しました。ENIES LOBBY
には世界政府の旗代わりにTerminateProtectionを設定しておきます。
バスターコール発令
全てを焼き尽くします。
TerminateProtectionとて効きません。
無慈悲です。
まとめ
ボタンひとつでインスタンスが消し飛んでいくのは意外と爽快です。
本当はAMIやEIPとかも削除するようにしようかと思ってましたが、キリが無くなりそうなのでやめました。
検証環境とかで全てのインスタンスを燃やし尽くしたいときとか便利ですね(私は怖いので使いません。