【问题标题】:AWS - CloudFormation returned stack-already-exists exception and failed to update to DynamoDB though stack was successfully createdAWS - CloudFormation 返回堆栈已存在异常并且未能更新到 DynamoDB,尽管堆栈已成功创建
【发布时间】:2022-08-05 13:46:53
【问题描述】:

我想使用 AWS SDK 创建我的子堆栈(在我的主堆栈旁边),并将创建的堆栈 ID 写入 DynamoDB。问题是虽然堆栈已成功创建,但 lambda 返回了AlreadyExistsException,因此无法将堆栈 ID 更新为 DB。奇怪的是,如果我在更新 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;
}
  • 什么是堆栈重复异常?
  • @Lasek 准确地说是AlreadyExistsException。我会编辑帖子
  • 您提供的信息太少,dbservice 是什么?
  • @Lasek 那是我使用 DynamoDB 的自定义服务,到目前为止它运行良好,因此无需担心

标签: amazon-web-services aws-lambda amazon-cloudformation


【解决方案1】:

createStack 同时使用 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;
}

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 2017-05-05
    • 2019-03-23
    • 2018-03-24
    • 1970-01-01
    • 2021-06-27
    • 2020-11-09
    • 2018-10-01
    相关资源
    最近更新 更多