AWS CDK 2.61.1中如何将Schema迁移为ISchema?
替换AWS CDK中已移除的Schema类方案
核心逻辑
原Schema类移除后,AWS CDK通过ISchema接口提供了两种替代实现:
- 静态Schema文件加载:
SchemaFile.fromAsset()(适合固定内容的场景) - 动态字符串生成:
Schema.fromString()(完全匹配你之前用addToSchema动态拼接的需求)
直接替换原有动态拼接代码
你之前的代码是创建Schema实例后动态添加内容,现在直接把拼接好的Schema字符串传入Schema.fromString()即可:
// 假设appSyncCompatibleSchema是你要添加的完整/拼接后的Schema字符串 const apiSchema = Schema.fromString(appSyncCompatibleSchema); // 创建AppSync API时直接传入该schema const api = new GraphqlApi(this, 'MyApi', { schema: apiSchema, // 其他配置项... });
多片段拼接场景处理
如果原来的代码是多次调用addToSchema添加不同片段,只需把所有片段拼接成一个完整字符串再传入:
// 拆分的Schema片段 const queryType = ` type Query { getTodo(id: ID!): Todo } `; const todoType = ` type Todo { id: ID! name: String! } `; // 合并为完整Schema const fullSchema = queryType + todoType; const apiSchema = Schema.fromString(fullSchema);
本地文件+动态内容混合场景
如果需要结合本地Schema文件和动态生成的内容,可以先读取本地文件内容,再和动态字符串拼接:
import { readFileSync } from 'fs'; import { join } from 'path'; // 读取本地Schema文件 const localSchema = readFileSync(join(__dirname, '../../playbook-api-schema/schema.graphql'), 'utf8'); // 动态新增的Schema内容 const dynamicMutation = ` type Mutation { addTodo(name: String!): Todo } `; // 合并后生成Schema const fullSchema = localSchema + dynamicMutation; const apiSchema = Schema.fromString(fullSchema);
注意:拼接后的内容必须是语法合法的完整GraphQL Schema,避免出现重复类型定义等语法错误。
内容的提问来源于stack exchange,提问作者Zuxaw
相关产品推荐
相关产品推荐

