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

Posted

技术标签:

【中文标题】dynamoDB 的 CloudFormation 模板不起作用:一个或多个参数无效【英文标题】:CloudFormation Template for dynamoDB won't work: One or more parameters were invalid 【发布时间】:2021-05-07 04:28:46 【问题描述】:

我正在尝试为我的每个表格构建一个模板,并且我正在使用一个表格对其进行测试。但是,我收到了这个错误,我不知道如何解决它:One or more parameter values were invalid: Number of attributes in KeySchema does not exactly match number of attributes defined in AttributeDefinitions (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: NRTF448TGFEUGUB3H5UH37AGHBVV4KQNSO5AEMVJF66Q9ASUAAJG; Proxy: null)

我使用的模板是这个:


    "AWSTemplateFormatVersion" : "2010-09-09",
    "Resources" : 
      "myddbtable": 
      "Type" : "AWS::DynamoDB::Table",
      "Properties" : 
        "AttributeDefinitions" : [ 
          
            "AttributeName": "phoneNumber",
            "AttributeType": "S" 
          ,
          
            "AttributeName": "fname",
            "AttributeType": "S" 
          ,
          
            "AttributeName": "lname",
            "AttributeType": "S" 
          
          ],
        "BillingMode" : "PAY_PER_REQUEST",
        "KeySchema" : [
          
            "AttributeName" : "phoneNumber",
            "KeyType": "HASH"
          
        ],
        "TableName" : "UserTable2"
      
    
  

我尝试将 fname 和 lname 属性放在 KeySchema 部分中,KeyType 为 Range,但它也不起作用,有什么想法吗?

【问题讨论】:

我们只需要定义索引中使用的那些属性。我看到您没有在任何地方使用 fname 和 lname 。您可以删除这两个并尝试! 这能回答你的问题吗? CloudFormation insists my DynamoDB creation JSON is invalid .. but I can't see how 【参考方案1】:

由于 DynamoDB 没有架构,我们可以在创建/更新单个记录时添加任何属性。因此,在创建 DynamoDB 表时,我们只需要定义属于主索引或全局二级索引的属性即可。

在这种情况下,表只有phoneNumber 的主键。我们需要从定义中删除另外两个属性 fname 和 'lname`


  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": 
    "myddbtable": 
      "Type": "AWS::DynamoDB::Table",
      "Properties": 
        "AttributeDefinitions": [
          
            "AttributeName": "phoneNumber",
            "AttributeType": "S"
          
        ],
        "BillingMode": "PAY_PER_REQUEST",
        "KeySchema": [
          
            "AttributeName": "phoneNumber",
            "KeyType": "HASH"
          
        ],
        "TableName": "UserTable2"
      
    
  

【讨论】:

但这样我将不得不手动定义所有其他字段,而不是在那里描述它们。有没有办法添加这样的属性? @DiegoDuarte 有这样的方法,因为 DdB 没有任何架构,除非您开始添加本地或全局二级索引。但如果需要架构,则应考虑使用常规数据库,例如 RDS。 @Marcin 好吧。这就说得通了。我想我必须坚持下去,然后在 lambda 函数上添加任何其他字段。谢谢!

以上是关于dynamoDB 的 CloudFormation 模板不起作用:一个或多个参数无效的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 CloudFormation 将 GSI 添加到 DynamoDB 表

dynamodb cloudformation模板错误

在 Cloudformation 中创建 DynamoDB 表失败

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

使用 Cloudformation 创建具有复合主键的 DynamoDB

在 AWS CloudFormation 模板中引用 !Ref DynamoDB 表名