我正在尝试使用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等的堆栈。我不知道为什么我对此没有好运。
答案 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