make(旧integromat)を使ってLambdaを実行する〜EC2の起動・停止篇


1.はじめに

makeからLambdaを呼び出し、EC2の起動・停止を行う手順です。

前回の記事はこちら。この記事で作ったリソースをそのまま流用します。

2.今回やること

こんな感じのパイプラインを作ってLambdaを実行します。
Slackのチャンネルに投げたメッセージをトリガーにして、OutgoingWebhooksからmakeのWebhooksを呼び出す。
メッセージは{ key:value }でLambdaに渡して、EC2の起動・停止の判定に利用します。

3.アプリの設定

3-1.Slack

今回はStartStopをトリガーにするので、Outgoing Webhooksに以下の設定を行います。

そのままの意味ですが、Startから始まるメッセージがチャンネルにポストされればEC2を起動。
Stopから始まるメッセージがポストされればEC2が停止するようにします。

3-2.make

前回の記事で作ったScenarioをそのまま使います。

Lambda側で{ key:value }を使用するので、Bodyの設定も行います。

3-3.AWS(Lambda)

公式のEC2の起動・停止プログラムのサンプルにif文を追加しました。

lambda_function.py
import boto3
import json

region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxxxxxxxx']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    if event['key'] == 'Start':
        ec2.start_instances(InstanceIds=instances)
        print('started your instances: ' + str(instances))
    else:
        ec2.stop_instances(InstanceIds=instances)
        print('stoped your instances: ' + str(instances))

引用元はこちら。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-eventbridge/

ちなみにstart_instancesreboot_instancesにすると再起動もできます。便利だ。。

4.実行してみる

ここまでの手順でStartをメッセージすればEC2が起動、StopでEC2が停止すると思います。
ワークフローから実行できるようにするとより良いかと!

5.ちなみに

今回はLambdaでStartとStopの判定を行っていますが、make側に任せてもいいです。
その場合はRouterを使います。

Startで始まるメッセージの場合は上のLambdaをInvokeし、Stopで始まる場合は下のLambdaをInvokeするようRoutingしたScenarioです。
Filterの設定はこんな感じ。

Slackにポストするメッセージに合わせてContainsEqual toなど調整してください。

6.おわりに

makeはもっと色々できるし触っていて楽しいSaaSなのですが、導入しているプロジェクトが少なそうなのが難点ですかね…!
ただプログラミングスキルが低いぼくでも慣れればすぐ実装できるGUIは本当に魅力だと思いました。No Codeしゅごい。

以上です。
この記事がどなたかのお役に立てると幸いです