センサーデータ(温度・湿度)をトリガーにして動作するAI AgentシステムをAWS Lambdaで開発しています。 Wio BG770Aで取得したデータをAWS IoT Coreに送り、そこからLambdaへ転送する構成です。
デバイスからIoT Coreへのデータ転送をどう実装するか検討した結果、選んだのがSORACOM Funnelです。 デバイス側はHTTP POSTだけで済み、証明書の管理が不要でした。
この記事では、BG770AからSORACOM Funnelを経由してAWS IoT Coreのトピックにデータを届ける手順を紹介します。
全体構成
今回開発したシステムの全体構成はこちらです。 この記事では、Wio BG770AからAWS IoT Coreに送信するところまでを紹介します。

AWS側の設定
SORACOM FunnelがAWS IoT Coreにデータを送るために、2つのリソースを作成します。
- IAM Role: SORACOM FunnelがIoT CoreにPublishする権限
- IoT Core Domain: SORACOM Funnelがデータを送信するためのIoT Core側のエンドポイント
設定は、SORACOMの公式ガイドに沿って行えばOKです。
IAM Roleを作成する
SORACOM Funnelは指定したIAM Roleの権限でIoT Coreにパブリッシュします。
今回は、devices/bg770aというTopicへのメッセージ送信だけ許可しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "iot:Publish",
"Resource": "arn:aws:iot:us-east-1:<AccountId>:topic/devices/bg770a",
"Effect": "Allow"
}
]
}上記のIAM RoleをAssumeRoleできるアカウントとして、762707677580を指定します。
これはSORACOMの日本カバレッジ用のAWSアカウントのIDです。
ExternalIdは推測しにくい乱数にすることを推奨します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::762707677580:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<External ID>"
}
}
}
]
}Domain Configurationを作成する
ここは、セキュリティポリシーでIoTSecurityPolicy_TLS13_1_2_2022_10を選ぶことだけ気をつければ問題ないです。
SORACOM Funnelを設定する
最初に認証情報ストアに今回作成したIAM Roleを追加します。

次に、SIMグループの画面でSORACOM Funnelを有効化します。 SIMグループに設定するので、複数のSIMに対してSORACOM Funnelを有効にすることが可能です。

Wio BG770Aのコード
最後にIoTデバイス(Wio BG770A)のコードを書き、SORACOM Funnelにメッセージを送信するようにします。
SORACOMのモバイルネットワークにAttachし、SORACOM FunnelのHTTPエンドポイントにメッセージを送ります。
ここでのポイントは、2つです。
- HTTPSではなくHTTPで送信する: SORACOMのモバイルネットワークは閉域として扱えるため、TLSが不要です。デバイス側でサーバー証明書を管理する必要がなく、TLSオーバーヘッドも削減できるため、電池駆動時の消費を抑えられます。
- MQTTの実装は不要: SORACOM FunnelがMQTT Publisherを代理するため、デバイス側はHTTP POSTを投げるだけです。
以下のようなコードでセンサーデータを送っています。 今回は、SORACOM FuunelとIoT Coreの接続がメインなので、センサー値はダミーを入れています。 実際には、これをSHT40などの温湿度センサーから取得した値に置き換えます。
JsonDocument doc;
doc["temperature"] = 15; // dummy
doc["humidity"] = 50.0; // dummy
char payload[128];
serializeJson(doc, payload, sizeof(payload));
httpClient.postJson("funnel.soracom.io", 80, "/", payload); // port8(HTTP)HTTP POSTを行うクライアント側の実装(WioCellularHttpClient::postJson())は、TCPクライアントを開いてHTTP/1.1リクエストを組み立て、client.send() で送信するシンプルな構成です。
コード全文はGitHubで確認できます。
wio-bg770a-soracom-connect — iotbuilds-samples
BG770A + SORACOM Funnel → AWS IoT Core 送信サンプル(PlatformIO)
動作確認
まずは、IoTデバイス -> SORACOM Funnelへの送信が成功しているか見ていきます。 これは、HTTPメッセージを見てあげると、分かります。
以下のように204 No Contentが返ってこれば送信成功です。
POST funnel.soracom.io/
Payload: {"temperature":15,"humidity":50}
HTTP response:
HTTP/1.1 204 No Content
Date: Thu, 26 Mar 2026 02:28:59 GMT
Connection: close
次に、AWS IoT Core側に送れているか見ていきます。 IoT Coreには、MQTT テストクライアントがあり、AWSコンソール上でIoT Coreにメッセージが飛んでいるかを確認できます。
devices/bg770a をSubscribeします。
/devices/bg770aのようにTopic名には先頭の/が不要なことは地味に注意が必要です。私はこれで結構時間を溶かしました...

SORACOM Funnelの制約
SORACOM Funnelは便利なサービスですが、双方向通信ができない制約があります。
SORACOM Funnelを経由して通信している場合、IoT Core側からIoTデバイスにメッセージを送ることはできません。 今回のようなセンサーデータをクラウドに上げたいという一方向の通信であればこれは問題ありません。
双方通信がしたい場合には、SORACOM Beamというサービスがあります。 今度こちらも検証してみたいと思います。
まとめ
この記事では、Wio BG770AからSORACOM FunnelをブリッジとしてAWS IoT Coreにデータを届ける手順を紹介しました。
デバイス側の実装はHTTP POSTのみで、証明書管理とMQTTの実装が不要なのが非常に便利だなと思いました。


