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

AWS Amplify Gen 2项目中同时使用DynamoDB与已有AppSync GraphQL API的配置问题

AWS Amplify Gen 2项目中同时使用DynamoDB与已有AppSync GraphQL API的配置问题

当然可以同时使用这两个服务!你遇到的问题核心是直接覆盖了Amplify Gen2自动生成的默认GraphQL配置,导致原有DynamoDB对应的API配置被冲掉了。别担心,只要给不同的API配置设置「命名客户端」,就能轻松区分它们,让两个API同时工作。

解决思路

Amplify支持配置多个命名GraphQL客户端,默认情况下Gen2会为你创建的DynamoDB资源生成一个default客户端。你只需要在现有配置基础上,额外添加已有AppSync API的命名客户端,而不是直接替换整个GraphQL配置。

具体步骤

1. 正确配置Amplify,添加多客户端

首先,保留Gen2自动生成的amplifyconfiguration.json配置(里面包含你DynamoDB对应的GraphQL API信息),然后在Amplify.configure中扩展配置,添加已有AppSync的客户端:

import { Amplify } from 'aws-amplify';
import config from '@/amplifyconfiguration.json'; // Gen2自动生成的配置文件

Amplify.configure({
  ...config, // 保留Gen2的默认配置
  API: {
    ...config.API,
    GraphQL: {
      ...config.API.GraphQL,
      // 添加已有AppSync API的命名客户端,这里命名为existingAppSync,你可以自定义
      existingAppSync: {
        apiKey: "da2-XXXXXXXXXXXXXXXXXX",
        region: "us-east-1",
        defaultAuthMode: "apiKey",
        endpoint: "https://XXXXXXXXXXXXX.appsync-api.us-east-1.amazonaws.com/graphql"
      }
    }
  }
});

这样既保留了原有DynamoDB API的配置,又新增了外部AppSync的配置,两者不会冲突。

2. 调用API时指定对应的客户端

  • 调用Gen2自己的DynamoDB GraphQL API:直接使用默认客户端即可,不需要额外指定:

    import { generateClient } from 'aws-amplify/api';
    import { listItems } from '@/graphql/queries'; // Gen2自动生成的查询文件
    
    const defaultClient = generateClient();
    const dynamodbData = await defaultClient.graphql({ query: listItems });
    
  • 调用已有AppSync API:生成客户端时指定clientName为你刚才配置的名称(比如existingAppSync),同时使用你通过codegen生成的外部API查询文件:

    import { generateClient } from 'aws-amplify/api';
    // 这里用你单独生成的外部API查询文件,建议放在独立目录区分
    import { listExistingRecords } from '@/graphql-existing/queries';
    
    const externalAppSyncClient = generateClient({ clientName: 'existingAppSync' });
    const externalData = await externalAppSyncClient.graphql({ query: listExistingRecords });
    

3. Codegen时避免文件冲突

当你运行amplify add codegen导入已有AppSync API时,建议指定单独的输出目录,避免和Gen2自动生成的graphql文件混在一起:

amplify add codegen --apiId XXXXXXXXXXXXXXX --output-dir src/graphql-existing

这样外部API的查询、突变文件都会放在graphql-existing目录下,方便你区分调用。

总结

只要通过「命名客户端」的方式配置多个GraphQL API,就能同时使用Gen2项目的DynamoDB资源和外部AppSync API,再也不用二选一啦!

备注:内容来源于stack exchange,提问作者Robert M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:49:35