Serverless部署prod环境失败:Lambda及LogGroup资源未找到求助
Serverless 生产环境部署报错解决方案
问题现象
开发环境(dev)部署正常,但生产环境(prod)部署时出现两类错误:
- 初始报错:Lambda函数找不到
Error: UPDATE_FAILED: FilterOptionLambdaFunction (AWS::Lambda::Function) Resource handler returned message: "Lambda function xxxxxxx-api-prod-xxxxxx could not be found" (RequestToken: ee621797-de45-aa3f-118b-8f512d4a5f62, HandlerErrorCode: NotFound)
- 仅保留
api函数部署时,IAM角色关联日志组失败:
Error: UPDATE_FAILED: EnterpriseLogAccessIamRole (AWS::IAM::Role) Unable to retrieve Arn attribute for AWS::Logs::LogGroup, with error message Resource of type 'AWS::Logs::LogGroup' with identifier '{"/properties/LogGroupName":"/aws/lambda/xxxxx-api-prod-api"}' was not found.
问题根因
从提供的serverless.yml配置来看,核心问题在于:
- 大量Lambda函数配置不完整:比如
SyncAlikhsanSB2、FilterOption等仅定义了函数名,缺少handler等必填配置项。开发环境可能因历史部署记录或框架容错未触发错误,但生产环境部署逻辑更严格,导致资源创建失败后连锁触发后续关联错误。 - 日志组依赖失效:Serverless框架默认会为Lambda自动创建日志组,当函数创建失败时,IAM角色尝试关联不存在的日志组Arn,就会引发报错。
修复步骤
1. 补全或清理不完整的函数配置
- 对需要保留的函数,必须补充
handler等核心配置,示例:
SyncAlikhsanSB2: handler: handlers/syncAlikhsanSB2.handler # 按需添加memorySize、timeout、events等配置
- 暂时不需要的函数,直接删除或用
#注释(确保YAML语法合法)。
2. 修正YAML语法错误
当前配置中多个函数仅写了名称和冒号,无后续配置,属于语法不完整。确保所有函数要么有完整配置块,要么被移除/注释。
3. 清理生产环境残留资源(可选)
如果之前的失败部署留下了残缺资源(如半创建的IAM角色、无效的Lambda关联记录),可登录AWS控制台:
- 删除prod环境下相关的Lambda函数、IAM角色、日志组。
- 重新执行
serverless deploy --stage prod。
4. 手动指定日志组配置(可选)
若需控制日志组创建逻辑,可在provider级别添加日志配置,避免自动创建的依赖问题:
provider: # 其他配置不变 logs: lambda: enabled: true retentionInDays: 30
验证
修正配置后,重新执行部署命令,检查AWS控制台确认Lambda、IAM角色、日志组均正常创建。
内容的提问来源于stack exchange,提问作者Muhammad Haekal
相关产品推荐
相关产品推荐

