首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在检查堆栈进度AWS时,无服务器部署失败

在检查堆栈进度AWS时,无服务器部署失败
EN

Stack Overflow用户
提问于 2018-07-03 12:11:13
回答 2查看 1.5K关注 0票数 0

问题:

我在AWS上有两个lambda函数,表示两个不同的环境(暂存和生产)。生产环境有一个数据导入函数,每10分钟运行一次。我面临的问题是,当我试图部署暂存环境时,堆栈更新过程中会出现错误,如下所示:

代码语言:javascript
运行
复制
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.........................
Serverless: Operation failed!

  Serverless Error ---------------------------------------

  An error occurred: MyimportfunctionEventsRuleSchedule1 - schedule-full-import already exists in stack Cloudformation_StackId_of_production_lambda_function.

编辑:调度-全导入功能只适用于生产环境,而不是暂存环境.我的理解是,当我尝试部署时,它只是试图找到暂存环境的触发器。在这种情况下,它不会找到它,然后进入生产环境。

serverless.yml

代码语言:javascript
运行
复制
schedule_full_import:
    handler: my_handler
    timeout: 6
    events:
      - schedule:
          enabled: true
          name: full-data-import
          rate: rate(10 minutes)
          stageParams:
            stage: prod

我不想为暂存环境触发这个函数,因为它不是必需的。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2018-07-03 14:16:42

如果CloudFormation不工作,可以手动删除现有的$ sls remove堆栈。

然后从零开始重新部署堆栈。当然,确保在新部署之前删除了.serverless目录。

票数 0
EN

Stack Overflow用户

发布于 2018-07-05 23:17:09

我认为问题在于,stageParams并没有做你认为它做的事情。它不将lambda附加到Cloudwatch触发器上,只在prod阶段。Serverless docs (https://serverless.com/framework/docs/providers/aws/events/schedule/)有一个令人困惑的示例,其中将stageParams作为触发器的输入值列出。这意味着Cloudwatch将调用input值为事件数据的lambda。

根据阶段的不同,没有一种方法可以选择性地不部署serverless.yml中列出的资源。当使用一些自定义配置参数不刺激stage时,可以将enabled设置为false。这将将触发器部署到暂存环境,但不会被调用。

CloudFormation错误还表明存在命名冲突。Serverless应该根据舞台生成唯一的lambda名称,所以如果我不得不猜测调度名full-data-import不是唯一的。我会试着把它重命名为

代码语言:javascript
运行
复制
name: full-data-import-${self:provider.stage}

取决于您如何引用您的舞台参数。

你可以尝试这样的方法:

代码语言:javascript
运行
复制
custom:
    importEnabled: <set this by config file, command line argument, environment variable, etc>

functions:
    schedule_full_import:
        handler: my_handler
        timeout: 6
        events:
            - schedule:
                  name: full-data-import-${self:provider.stage}
                  enabled: ${self:custom.importEnabled}
                  rate: rate(10 minutes)

有关设置importEnabled值的方法,请参阅importEnabled

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51154324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档