使用AWS Amplify Gen 2调用HTTP API时遇InvalidApiName错误求助
排查Next.js服务端Amplify Gen2 POST请求InvalidApiName错误
以下是针对该错误的分步排查方案:
1. 严格匹配API名称与amplify_outputs.json配置
API名称是大小写敏感的,必须和amplify_outputs.json中自定义API的apiName字段完全一致,包括大小写、连字符、下划线等细节:
- 示例:若
amplify_outputs.json中为"apiName": "UserProfileApi",代码中调用时不能写成"userprofileapi"或"UserprofileApi"。 - 核对
amplify_outputs.json的自定义API结构,确认apiName字段存在且拼写无误。
2. 验证服务端Amplify初始化配置
在Next.js服务端函数/Server Actions中,必须将对应API的完整配置传入configureAmplify:
'use server'; import { configureAmplify } from '@/amplify/server'; import outputs from '@/amplify_outputs.json'; import { API } from 'aws-amplify'; export async function sendData(payload) { // 确保传入目标API的完整配置节点 configureAmplify({ API: outputs.custom.UserProfileApi }); try { // 第一个参数必须是amplify_outputs中定义的apiName const res = await API.post('UserProfileApi', '/submit', { body: payload }); return res; } catch (err) { console.error(err); throw err; } }
- 禁止遗漏API配置传入,或误传其他API的配置节点。
3. 检查API.post()的参数格式
调用API.post()时,第一个参数必须是API名称,而非API端点URL或API ID:
- 错误写法:
await API.post('https://xxxx.execute-api.us-east-1.amazonaws.com', '/submit', { body: data }) - 正确写法:
await API.post('UserProfileApi', '/submit', { body: data })
4. 确认授权模式与服务端配置匹配
根据你的API授权类型,确保服务端配置包含对应参数:
- API Key授权:检查
amplify_outputs.json中的apiKey字段是否在初始化时传入,且未过期。 - IAM授权:确认Next.js服务端运行的角色(如Vercel Serverless函数角色、ECS任务角色等)拥有调用该HTTP API的IAM权限(例如
execute-api:Invoke)。 - Cognito用户池授权:服务端调用时需确保传入有效的用户凭证(若需认证),或API允许未认证访问(若适用)。
5. 排查Server Actions的上下文问题
- 确保在每个Server Action函数内部初始化Amplify,不要依赖全局初始化(避免跨请求的配置污染)。
- 检查是否有环境变量覆盖了amplify_outputs的配置,比如在Vercel等平台设置的同名环境变量导致配置被替换。
内容的提问来源于stack exchange,提问作者user25626622
相关产品推荐
相关产品推荐

