gpt4 book ai didi

amazon-web-services - AWS - CloudFormation 返回堆栈已存在异常,尽管堆栈已成功创建,但无法更新到 DynamoDB

转载 作者:行者123 更新时间:2023-12-03 07:39:30 24 4
gpt4 key购买 nike

我想使用 AWS SDK 创建子堆栈(在主堆栈旁边),并将创建的堆栈 ID 写入 DynamoDB。问题是,虽然堆栈已成功创建,但 lambda 返回了 AlreadyExistsException,因此无法将堆栈 id 更新到 DB。奇怪的是,如果我在更新数据库函数之前删除了 await ,则 lambda 返回成功,但更新函数不会继续。当我的主堆栈完成创建时,将调用创建子堆栈 lambda 函数,可以从 SNS 检索其状态。

我可以做什么来实现我的目标?

我的代码如下:

public async createMyStack(dataId) {
let stackId = '';

let data = this.dbService.getData(dataId);

if (!data.StackId) {
const cfn = new AWS.CloudFormation({
region: 'us-east-1'
});

let stackInput: AWS.CloudFormation.Types.CreateStackInput = [
// Some stack input here
];

// create the stack
await cfn.createStack(stackInput, (err, data) => {
if (err) {
console.error(err);
throw err;
}

stackId = data.StackId ?? '';
}).promise();

// write stack id to DB
if (stackId) {
try {
await this.dbService.update('StackId', stackId);
} catch (error) {
console.error(error);
throw error;
}
}
}

return stackId;
}

最佳答案

createStack 同时使用 Promise 和回调,因此操作会执行两次。使用 Promise 或回调(不是两者) 可以解决问题。

// create the stack
cfn.createStack(stackInput, (err, data) => {
if (err) {
console.error(err);
throw err;
}

stackId = data.StackId ?? '';
});

或者

// create the stack
try {
await cfn.createStack(stackInput).promise();
stackId = data.StackId ?? '';
} catch (error) {
console.error(error);
throw error;
}

关于amazon-web-services - AWS - CloudFormation 返回堆栈已存在异常,尽管堆栈已成功创建,但无法更新到 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73160827/

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