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

如何结合AWS SAM使用Dynamoose?已通过SAM创建DynamoDB表

用Dynamoose操作已通过AWS SAM创建的DynamoDB表

一、定义匹配现有表的Dynamoose Schema

因为表已经通过AWS SAM模板创建完成,你只需要定义与现有表结构完全对齐的Schema,并禁止Dynamoose自动创建/修改表即可:

const dynamoose = require("dynamoose");

// 初始化Dynamoose(Lambda环境下无需额外配置区域,本地开发需指定)
// dynamoose.aws.sdk.config.update({ region: "us-east-1" });

// 定义Schema,严格匹配SAM模板中的属性、主键配置
const EmployeeSchema = new dynamoose.Schema({
  EmployeeId: {
    type: String,
    hashKey: true, // 对应SAM中的HASH主键
    required: true
  },
  LocationId: {
    type: String,
    required: true
  },
  DepartmentId: {
    type: String,
    required: true
  }
}, {
  create: false, // 核心配置:禁止Dynamoose管理表结构
  tableName: "Employee" // 指定已存在的表名
});

// 关联已存在的全局二级索引(GSI)
EmployeeSchema.index({
  name: "Location-index", // 必须与SAM模板中的索引名完全一致
  hashKey: "LocationId",
  projection: "all" // 对应SAM中的ProjectionType: ALL
});

// 创建Model
const Employee = dynamoose.model("Employee", EmployeeSchema);

二、使用全局二级索引(GSI)查询

定义好Schema后,直接通过using()方法指定索引名,即可基于GSI执行查询:

// 查询指定地点下的所有员工
async function fetchEmployeesByLocation(locationId) {
  const result = await Employee.query("LocationId")
    .eq(locationId)
    .using("Location-index") // 指定要使用的GSI名称
    .exec();
  return result;
}

// 调用示例
fetchEmployeesByLocation("LA-001").then(data => console.log(data));

关键注意事项

  • 所有属性名、类型、索引名称必须与AWS SAM模板中的定义完全一致(大小写敏感)
  • 禁止通过Dynamoose修改表结构,所有表结构变更需通过AWS SAM模板部署更新
  • 确保执行代码的IAM角色拥有DynamoDB的读写权限,包括对该GSI的访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:00:54