

# 配合使用 AWS Lambda 和 AWS IoT
<a name="services-iot"></a>

AWS IoT 提供连接 Internet 的设备（如传感器）与 AWS 云之间的安全通信。这让您能够从多个设备收集、存储和分析遥测数据。

您可以为设备创建 AWS IoT 规则，以便与 AWS 服务 进行交互。AWS IoT [规则引擎](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)提供基于 SQL 的语言，用于从消息负载中选择数据，并将数据发送到其他服务，例如 Amazon S3、Amazon DynamoDB 和 AWS Lambda。当您想要调用其他AWS服务或第三方服务时，您可以定义规则以调用 Lambda 函数。

当传入的 IoT 消息触发规则时，AWS IoT 会[异步](invocation-async.md)调用 Lambda 函数并将数据从 IoT 消息传递到函数。

以下示例显示了温室传感器的湿度读数。**row** 和 **pos** 值标识传感器的位置。此示例事件基于 [AWS IoT 规则教程](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html)中的温室类型。

**Example AWS IoT 消息事件**  

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

对于异步调用，Lambda 会对消息排队并在函数返回错误时[重试](invocation-retries.md)。通过 [destination](invocation-async-retain-records.md#invocation-async-destinations) 配置函数，保留函数无法处理的事件。

您需要向 AWS IoT 服务授予调用 Lambda 函数的权限。使用 `add-permission` 命令将权限语句添加到函数的基于资源的策略。

```
aws lambda add-permission --function-name my-function \
--statement-id iot-events --action "lambda:InvokeFunction" --principal iot.amazonaws.com
```

您应看到以下输出：

```
{
    "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\"}"
}
```

有关如何将 AWS IoT 与 Lambda 结合使用的更多信息，请参阅[创建 AWS Lambda 规则](https://docs.aws.amazon.com/iot/latest/developerguide/iot-lambda-rule.html)。