gpt4 book ai didi

amazon-web-services - Lambda 函数中的 DynamoDB BatchGetItem 动态表名

转载 作者:行者123 更新时间:2023-12-05 01:17:32 24 4
gpt4 key购买 nike

我正在为我当前的应用程序构建一个无服务器后端,使用 dynamoDb 作为我的数据库。我使用 aws sam 将我的 lambda 函数上传到 aws。此外,我将所有表名作为全局变量传递给 lambda(nodejs8.10 运行时),以便在我的 lambda 函数内的 process.env 对象上访问它们。我面临的问题如下:每当我在 dynamoDB 上运行 batchGetItem 方法时,我必须传递一个字符串作为我的表名,我不能根据全局动态更改表名变量:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'ap-south-1'}, {apiVersion:'2012-08-10'});

const params = {
RequestItems: {
//needs to be a string, cannot be a variable containing a string
'tableName': {
Keys: [] //array of keys
}
}
}
dynamodb.batchGetItem(params, (err, result) => {
// some logic
})

我需要将表名作为字符串传递,本质上是将表名硬编码到我的函数中。其他 DynamoDB 操作,例如 getItem 方法,接受参数对象中表名的键值对:

const tableName = process.env.TableName;
const getItemParams = {
Key: {
"Key": {
S: 'some key'
}
},
// table name can be changed according to the value past to lambda's environment variable
TableName: tableName
}
dynamodb.getItem(getItemParams, (err, result) => {
// some logic
}

因此我的问题是,有没有办法避免在 batchGetItem 方法中对表名进行硬编码,而是像在 getItem 方法中那样动态分配它?

最佳答案

您可以使用环境变量中的tableName。分两步构建您的参数:

const { tableName } = process.env;

const params = {
RequestItems: {},
};

// `tableName` is your environment variable, it may have any value
params.RequestItems[tableName] = {
Keys: [], //array of keys
};

dynamodb.batchGetItem(params, (err, result) => {
// some logic
})

关于amazon-web-services - Lambda 函数中的 DynamoDB BatchGetItem 动态表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com