🖲

あのボタンのユーザが、AWS IoT 1-click終了に向けて備える方法

2023/12/21に公開

これは

SORACOM Advent Calendar2023の22日目の記事です。

AWS IoT 1-click終了!?

それは2023年12月20日の朝。1通のメールがAWSから届きました(つまり、このブログは2023年12月20日から書き始めています)。

Hello,
AWS will discontinue AWS IoT 1-Click service from December 16, 2024 onwards. This discontinuation is being implemented in a phased manner to allow you sufficient time to transition to an alternative solution. Firstly, your access to AWS IoT 1-Click service from the AWS Management Console will be retained until May 15, 2024. On May 16, 2024, AWS will discontinue access to AWS IoT 1-Click service from the AWS Management Console. From May 16, 2024 till December 15, 2024, you will only be able to access your AWS IoT 1-Click resources from the AWS CLI.
Secondly, from December 16, 2024, AWS will shut down AWS IoT 1-Click APIs and associated AWS CLI support and mobile applications. On this date, all references to AWS IoT 1-Click projects and button information will be deleted. Please refer to the AWS IoT 1-Click FAQs [1] for additional details on the service discontinuation.
In lieu of using AWS IoT 1-Click, you can build an alternative solution with AWS IoT Core. To learn about connecting alternative devices to AWS IoT Core, please refer to Getting started with AWS IoT Core [2].
If you have any questions or concerns, please visit AWS Support Center [3].
[1] https://docs.aws.amazon.com/iot-1-click/latest/developerguide/1click-end-of-life.html
[2] https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html
[3] https://aws.amazon.com/support
Sincerely,
Amazon Web Services

・・・なんですと!?

要約すると「来年12月にはAWS IoT 1-Clickサービス終わるからごめんね!5月にはコンソールからも触れなくなるよ!」という事です。ということは、IoT 1-Clickを使っているSORACOM LTE-M Button powered by AWS(通称ならびに以下「あのボタン」)が使えなくなるということです。

これは困りました・・・。

朝からSORACOM UGのSlackでも大騒ぎになっていたのですが、サービスが終わるものはしょうがない。何とかするしかありません。
もしかするとソラコムさんが同等のサービスを作られて、利用者の変更が最小限になるというような逆転ホームランがあるかもしれませんが、2023年12月20日現在ではまだそういう情報は無いので、一旦今回はあのボタンが完全に使えなくなった場合にどうすればいいかを考えてみます。

移行パスの検討

あのボタンは、ボタンを押すとSORACOMプラットフォームにデータが送信され、それがAWS IoT 1-Clickに送信されます。そして、利用者はAWS IoT 1-Clickのプロジェクトを設定し、Lambdaを呼び出します(標準で準備されてるSMSやメールを送るアクションはここでは考えないことにします)。

つまり、経路のことはさておき、「ボタンを押したらLambda関数が呼ばれる」というものだと考えれば、以下の移行パスが候補になります。

  • デバイスはLTE-M Button for Enterprise(通称しろボタン)またはLTE-M Butotn Plus(通称ひげボタン)を使う
  • 両ボタンとも、ボタンを押したときの動作はSORACOM BeamFunkなど、各種SORACOMサービスを使ってLambdaと連携できるので、ここではFunkを使ってLambdaを呼び出すようにする

他にもFunnelでIoT Coreを呼んでそこからLambdaに接続するなどもありますが、恐らくこれが一番シンプルかと思います。

Lambda関数について

次に、呼び出されるLambda関数について考えます。単純に現在利用しているLambda関数をFunkで呼び出すだけで対応できるとよいのですが、残念ながらそうはいきません。最大の問題は呼び出し時にLambda関数に渡されるペイロードの形が違うことです。そのため、何らかの変換をする必要があります。

ペイロードの変換を考えるため、AWS IoT 1-Clickから呼び出した場合とSORACOM Funkから呼び出した場合のペイロードの形を比較してみます。
まずはAWS IoT 1-Clickの場合です。SORACOMのリファレンスからそのまま抜粋します。

{
  "deviceInfo": {
    "deviceId": "XXXXXXXXXXXXXXXX",
    "type": "button",
    "remainingLife": 99.933334,
    "attributes": {
      "projectRegion": "ap-northeast-1",
      "projectName": "projectName",
      "placementName": "placementName",
      "deviceTemplateName": "deviceTemplateName"
    }
  },
  "deviceEvent": {
    "buttonClicked": {
      "clickType": "SINGLE",
      "reportedTime": "2018-11-05T04:29:01.950Z"
    }
  },
  "placementInfo": {
    "projectName": "projectName",
    "placementName": "ButtonName",
    "attributes": {},
    "devices": {
      "deviceTemplateName": "XXXXXXXXXXXXXXXX"
    }
  }
}

次に、しろボタンからFunkを使った場合です。

{
    "clickType": 1,
    "clickTypeName": "SINGLE",
    "batteryLevel": 1,
    "binaryParserEnabled": true
}

だいぶ違いますね。clickTypeclickTypeNameになっているとかbatteryLevelの値が違うとかはありますが、ともかく形が全く違います。
また、IoT 1-Clickのプロジェクトでは、placementInfo/attributesを使って、デバイスごとに異なるパラメータをkey-valueの形で渡されているケースもあるのではないでしょうか(少なくとも僕は使っています)。

ペイロードの変換

では、どうやってペイロードを変換するのか?もちろんLambda側で書くというのも一つの手ですが、ここではSORACOM Orbitを使ってみましょう。
方針は以下のとおりとします。

  • deviceInfo
    • attiributesは省略する
    • remainingLifebatteryLevelを100倍した数値を入れる
  • deviceEvent
    • この形にする
  • placementInfo
    • projectName,placementNamedevicesは省略する
    • attributesはSIMのタグデータを入れる

というわけで作成したSoraletのコードを以下に置いています。placementInfo/attributesは、私のAWS IoT 1-Clickプロジェクトで使用しているusertokenという2つの属性を渡すような処理になっています。こちらを参考に、必要な情報を足し引きして頂ければと思います。

https://github.com/kenichiro-kimura/soralet-button-enterprise-to-iot1click

これを使うと、Lambda関数の変更は不要になります。今回省略したデータがLambda関数で必要な場合は、適宜soraletに埋めて頂ければ対応できるはずです。

対応方法まとめ

以上をまとめると、移行の手順は以下のような感じになります。

  • デバイスはしろボタンまたはひげボタンと交換する
  • 新しいボタンを所属させたSIMグループを作成する
  • SIMグループでOrbitを利用するように設定する
  • soraletはこちらを参考に、必要な情報を追加したものを使う
  • placementInfoでパラメータを渡していた場合は、SIMのタグに設定する(この場合、OrbitでメタデータへのアクセスをONにするのを忘れない)

物理デバイスの入れ替えとSORACOMの設定変更だけで完了し、Lambda関数の変更は不要です。

あとはaws cliでplacementInfoを取り出してsoracom cliでSIMのタグに設定するというバッチがあると捗りそうですが、今回は時間の都合でそこまで辿り着いてません。
とりあえず

$ aws iot1click-projects describe-placements --project-name <project-name> --placement-name <placement-name>

とするとattributesが取れて、それを使って

$ soracom sims put-tags --sim-id <sim_id> \
--body '[
  {
    "tagName": "name1",
    "tagValue": "value1"
  },
  {
    "tagName": "name2",
    "tagValue": "value2"
  }
  ....
]'

とするとSIMにタグを設定できるますので、あとはこれをシェルスクリプトで良い感じに組み合わせていけばどうにかなりそうです。こちらもいずれサンプルを実装できればと思います。

希望的観測

ここまでやってみて、希望的観測として以下のような救済措置がソラコムさんから出てくる可能性はあるのかなと思ったりもしました。

  • 連携先がAWS IoT 1-Click固定だったあのボタンが、しろボタンと同じように使えるようになる
    • またはあのボタンのユーザは、所有しているのと同じ数のしろボタンを安価で購入できるキャンペーンが実施される
  • 今回作成したようなOrbit相当の機能が公式に提供される

こうなると利用者の負担が比較的少なく移行できるので嬉しいなと思ったのですが、あくまで希望的観測です。自身で移行手順とスケジュールを検討しつつ、今後の公式発表を待ちましょう。

皆様のお役に立てば幸いです。

GitHubで編集を提案

Discussion