如何将Amplify Next.js SSR函数的超时时间从10秒延长至30秒?
END RequestId: 0f5be97f-9519-4d07-8c51-45ec9968171f
REPORT RequestId: 0f5be97f-9519-4d07-8c51-45ec9968171f Duration: 10010.52 ms Billed Duration: 10000 ms Memory Size: 512 MB Max Memory Used: 159 MB
2021-08-27T16:22:55.214Z 0f5be97f-9519-4d07-8c51-45ec9968171f Task timed out after 10.01 seconds
 --- ### 解决方案 配置被覆盖是Amplify的默认机制:每次部署时都会根据内置的IaC(基础设施即代码)模板重新生成Lambda资源,手动在Lambda控制台修改的配置不会被持久化,因此会被重置为默认的10秒,你可以通过以下两种方案永久修改超时配置: #### 方案1:通过构建后钩子自动更新(改造成本最低) 无需调整现有项目结构,两步配置即可生效: - 打开AWS IAM控制台,找到当前Amplify项目关联的服务角色,为其添加`lambda:UpdateFunctionConfiguration`权限,允许Amplify在构建阶段修改Lambda配置 - 修改项目根目录下的`amplify.yml`构建配置,在postBuild阶段添加自动更新超时的命令: ```yaml version: 1 frontend: phases: preBuild: commands: - npm ci build: commands: - npm run build # 新增postBuild阶段逻辑 postBuild: commands: - aws lambda update-function-configuration --function-name 替换为你的Lambda函数实际名称 --timeout 30 artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/*
方案2:通过Amplify CLI持久化配置
如果你是用Amplify CLI管理项目资源,可以直接修改函数的配置参数:
- 执行命令
amplify update function - 在交互列表中选择对应处理Next.js API路由的SSR函数
- 按提示将超时时间调整为30秒后执行
amplify push部署即可,后续所有部署都会沿用该配置,不会被覆盖
优化建议
你的接口本地耗时18-20秒是因为需要发起6次第三方API请求,建议优先排查这些请求是否可以从串行调用改为并行调用(通过Promise.all()处理),如果能将耗时压缩到10秒以内,可以从根源避免超时问题,同时降低Lambda运行成本。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

