为什么我的CloudFormation模板在使用单个分区键的简单DynamoDB上构建失败?

时间:2019-01-18 08:36:41

标签: amazon-dynamodb amazon-cloudformation

我正在尝试使用CloudFormation创建一个简单的DynamoDB表。

堆栈本身的创建(甚至没有达到表的创建)一直失败,并显示一条Internal Failure. Rollback requested by user消息。

“事件”选项卡中没有其他信息。奇怪的是,它在创建堆栈时失败,甚至没有尝试创建DynamoDB资源。

这是一个简单的DynamoDB表,该表具有分区键而没有排序键:

Resources:
  PortalRolesTable:
    Type: AWS::DynamoDB::Table
    Properties:
     TableName: test-env-wb-portal-roles
        AttributeDefinitions:
         - AttributeName: name
           AttributeType: S
        KeySchema:
            - AttributeName: name
              KeyType: HASH

这应该创建表。我还有另一个更复杂的模板,可以成功构建该模板,并创建一个具有二级索引,排序键和TTL等的堆栈。我不知道为什么我对此没有好运。

2 个答案:

答案 0 :(得分:1)

我刚刚使用了精彩的Console Recorder for AWS - Chrome Web Store来生成模板并得到:

AWSTemplateFormatVersion: "2010-09-09"
Resources:
    dynamodb1a42db5:
        Type: "AWS::DynamoDB::Table"
        Properties:
            TableName: "test-env-wb-portal-roles"
            BillingMode: "PROVISIONED"
            KeySchema: 
              - 
                AttributeName: "name"
                KeyType: "HASH"
            ProvisionedThroughput: 
                ReadCapacityUnits: 5
                WriteCapacityUnits: 5
            SSESpecification: 
                Enabled: false

KeySchema似乎是字典的列表,需要将破折号与字典值分开。

请参考以下AWS::DynamoDB::Table - AWS CloudFormation上的YAML代码示例

答案 1 :(得分:0)

我认为真正的问题是缺少 ProvisionedThroughput 属性。

AWS文档说,如果您将BillingMode设置为PROVISIONED(这也是BillingMode的默认值),则需要ProvisionedThroughput

使用 AWS控制台记录器-Chrome Web Store 时,附加组件还会生成ProvisionedThroughput属性。

因此,此代码正确:

AttributeDefinitions:
- AttributeName: name
  AttributeType: S

但是,如果您真的想解决问题,正确的答案是添加ProvisionedThroughput属性或更改BillingMode