如何使用AWS Amplify调用EC2实例上部署的非AppSync GraphQL API
核心实现逻辑
AWS Amplify的GraphQL客户端本身是通用客户端,并非只能绑定AppSync服务,你可以直接自定义EC2上的GraphQL端点完成配置,后续迁移到AppSync时仅需修改配置项,无需调整业务调用代码,完全匹配你的需求。
步骤1:手动配置Amplify客户端
无需执行amplify add api生成默认的AppSync配置,直接在项目初始化时手动传入自定义端点配置即可,以下是前端JS项目的配置示例:
import { Amplify } from 'aws-amplify'; import { generateClient } from 'aws-amplify/api'; Amplify.configure({ API: { GraphQL: { endpoint: 'https://你的EC2域名或者公网IP/graphql', // 替换为你部署在EC2上的Spring Boot GraphQL接口地址 region: 'EC2实例所在的AWS区域', // 例如us-east-1,后续迁移AppSync时只需修改该字段和endpoint即可 defaultAuthMode: 'apiKey' // 和你Spring Boot项目的鉴权逻辑匹配即可,支持apiKey、iam、jwt、自定义鉴权等多种模式 } } }); const client = generateClient();
如果你的Spring Boot GraphQL用了JWT等自定义鉴权,只需在配置中添加对应的token获取逻辑即可,无需调整客户端调用规则。
步骤2:编写业务调用代码
以下调用代码后续迁移到AppSync时完全不需要修改,直接复用即可:
// 定义GraphQL查询语句 const getOrderList = ` query GetOrderList($userId: ID!) { getOrderList(userId: $userId) { id orderNo amount createTime } } `; // 发起请求 const fetchOrders = async (userId) => { try { const res = await client.graphql({ query: getOrderList, variables: { userId } }); console.log('订单列表:', res.data.getOrderList); } catch (err) { console.error('请求失败:', err); } };
步骤3:Spring Boot侧适配调整
需要在你的Spring Boot项目中配置CORS规则,允许前端域名跨域访问GraphQL接口,避免浏览器跨域拦截:
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class GraphqlCorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/graphql") .allowedOrigins("你的前端部署域名") // 本地开发可填http://localhost:3000 .allowedMethods("GET", "POST", "OPTIONS") .allowedHeaders("*") .allowCredentials(true); } }
提示:生产环境建议给EC2的GraphQL端点配置SSL证书,使用HTTPS协议访问,避免明文传输安全风险。
后续迁移AppSync的改动范围
当你把Spring Boot GraphQL迁移到AppSync后,仅需要修改Amplify.configure配置中的endpoint、region和对应的鉴权参数即可,所有调用client.graphql的业务代码不需要做任何调整,完全满足你最小化代码改动的需求。
内容的提问来源于stack exchange,提问作者Tejaskumar
相关产品推荐
相关产品推荐

