Amplify创建的Lambda访问AppSync报UnauthorizedException错误如何解决?
错误原因排查
- 核心授权参数错误:代码中
x-api-key请求头传入的是API_DOCBACKEND_GRAPHQLAPIIDOUTPUT,这是AppSync的API ID值,不是API_KEY授权模式下需要的密钥值,Amplify自动生成的API Key对应的环境变量为API_<API名称>_GRAPHQLAPIKEYOUTPUT,参数不匹配直接导致鉴权失败。 - 授权模式不匹配:如果你的AppSync API启用的授权模式不是
API_KEY而是IAM、Cognito等其他模式,继续使用x-api-key头也会触发未授权异常。你已经配置了Lambda执行角色的AppSync访问权限,但当前代码没有对请求做SigV4签名,无法通过IAM授权校验。 - 额外笔误:代码中查询的是
listDonors接口,但返回数据时误取了listTodos字段,该问题在授权问题解决后会触发数据为空的报错。
可行解决方案
场景1:AppSync使用API_KEY作为授权模式
- 修改请求头取值,将
headers字段内的'x-api-key': process.env.API_DOCBACKEND_GRAPHQLAPIIDOUTPUT替换为'x-api-key': process.env.API_DOCBACKEND_GRAPHQLAPIKEYOUTPUT - 登录AWS AppSync控制台,确认对应API的API Key处于有效状态,未过期
- 修改返回数据的笔误,将
graphqlData: graphqlData.data.data.listTodos替换为graphqlData: graphqlData.data.data.listDonors
场景2:AppSync使用IAM作为授权模式
- 移除代码中的
x-api-key请求头,改用AWS SigV4对GraphQL请求做签名,可引入aws-sdk、aws-appsync等依赖实现签名逻辑,也可直接使用Amplify服务端API调用能力自动处理签名 - 确认Lambda执行角色已绑定你提供的IAM权限策略,核对策略中Resource字段的AppSync API ID与实际API ID一致
- 同样修正上述返回字段的笔误问题
验证步骤
修改完成后,先在AppSync控制台的查询测试页,选择对应的授权模式执行listDonors查询,确认接口能正常返回数据后再触发Lambda调用验证。
内容的提问来源于stack exchange,提问作者Brandon Heng
相关产品推荐
相关产品推荐

