You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Serverless Framework部署AppSync时遇配置错误求助

问题修复方案

核心错误原因

  1. 配置键名大小写不匹配:serverless-appsync-plugin要求custom下的配置键必须是全小写的appsync,你用了驼峰式的appSync,导致插件无法识别配置结构,触发Invalid AppSync Configuration警告和后续的schema未定义错误。
  2. Provider参数拼写错误:provider段里的memorize是笔误,正确参数名是memorySize,这个错误会导致Lambda资源配置异常。
  3. MappingTemplates格式错误:request: false和response: false不符合插件规则,必须指定请求/响应模板的路径或内联模板代码,不能直接设为false。
  4. 缺少AppSync调用Lambda的IAM角色:你的配置里没有给AppSync分配调用Lambda的权限,部署时会出现权限错误。

修复后的完整配置

useDotenv: true

service: ${env:SERVICE_NAME}

frameworkVersion: '3'

provider:
  name: AWS
  runtime: python3.7
  memorySize: 512  # 修正拼写错误
  timeout: 600
  architecture: x86_64
  stage: ${opt:stage, 'dev'}
  stackTags:
    product: soumilshah
    env: qa
    created-date: 2022-04-26
    team: python-dev
    customer-impact: false
    terraform: false

plugins:
  - serverless-appsync-plugin

package:
  exclude:
    - '**/*'
  include:
    - '*.py'


custom:
  appsync:  # 改为全小写
    name: "myApis"
    schema:
      - "schema.graphql"
    authenticationType: API_KEY
    mappingTemplates:
      - type: Query
        field: getUsers
        dataSource: ${env:LAMBDA_SOURCE}
        # 使用内联VTL模板,也可以换成模板文件路径
        requestMappingTemplate: |
          {
            "version": "2017-02-28",
            "operation": "Invoke",
            "payload": $util.toJson($context.arguments)
          }
        responseMappingTemplate: |
          $util.toJson($context.result)
    dataSources:
      - type: AWS_LAMBDA
        name: ${env:LAMBDA_SOURCE}
        description: 'Lambda DataSource'
        config:
          lambdaFunctionArn: arn:aws:lambda:${env:REGION}:${env:ACCOUNT}:function:${env:SERVICE_NAME}-${opt:stage, 'dev'}-lambda
          serviceRoleArn: !GetAtt AppSyncLambdaServiceRole.Arn

# 添加AppSync调用Lambda的IAM角色
resources:
  Resources:
    AppSyncLambdaServiceRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal:
                Service: appsync.amazonaws.com
              Action: sts:AssumeRole
        Policies:
          - PolicyName: AppSyncLambdaInvokePolicy
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Action: lambda:InvokeFunction
                  Resource: arn:aws:lambda:${env:REGION}:${env:ACCOUNT}:function:${env:SERVICE_NAME}-${opt:stage, 'dev'}-lambda

functions:
  lambda:
    handler: lambda_function.getUsers

额外检查项

  • 确认.env文件中的ACCOUNT是12位完整的AWS账号ID(当前配置里的账号ID少1位,属于输入错误)。
  • 若不想使用内联模板,可创建mapping-templates目录,编写对应的VTL文件,然后在mappingTemplates中指定路径,例如:request: "mapping-templates/Query.getUsers.request.vtl"。
  • 确保serverless-appsync-plugin版本与Serverless Framework 3.x兼容,建议锁定版本为2.5.0及以上,可通过npm install serverless-appsync-plugin@2.5.0 --save-dev安装。

内容的提问来源于stack exchange,提问作者Shatya Kesarwani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:53:15