

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# DynamoDB
<a name="dynamodb-rule-action"></a>

DynamoDB (`dynamoDB`) 操作可将所有或部分 MQTT 消息写入 Amazon DynamoDB 表。

您可以按照教程执行操作，该教程向您说明如何使用 DynamoDB 操作创建并测试规则。有关更多信息，请参阅 [教程：将设备数据存储在 DynamoDB 表中](iot-ddb-rule.md)。

**注意**  
此规则将非 JSON 数据作为二进制数据写入到 DynamoDB 中。DynamoDB 控制台以 Base64 编码文本格式显示数据。

## 要求
<a name="dynamodb-rule-action-requirements"></a>

此规则操作具有以下要求：
+  AWS IoT 可以代入执行`dynamodb:PutItem`操作的 IAM 角色。有关更多信息，请参阅 [授予 AWS IoT 规则所需的访问权限](iot-create-role.md)。

  在 AWS IoT 控制台中，您可以选择或创建 AWS IoT 允许执行此规则操作的角色。
+  如果您使用客户托管 AWS KMS key （KMS 密钥）对 DynamoDB 中的静态数据进行加密，则该服务必须有权代表调用方使用 KMS 密钥。有关更多信息，请参阅 *Amazon DynamoDB 入门指南*中的[客户托管式 KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-cmk-customer-managed)。

## 参数
<a name="dynamodb-rule-action-parameters"></a>

使用此操作创建 AWS IoT 规则时，必须指定以下信息：

`tableName`  
DynamoDB 表的名称。  
仅支持[替换模板](iot-substitution-templates.md)：API 且 AWS CLI 仅支持

`hashKeyField`  
哈希键（也称为分区键）的名称。  
仅支持[替换模板](iot-substitution-templates.md)：API 且 AWS CLI 仅支持

`hashKeyType`  
（可选）哈希键（也称为分区键）的数据类型。有效值：`STRING`、`NUMBER`。  
仅支持[替换模板](iot-substitution-templates.md)：API 且 AWS CLI 仅支持

`hashKeyValue`  
哈希键的值。考虑使用替代模板，例如 `${topic()}` 或者 `${timestamp()}`。  
支持[替换模板](iot-substitution-templates.md)：是

`rangeKeyField`  
（可选）范围键（也称为排序键）的名称。  
仅支持[替换模板](iot-substitution-templates.md)：API 且 AWS CLI 仅支持

`rangeKeyType`  
（可选）范围键（也称为排序键）的数据类型。有效值：`STRING`、`NUMBER`。  
仅支持[替换模板](iot-substitution-templates.md)：API 且 AWS CLI 仅支持

`rangeKeyValue`  
（可选）范围键的值。考虑使用替代模板，例如 `${topic()}` 或者 `${timestamp()}`。  
支持[替换模板](iot-substitution-templates.md)：是

`payloadField`  
（可选）有效载荷将写入的列的名称。如果省略此值，有效载荷将写入 `payload` 列。  
支持[替换模板](iot-substitution-templates.md)：是

`operation`  
（可选）要执行的操作类型。有效值：`INSERT`、`UPDATE`、`DELETE`。  
支持[替换模板](iot-substitution-templates.md)：是

`roleARN`  
允许访问 DynamoDB 表的 IAM 角色。有关更多信息，请参阅 [要求](#dynamodb-rule-action-requirements)。  
支持[替换模板](iot-substitution-templates.md)：否

写入 DynamoDB 表的数据是规则的 SQL 语句的结果。

## 示例
<a name="dynamodb-rule-action-examples"></a>

以下 JSON 示例在规则中定义了 DynamoDB 操作。 AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * AS message FROM 'some/topic'", 
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "dynamoDB": {
                    "tableName": "my_ddb_table",
                    "hashKeyField": "key",
                    "hashKeyValue": "${topic()}",
                    "rangeKeyField": "timestamp",
                    "rangeKeyValue": "${timestamp()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB"
                }
            }
        ]
    }
}
```

## 另请参阅
<a name="dynamodb-rule-action-see-also"></a>
+ *Amazon DynamoDB 开发人员指南*中的[什么是 DynamoDB？](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)
+ *Amazon DynamoDB 开发人员指南*中的 [DynamoDB 入门](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)
+ [教程：将设备数据存储在 DynamoDB 表中](iot-ddb-rule.md)