

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

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

AWS IoT 提供網際網路連線裝置 （例如感應器） 與 AWS 雲端之間的安全通訊。這可以讓您收集、存放和分析來自多個裝置的遙測資料。

您可以為裝置建立與之互動的 AWS IoT 規則 AWS 服務。The AWS IoT [Rules Engine](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) 提供以 SQL 為基礎的語言，從訊息承載中選取資料，並將資料傳送至其他服務，例如 Amazon S3、Amazon DynamoDB 和 AWS Lambda。當您想要叫用其他服務或第三方 AWS 服務時，您可以定義呼叫 Lambda 函數的規則。

當傳入 IoT 訊息觸發規則時， 會以[非同步方式](invocation-async.md) AWS IoT 叫用您的 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 IoT 委託人新增許可，但未提供 `source-arn`或 `source-account`，則任何使用 AWS Lambda 動作建立規則 AWS 帳戶 的 都可以啟用規則來叫用您的 AWS Lambda 函數 AWS IoT。如需詳細資訊，請參閱 [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\"}}}"
}
```

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