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

Amplify部署AppSync JS解析器及MySQL Serverless V1调用问题

AWS AppSync JS解析器部署与MySQL Data API使用指南

1. 将AppSync JS解析器部署到Amplify应用

文件夹位置

将JS解析器文件放在Amplify项目的amplify/backend/api/<你的API名称>/resolvers目录下,文件命名需遵循<GraphQL类型>_<字段名>.js规则,比如Query_getUser.js对应Query类型下的getUser字段。

需要修改的文件与部署步骤

  • schema.graphql:确保要绑定JS解析器的字段已在GraphQL schema中定义,示例:
    type Query {
      getUser(userId: ID!): User
    }
    type User {
      id: ID!
      name: String!
    }
    
  • transform.conf.json:若之前用VTL解析器,直接替换为JS文件即可;若通过CLI添加,执行amplify add resolver时选择JavaScript类型,CLI会自动生成文件框架并更新配置。
  • 部署:把JS解析器放入指定目录后,运行amplify push,Amplify会自动识别并部署该解析器。

2. 在JS解析器中调用MySQL Serverless V1 Data API执行SQL

前置准备

确保AppSync服务角色拥有访问RDS Data API的权限,可附加AmazonRDSDataFullAccess策略(或更细粒度的rds-data:ExecuteStatement权限)。

JS解析器示例代码

import { RDSDataClient, ExecuteStatementCommand } from "@aws-sdk/client-rds-data";

// 初始化RDS Data客户端
const rdsClient = new RDSDataClient({ region: "us-east-1" }); // 替换为你的区域

export const request = async (ctx) => {
  // 编写参数化SQL语句(避免SQL注入)
  const sqlQuery = "SELECT id, name FROM users WHERE id = :userId";
  
  // 构建请求参数
  const commandParams = {
    secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysql-secret-xxxx", // 替换为你的Secret ARN
    resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:mysql-serverless-cluster", // 替换为你的Cluster ARN
    database: "my_database", // 替换为你的数据库名称
    sql: sqlQuery,
    parameters: [
      {
        name: "userId",
        value: { stringValue: ctx.args.userId }
      }
    ]
  };

  try {
    // 执行SQL语句
    const command = new ExecuteStatementCommand(commandParams);
    const response = await rdsClient.send(command);
    
    // 将RDS返回的记录转换为GraphQL类型格式
    const formattedItems = response.records.map(record => ({
      id: record[0].stringValue,
      name: record[1].stringValue
    }));
    
    return { items: formattedItems };
  } catch (err) {
    throw new Error(`SQL执行失败: ${err.message}`);
  }
};

export const response = (ctx) => {
  // 返回处理后的结果给AppSync
  return ctx.result.items[0]; // 根据业务需求返回单个或多个结果
};

关键说明

  • SQL语句直接写在request函数内,必须使用参数化查询(示例中的:userId和parameters数组),避免SQL注入风险。
  • 无需手动安装AWS SDK依赖,Amplify会自动为AppSync解析器提供@aws-sdk/client-rds-data包。
  • 替换示例中的region、secretArn、resourceArn、database为你的实际资源信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:25