

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

AWS IoT 提供網際網路連線裝置 (例如感應器) 和 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 訊息傳遞至函數。

以下範例示範從溫室感應器讀取濕度。**資料列**和**資料行**的值會識別感應器的位置。此範例事件是以 [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)。為您的函數設定[目的地](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\"}"
}
```

如需如何搭配使用 Lambda 與 AWS IoT 的詳細資訊，請參閱[建立 AWS Lambda 規則](https://docs.aws.amazon.com/iot/latest/developerguide/iot-lambda-rule.html)。