代码之家  ›  专栏  ›  技术社区  ›  hallibut

Lambda功能不工作的SST热重新加载

  •  0
  • hallibut  · 技术社区  · 4 月前

    我是AWS和SST的新手。然而,在过去的几天里,我一直在研究SST的入门项目,并学到了很多东西。我正在使用SST v2.47.3,因为我正在进行的项目正在使用它。出于某种原因,LiveLambdaDevelopment的热重载功能一直使用昨天的代码版本。昨天的版本是一个简单的echo,它进行了POST并返回了发送的内容。最终,我想用POST做一些更复杂的事情,但echo是出于测试目的。从那以后,我修改了lambda,只是为了测试热重载是否有效:

    return {
        statusCode: 200,
        body: "Hot reload is working",
      };
    

    然而,当我到达我的端点时,它会返回我在用户没有从我的旧lambda函数中提供POST消息参数时使用的消息。从那以后,我使用了:

    1. pnpm sst remove以移除堆栈
    2. 已删除.sst隐藏文件夹的所有内容
    3. 删除了我的node_modules
    4. pnpm安装--强制
    5. pnpm sst构建
    6. pnpm sst开发
    7. 确保我有一个AWS_PROFILE=默认值的.env.dev文件(假设它使用的是.AWS中的内容)

    我继续从我的旧lambda得到响应。还有什么我能做的吗?

    2 回复  |  直到 4 月前
        1
  •  1
  •   José Carlos Hernández Retana    4 月前

    听起来您在SST(无服务器堆栈)和AWS Lambda上遇到了缓存或部署问题。这可能是由于各种原因造成的,例如缓存的Lambda版本、CloudFormation堆栈问题,甚至是本地开发环境的怪癖。以下是您可以采取的一些步骤来排除故障并解决问题:

    1. 清除SST和AWS缓存

      删除.sst文件夹:您已经完成了此操作,但请确保它已被完全删除。

      清除AWS Lambda版本:如果您使用的是Lambda版本,旧代码可能仍会被缓存。转到AWS Lambda控制台,找到您的函数,并检查是否有多个版本。如果是这样,请删除旧版本或确保使用正确的版本。

      清除CloudFormation堆栈:有时,CloudFormation栈可能会卡住或无法正确更新。使用AWS CloudFormation控制台手动删除堆栈并重新部署。

    2. 强制重新部署堆栈

      使用pnpm-sst-deploy命令强制完全重新部署堆栈。这确保了所有资源都使用最新代码进行更新。

      如果您使用的是pnpm-sst-dev,请尝试停止它并运行pnpm-stst-deploy,以确保干净的部署。

    3. 检查Lambda函数配置

      转到AWS Lambda控制台,验证函数代码是否与您的最新更改相匹配。

      确保使用了正确的处理程序文件和函数。

      检查Lambda控制台中的环境变量,确保它们与.env.dev文件匹配。

    4. 验证API网关配置

      如果您使用的是API网关,请确保端点指向正确的Lambda函数。

      检查API网关控制台以确保集成请求和响应映射正确。

      如果您已经对API网关进行了更改,请从控制台手动重新部署它。

    5. 检查当地发展环境

      确保您的本地环境正在使用正确的AWS配置文件。运行aws配置列表以验证活动配置文件。

      仔细检查你的.env.dev文件,确保它被正确加载。您可以在Lambda函数中添加console.log来打印环境变量,并验证它们是否符合您的期望。

      如果您使用的是pnpm sst-dev,请确保Live Lambda Development功能正常工作。有时,停止并重新启动开发环境会有所帮助。

    6. 重建并重新启动

      运行pnpm-sst-build以确保您的代码被正确编译。

      停止任何正在运行的pnpm-sst-dev进程并重新启动它们。

    7. 检查Lambda别名

      如果您使用的是Lambda别名(例如dev、prod),请确保使用了正确的别名。您可以在AWS Lambda控制台的“别名”选项卡下检查此项。

    8. 调试步骤

      在Lambda函数中添加日志记录,以验证正在执行的代码。例如: javascript 复制

      console.log(“当前Lambda代码正在运行”); 返回{ 状态代码:200, 正文:“热装正在工作”, };

      检查Lambda函数的CloudWatch日志,看看日志是否符合您的期望。

    9. 重新创建堆栈

      如果上述步骤都不起作用,请尝试完全删除并重新创建堆栈:

       Run pnpm sst remove to delete the stack.
      
       Manually delete any remaining resources in the AWS console (e.g., Lambda functions, API Gateway endpoints, etc.).
      
       Run pnpm sst deploy to recreate the stack from scratch.
      
    10. 更新SST版本

      如果您使用的是旧版本的SST(v2.47.3),请考虑尽可能更新到最新版本。可能会有bug修复或改进来解决您的问题。

    尝试命令摘要 猛击 复制

    清除缓存并重建

    rm-射频sst节点模块 pnpm安装--强制 pnpm sst构建

    重新部署堆栈

    pnpm sst部署

    启动实时Lambda开发

    pnpm sst开发

        2
  •  0
  •   hallibut    4 月前

    我想通了。My Stack in代码通过POST定义了一条路由。我调用了GET,响应恰好与旧代码相同。使用邮递员,我确保我正在发送一条POST消息,并开始收到我的热重载正在工作的消息。