You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SAM模板创建DynamoDB表时遇错误,请求协助

解决DynamoDB表创建的KeySchema错误及Hash/Range键说明

错误原因

你遇到的错误核心是DynamoDB的KeySchema规则限制:一个表的主键只能是以下两种形式之一,成员数量最多为2:

  • 单一HASH键(分区键)
  • HASH键 + 一个RANGE键(排序键)
    你的模板里给KeySchema加了1个HASH键和4个RANGE键,明显超出数量限制,导致验证失败。

Hash键与Range键的核心概念

  • HASH键(分区键):决定数据存储的物理分区,DynamoDB通过对该键值哈希计算分配数据位置。选这个键要保证取值足够分散,避免所有数据集中在一个分区造成性能瓶颈。你选phoneNumber作为HASH键是合理的,手机号唯一性强,能均匀分散数据。
  • RANGE键(排序键):仅用于在同一个HASH键的分区内做排序或范围查询,一个表最多只能设置一个。比如如果同一个手机号对应多条记录(比如家庭共享号码),可以用email作为RANGE键来区分不同条目,但不能同时设置多个RANGE键。

修正后的SAM模板示例

根据不同业务场景,提供两种修正方案:

方案1:仅用HASH键(适合每条记录的phoneNumber唯一的场景)

如果每个手机号只对应一条客户信息,只需要保留phoneNumber作为HASH键即可,其他业务属性不需要提前在AttributeDefinitions里定义(DynamoDB支持灵活写入属性):

MyDynamoDBTable:
  Type: AWS::DynamoDB::Table
  DeletionPolicy: Retain
  Properties:
    TableName: customerInformations
    AttributeDefinitions:
      - AttributeName: phoneNumber
        AttributeType: S
    KeySchema:
      - AttributeName: phoneNumber
        KeyType: HASH
    # 若需要通过其他属性(如email)查询,可添加全局二级索引(GSI)
    GlobalSecondaryIndexes:
      - IndexName: EmailLookupIndex
        KeySchema:
          - AttributeName: email
            KeyType: HASH
        Projection:
          ProjectionType: ALL
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1

方案2:HASH+RANGE组合键(适合同一phoneNumber对应多条记录的场景)

如果同一个手机号可能对应多条客户记录(比如同一号码绑定多个邮箱),可以搭配一个RANGE键,比如用email:

MyDynamoDBTable:
  Type: AWS::DynamoDB::Table
  DeletionPolicy: Retain
  Properties:
    TableName: customerInformations
    AttributeDefinitions:
      - AttributeName: phoneNumber
        AttributeType: S
      - AttributeName: email
        AttributeType: S
    KeySchema:
      - AttributeName: phoneNumber
        KeyType: HASH
      - AttributeName: email
        KeyType: RANGE

内容的提问来源于stack exchange,提问作者Amjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:48:25