

# で AWS Lambda を使用するAWS IoT
<a name="services-iot"></a>

AWS IoT は、インターネットに接続されたデバイス (センサーなど) と AWS クラウドとの安全な通信を提供します。これにより、複数のデバイスからテレメトリデータを収集して保存および分析できます。

デバイスが AWS のサービスとやり取りするための AWS IoT ルールを作成できます。AWS IoT[ルールエンジン](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)は、メッセージペイロードからデータを選択して他のサービス (Amazon S3、Amazon DynamoDB、AWS Lambda など) に送信するための SQL べ―スの言語を提供します。AWS の別のサービスやサードパーティーのサービスを呼び出す場合は、Lambda 関数を呼び出すためのルールを定義します。

着信 IoT メッセージによってルールがトリガーされると、AWS IoT は Lambda 関数を[非同期的に](invocation-async.md)呼び出し、IoT メッセージから関数にデータを渡します。

次の例は、温室センサーの湿度値を示しています。**row** 値と **pos** 値は、センサーの位置を識別します。このイベント例は、[AWS IoT ルールチュートリアル](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html)の greenhouse タイプに基づいています。

**Example AWS IoT メッセージイベント**  

```
{
    "row" : "10",
    "pos" : "23",
    "moisture" : "75"
}
```

非同期呼び出しで、関数がエラーを返した場合、Lambda はメッセージをキューに入れ、エラーになった呼び出しを[再試行](invocation-retries.md)します。関数を設定するには、[送信先](invocation-async-retain-records.md#invocation-async-destinations)を使用して、関数が処理できなかったイベントを保持します。

Lambda 関数を呼び出すためのアクセス許可を AWS IoT サービスに付与する必要があります。`add-permission` コマンドを使用して、アクセス許可ステートメントを関数のリソースベースのポリシーに追加します。

**重要**  
`source-arn` または `source-account` を指定せずに、AWS IoT プリンシパルの許可を追加すると、AWS Lambda アクションを使用してルールを作成するすべての AWS アカウントが AWS IoT から AWS Lambda 関数を呼び出すルールをアクティブ化できるようになります。詳細については、「[AWS Lambda のアクセス許可](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)」を参照してください。

```
aws lambda add-permission --function-name {{my-function}} \
--statement-id iot-events --action "lambda:InvokeFunction" --principal iot.amazonaws.com \
--source-arn arn:aws:iot:{{us-east-1}}:{{123456789012}}:rule/{{my-rule}} \
--source-account {{123456789012}}
```

以下の出力が表示されます。

```
{
    "Statement": "{\"Sid\":\"iot-events\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:123456789012:rule/my-rule\"},\"StringEquals\":{\"AWS:SourceAccount\":\"123456789012\"}}}"
}
```

AWS IoT で Lambda を使用する方法の詳細については、[AWS Lambda ルールの作成](https://docs.aws.amazon.com/iot/latest/developerguide/iot-lambda-rule.html)を参照してください。