SORACOMとAWS IoT1-Clickでボタンを押したらDiscordにポストしてみたメモ

3 min read読了の目安(約2700字

やったこと

SORACOMのボタンを押して、Discordに投稿できるようにしてみました。
SORACOMも、Lambdaも初めて触りましたが、めちゃめちゃ簡単にできました!すごい!!

使ったもの

  • SORACOM LTE-M Button powered by AWS
  • AWS IoT1-Click: SORACOMボタンを押したときに、AWS Lambdaの関数をトリガーするために使います。
  • AWS Lambda
  • axios: LambdaでDiscord API叩くのに仕様するNode.jsのモジュール
  • Discord: 今回は自分が管理しているDiscordサーバーに投稿をします。

Discordに投稿されるまでの流れ

  1. SORACOMのボタンを押す
  2. AWS IoT1-ClickがLambdaの関数をトリガーし、DiscordのAPIを叩く
  3. Discordに投稿される

手順

DiscordのWEB hook URLを準備

こちらを参考にDiscordのWEB hook URLを取得します。

AWS LambdaでDiscord APIを叩く関数を準備する

関数を作成し、axiosモジュールをアップロード

AWS Lambdaにアクセスし、ダッシュボードで新しい「関数」を作成します。

今回、APIを叩くのにaxiosモジュールを使いたいのですが、
LambdaでNode.jsを使う時、WEBのエディタではnode-moduleのインストールをする手段がありません。

ではどうやるか...!?

私も調べて驚いたのですが、

  1. プロジェクトを一度エクスポート
  2. ローカルでnpm install
  3. node-moduleディレクトリも含めてZipに圧縮
  4. Lambdaのエディタからアップロード

という手順で行う必要があるようです。アナログ感!笑

下記資料参考に、使いたいモジュールをアップしてください。
参考資料: Lambda の Node.js でもっといろんなパッケージを使いたいとき

コードを書く

下記コードをコピペし、URLを御自身のDiscord Webhook URLに書き換えます。
axiosでDiscord APIを叩くのはこちらを参考にしました。
Node.js(axios)からDiscordに通知を送るメモ

const axios = require('axios');
const URL = `https://discord.com/api/webhooks/【取得したWeb hook URLに変更してください】`;

exports.handler =  function(event, context){
    //ヘッダーなどの設定
    const config = {
        headers: {
            'Content-type': 'application/json',
        }
    }
    
    //送信するデータ
    const postData = {
        username: 'Myソラコム',
        content: 'ソラコムから送信'
    }
    
    const main = async () => {
        const res = await axios.post(URL, postData, config);
        console.log(res);    
    }
    
    main();
};

ここまで完了したら、「Deploy」を押してデプロイしてください。

AWS IoT1-ClickにSORACOMデバイスと関数を登録する

デバイスの登録

AWS IoT1-Clickにアクセスし、
ダッシュボードから「デバイスの登録」を行います。
デバイスIDは、デバイスの電池蓋を外すと見えます。

いろいろな番号が書いてありますが、「DSN」と書いてあるところにある、アルファベットと数字の羅列がデバイスのIDです。
※写真の、ピンクで消してある部分。

プロジェクトを作成し、設定を行う

図のように設定し、先程作った関数を選択します。

プレイスメントを作成する

「デバイスの設定」をクリックし、自分のデバイスを選択します。

デバイスがすでに他のプロジェクトに割り当てられている場合は空欄のまま保存し、
すでに割り当てられている方のプレイスメントの編集画面でデバイスを「クリア」すると選択できるようになります。

完成

このように、Discordに投稿されれば成功です!