dynamodb cloudformation模板错误

Posted

技术标签:

【中文标题】dynamodb cloudformation模板错误【英文标题】:dynamo db cloudformation template error 【发布时间】:2017-08-13 17:32:31 【问题描述】:

当我尝试加载此 cloudformation 模板以创建 dynamo db 表时出现以下错误

Property AttributeDefinitions与表的KeySchema和二级索引不一致


  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": 
    "TableName": 
      "Description": "Table name to use",
      "Type": "String",
      "Default": "test-user-unique-ids"
    ,
    "ReadCapacityUnits": 
      "Description": "Provisioned read throughput",
      "Type": "Number",
      "Default": "100",
      "MinValue": "1",
      "MaxValue": "10000",
      "ConstraintDescription": "must be between 1 and 10000"
    ,
    "WriteCapacityUnits": 
      "Description": "Provisioned write throughput",
      "Type": "Number",
      "Default": "100",
      "MinValue": "1",
      "MaxValue": "10000",
      "ConstraintDescription": "must be between 1 and 10000"
    
  ,
  "Resources": 
    "testUserUniqueIds": 
      "Type": "AWS::DynamoDB::Table",
      "Properties": 
        "TableName": 
          "Ref": "TableName"
        ,
        "AttributeDefinitions": [
          
            "AttributeName": "unique_id",
            "AttributeType": "S"
          
        ],
        "KeySchema": [
          
            "AttributeName": "guid",
            "KeyType": "HASH"
          
        ],
        "ProvisionedThroughput": 
          "ReadCapacityUnits": 
            "Ref": "ReadCapacityUnits"
          ,
          "WriteCapacityUnits": 
            "Ref": "WriteCapacityUnits"
          
        
      
    
  

【问题讨论】:

【参考方案1】:

属性名称定义为unique_id。但是,已经为属性guid 定义了哈希键。

AttributeDefinitions 上定义的属性名称应在KeySchema 上使用相同的名称。它们应该是一致的。

AttributeDefinitionsKeySchema 上都保留unique_idguid

编辑:

在创建 Dynamodb 表时,您可以仅包含键属性,例如分区键和排序键(如果可用)。 nosql 数据库的整个概念是每个项目,即记录可以有不同的属性。创建表时不需要定义非关键属性。 NoSQL 是无模式数据库。

如果您在创建表时指定了任何非关键属性,您将得到验证异常。

【讨论】:

如何在表格中添加额外的列?我想为 unique_id 和 guid 和服务添加列 你说没有办法做主键和对象或数组甚至副键 评论不清楚。我只是添加更多信息。简单地说,创建表时只能定义关键属性。如果您有任何 GSI(全局二级索引),也可以在创建表时定义 GSI 的关键属性。任何不属于键(主表或索引)的属性都不能在创建表时定义。​​ 能否将键或二级索引设为数组或对象? 不,DynamoDB 不支持。您不能在 Set、Map、List、Array 等文档数据类型上创建索引。

以上是关于dynamodb cloudformation模板错误的主要内容,如果未能解决你的问题,请参考以下文章

dynamoDB 的 CloudFormation 模板不起作用:一个或多个参数无效

如何通过从 CloudFormation 中删除来从 DynamoDb 中删除全局二级索引?

具有 CloudFormation 的 Amazon DynamoDB 属性类型

CloudFormation 将项目放入 DynamoDB 表中

CloudFormation 模板的保留字?

AWS CloudFormation 条件模板验证