使用Serverless Framework创建AWS::AppSync::Resolver时JS解析器报错
排查AWS AppSync JavaScript Resolver部署错误的实用步骤
1. 先查代码基础规范
- 得保证
request和response是顶级导出函数,AppSync强制要求暴露这两个核心函数:import { util } from '@aws-appsync/utils'; export function request(ctx) { // 自定义请求逻辑 return { ... }; } export function response(ctx) { // 自定义响应逻辑 return ctx.result; } - 别用AppSync JS运行时不支持的语法或API,比如CommonJS的
require、Node.js专属模块,只使用标准ES模块语法。
2. 避开依赖的坑
@aws-appsync/utils是AppSync运行时内置的依赖,完全不需要在package.json里安装,直接删掉该依赖项,代码里正常导入即可。- 如果用到了其他第三方包,不能直接指定单个JS文件,必须打包成zip包,再通过
CodeUri指向打包后的目录或S3路径。
3. 检查CloudFormation配置细节
Runtime必须写全版本号,比如APPSYNC_JS_1_0_0,仅写APPSYNC_JS可能会触发版本兼容问题:Type: AWS::AppSync::Resolver Properties: ApiId: !Ref AppSyncApi TypeName: Query FieldName: getExample Runtime: Name: APPSYNC_JS RuntimeVersion: 1.0.0 Code: !Sub | ${file(./src/resolvers/jsResolver.js)} # 若使用打包后的zip包,替换为以下配置 # CodeUri: ./src/resolvers/dist- 确认
Code属性的文件路径正确,Serverless Framework以服务根目录为基准,注意大小写和目录层级不要写错。
4. 本地提前校验代码
- 安装AppSync CLI工具做本地校验,比等待CloudFormation报错高效得多:
这个命令会直接输出代码中的语法错误或不符合规范的细节,比CloudFormation的模糊提示精准很多。npm install -g @aws-appsync/cli appsync validate --code ./src/resolvers/jsResolver.js --runtime APPSYNC_JS_1_0_0
5. 检查上下文变量的使用
- 避免在
ctx参数中访问不存在的属性,比如把ctx.args误写为ctx.arg,这类逻辑错误也会触发“代码包含一个或多个错误”的提示。
内容的提问来源于stack exchange,提问作者Cloudformation
相关产品推荐
相关产品推荐

