AWS SAM and DynamoDB Local



我想在Node.js中创建一个API端点,列出DynamoDB中的表名。我在本地创建了一个简单的表,并用命令确认了该表的存在

aws dynamodb list-tables --endpoint-url http://host.docker.internal:8000
{
"TableNames": [
"SampleTable"
]
}

但是我的lambda返回

{"TableNames":[]}

这是我的λ

const AWS = require('aws-sdk');
const options = {
apiVersion: '2012-08-10',
region: 'us-east-1',
};
if (process.env.AWS_SAM_LOCAL) {
options.endpoint = new AWS.Endpoint('http://host.docker.internal:8000');
}
const ddb = new AWS.DynamoDB(options);
exports.listTablesHandler = async (event) => {
if (event.httpMethod !== 'GET') {
throw new Error(`listTables only accept GET method, you tried: ${event.httpMethod}`);
}
console.info('received:', event);
const params = {};
let response = { statusCode: '500' };
try {
response = await ddb.listTables(params).promise();
} catch (err) {
console.log(err);
}
return response;
};

我本以为Lambda会把";SampleTable";在API响应中

您应该检查是否正在使用-sharedDb

如果使用-sharedDb选项,DynamoDB会创建一个名为shared-local-instance.db的数据库文件。每个连接到DynamoDB的程序都会访问该文件。如果你删除文件,你会丢失你存储在其中的任何数据。

如果省略-sharedDb,则数据库文件名为myaccesskeyid_region.db,其AWS访问密钥ID和AWS区域显示在应用程序配置中。如果你删除文件,你会丢失你存储在其中的任何数据。

最新更新