目次
はじめに
前回の記事ではSoracom LTE-M buttonからslackに通知をさせる為に必要な概念とslackの設定までやりました。↓
今回は前回slack webhookURLを使うので前回の記事で作成したslack webhookURLを確認しおいてください。
ちなみにですがAWS Lambdaの設定は実践ガイドAWSと組み合わせるとAWS Lambdaを実行してslackに通知するのチュートリアルのいいとこどりしたものですのでこのチュートリアルを読めばかならずできるはずです。
やりたい事は復習になりますが、人里離れた場所に設定した猪やシカを捕らえる罠の作動状況をリアルタイムに得る為です。
利点は頻回に罠を見回りに行かなくて良いという事が第一です。
複数設置していても見に行かなくて良いので猪やシカによる農作物被害に悩まされている農村部ハンター(年配者)にとっては時間的・身体的労力が少なくて済みます。
かつ、このIOTはAWSやslack通知など仕事や他に応用もできそうな内容です。
たとえば、留守中に玄関のピンポンがなれば通知させるとか、温度が何度以上になったら通知させ、されに何かを動作させるとか考えたらきりがありません。。
前置きが長くなりましたが、AWS Lambada関数の設定からスタートしましょう。
AWS Lambada関数の設定
AWSのアカウント作成
とりあえず、AWSで無料アカウントを作成します。
まずですが、AWS(アマゾンウェブサービス)にアカウントを作成させなければなりません。
結構これ面倒でクレジットカードの登録をしなければなりません。
はじめ私もここでつまづきましたが、よく知らべてみると無料枠で全て使用できるので大丈夫です。
とりあえず登録しましょう。話はそれかです。
とりあえずお年寄りはここで諦めるでしょう。ただ、がんばりやさんの農家のかたはここが踏ん張りどこです。
クレジットカードを登録してもお金はかかりませんので!!
AWS Lambda関数の作成とslackwebhookURLの設定
アカウントができたら早速AWS Lambda関数とやらを作成していきます。
ほぼチュートリアルどおりです。
関数の作成
まずはAWSにログインしたら検索窓から”lambda”と検索するとサービスに下図のようなLambdaができくるのでクリック!!
クリックして↓の図のようになります。ただし、関数を作成していなければ関数は(0)となり空白となっているはずです。
赤枠のところの”関数の作成”ボタンを押します。
↓赤枠の一から作成をクリック
↓一から作成の少し下に”関数名”と描かれた赤枠のところになんでもいいので関数名を入力して決めます。ハイフンとかスペースとかは設定できないのでルールを守って任意の名前を決めてね。
↓その関数名の下のランタイムはチュートリアルでは12xとかなんだけどNode.js 14xでも動作する事を確認してます。x86_64とかarm64とかはpcで設定するならx86_64です。
これCPUのアーキテクチャっつうやつなんだけどx86_64にしといてください。
ほんで、画面右下の関数の作成をクリックします。
そしたらば↓のように関数ができあがります。成功です。おめでとう
Lambda関数のコードの設定
関数ができたら、その画面上にコードというタブ(最初はこれが選ばれてるはず)を選ぶとindex.jsのコードソースが表示されるはずです。
赤枠のプログラムの事ね↓ここのコードがLambda関数が呼ばれた時に実行するコードになるんです。これをslackに通知するwebhookURLなどを設定する事でslackに通知がいくようになります。
とりあえずAWS Lambdaを実行してslackに通知するのjavascriptのサンプルプログラムが普通に使えるのでこれを利用します。
下図のように赤丸のところをクリックするとサンプルプログラムをコピーできるのでコピー後に自身のLambda関数のindex.jsにコピペします。(もとあったプログラムは全部消す事)
書き換えると↓みたになりまーす。
ちなみにですが、コードですがこのまま使うとsoracomから送られたデータをそのまんま通知してくるだけなのでslackに届く通知を”罠が作動しました”みたいにしたければ下記のようにpyload関数をさわれば簡単に変更できます。
通知だけにこだわれば元々あったパラメーターの情報はいらないので橙色のようにプログラム上では動作しないようにしています。ご参考までに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
const https = require("https"); const url = require("url"); const slackUrl = process.env.SLACK_URL;//環境変数を取得 exports.handler = function (e, ctx, cb) { console.log("event: %j", e); console.log("context: %j", ctx); var slackReqOptions = url.parse(slackUrl); slackReqOptions.method = "POST"; slackReqOptions.headers = { "Content-Type": "application/json" }; /*ここからコメントアウト var payload = { text: "--- *lambda function called with following parameters.* ---", attachments: [ //{ //title: "clientContext", //color: "#34cdd7", //text: "```\n" + JSON.stringify(ctx.clientContext, null, " ") + "```\n", //mrkdwn_in: ["text"], //}, { title: "罠が作動", color: "#e47911", text: "```\n" + JSON.stringify(e, null, " ") + "```\n", mrkdwn_in: ["text"], }, ], }; *///ここまでコメントアウトして使わない var payload2 ={text:"罠①が作動しました。 場所:どこそこ"};//←通知だけするならここを追加するだけ var body = JSON.stringify(payload2); slackReqOptions.headers = { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(body), }; var req = https.request(slackReqOptions, function (res) { if (res.statusCode === 200) { console.log("Posted to slack"); cb(null, { result: "ok" }); } else { cb(false, { result: "ng", reason: "Failed to post slack " + res.statusCode }); } return res; }); req.write(body); req.end(); }; |
Lambada関数にslack webhookURLを設定する
次にslackwebhookURLをLambda関数に設定します。おなじページで設定をクリックしたあとに画面向かって左に環境変数とあるのでクリックして編集とおします。
編集を押すと↓の画面になるので環境変数の追加を押します。
そしたらば↓の画面になるはずですのでキーというところに”SLACK_URL”と一文字もまちがわずに打ちます。
値のところにはslackwebhookURLを記入します。slackwebhookURLがわからなければ前回の記事を読んでくださーい。
そして設定できたら、保存を押します。
保存を押した後に必ず“Deploy”を押さないと保存されないので気お付けてください。
これでAWS Lambda関数の作成と関数が呼ばれた時に発動するコード及びslackwebhookURLが設定できました。
うごくかテストしてみようぜ!
ここまで設定できたらちゃんとAWS Lambda関数とslack連携ができているかテストしてみます。テストのタブから”テスト”を押します。
slackに通知がくれば成功です!!
今回はAWSLambada関数からslack連携までしたので、次回にSoracom LTE-Mをさらに連携させてSoracom LTE-Mが反応したらslack通知が届くようにする最終仕上げをしましょう。
Soracom側でAWSに接続する為の設定です。
残りのやる事はSoracom側が特定のAWSサービスに接続する為のユーザー情報の登録と設定したLambda関数の登録だけになります。もう少し頑張りましょう
それではまた次回。