aws cdk appsync 架构创建状态为失败,详细信息:保存架构时发生内部故障
aws cdk appsync Schema Creation Status is FAILED with details: Internal Failure while saving the schema
给定以下 graphql 架构
# graphql/schema.graphql
type AppUser {
userId: String
fullName: String
}
type Query {
getUser(userId: String): AppUser
getUsers(): [AppUser]
}
type Mutation {
addUser(user: AppUser!): AppUser
}
并且在 lib/mystack.ts 中定义了以下 cdk 代码:
const graphql = new appsync.GraphQLApi(this, 'GraphQLApi', {
name: 'metrolens-graphql-api',
logConfig: {
fieldLogLevel: appsync.FieldLogLevel.ALL,
},
authorizationConfig: {
defaultAuthorization: {
// userPool,
defaultAction: appsync.UserPoolDefaultAction.ALLOW,
},
// additionalAuthorizationModes: [{ apiKeyDesc: 'My API Key' }],
},
schemaDefinitionFile: props?.schemaDirectory,
})
const lambdaRegister = new nodejs.NodejsFunction(this, 'register', {
functionName: 'register',
runtime: lambda.Runtime.NODEJS_12_X,
timeout: cdk.Duration.seconds(10),
entry: './lambda/register/register-0.ts',
handler: 'handler',
layers: [layer],
description: 'Register a user.',
})
const lambdaLogin = new nodejs.NodejsFunction(this, 'login', {
functionName: 'login',
runtime: lambda.Runtime.NODEJS_12_X,
timeout: cdk.Duration.seconds(10),
entry: './lambda/login/login-0.ts',
handler: 'handler',
layers: [layer],
description: 'Login a user.',
})
const lambdaRegisterDataSource = graphql.addLambdaDataSource(
'lambdaRegister',
'Register lambda triggered by appsync',
lambdaRegister
)
lambdaRegisterDataSource.createResolver({
typeName: 'Mutation',
fieldName: 'addUser',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
})
const lambdaLoginDataSource = graphql.addLambdaDataSource(
'lambdaLogin',
'Login lambda triggered by appsync',
lambdaLogin
)
lambdaLoginDataSource.createResolver({
typeName: 'Query',
fieldName: 'getUsers',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
})
我在 AWS::AppSync::GraphQLSchema
部署阶段收到以下错误消息:
GraphQLApi/Schema (GraphQLApiSchema5937B126) 模式创建状态为失败,详细信息:保存模式时发生内部故障。
有没有人遇到过这个错误?我怀疑我的 graphql 模式有问题,但我不知道是什么。另一个答案提到 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html 处的 DynamoDB 保留字可能会导致冲突,即使您不使用 DynamoDB,所以我将 User
类型重命名为 AppSync
。但是,看起来 Query
也是一个保留字,但据我所知,这对于 graphql 定义也是必需的。请帮忙。 AWS CDK 太烂了。
将 getUsers(): [AppUser]
更新为 getUsers: [AppUser]
我遇到了同样的错误,并通过将我的架构插入验证器找到了它的原因。
输入你的给
{
"error": "Syntax error while parsing GraphQL query. Invalid input \"{\n getUser(userId: String): AppUser\n getUsers()\", expected ImplementsInterfaces, Directives, FieldDefinition or Comments (line 6, column 12):\ntype Query {\n ^"
}
问题是我的架构不正确。 AppUser
是一种类型,但我用作 addUser
突变的输入。您可以使用特殊的 input
关键字定义查询和变更的输入。我最终将 AppUser
复制为:
input AppUserInput {
userId: String
fullName: String
}
问题就解决了。
给定以下 graphql 架构
# graphql/schema.graphql
type AppUser {
userId: String
fullName: String
}
type Query {
getUser(userId: String): AppUser
getUsers(): [AppUser]
}
type Mutation {
addUser(user: AppUser!): AppUser
}
并且在 lib/mystack.ts 中定义了以下 cdk 代码:
const graphql = new appsync.GraphQLApi(this, 'GraphQLApi', {
name: 'metrolens-graphql-api',
logConfig: {
fieldLogLevel: appsync.FieldLogLevel.ALL,
},
authorizationConfig: {
defaultAuthorization: {
// userPool,
defaultAction: appsync.UserPoolDefaultAction.ALLOW,
},
// additionalAuthorizationModes: [{ apiKeyDesc: 'My API Key' }],
},
schemaDefinitionFile: props?.schemaDirectory,
})
const lambdaRegister = new nodejs.NodejsFunction(this, 'register', {
functionName: 'register',
runtime: lambda.Runtime.NODEJS_12_X,
timeout: cdk.Duration.seconds(10),
entry: './lambda/register/register-0.ts',
handler: 'handler',
layers: [layer],
description: 'Register a user.',
})
const lambdaLogin = new nodejs.NodejsFunction(this, 'login', {
functionName: 'login',
runtime: lambda.Runtime.NODEJS_12_X,
timeout: cdk.Duration.seconds(10),
entry: './lambda/login/login-0.ts',
handler: 'handler',
layers: [layer],
description: 'Login a user.',
})
const lambdaRegisterDataSource = graphql.addLambdaDataSource(
'lambdaRegister',
'Register lambda triggered by appsync',
lambdaRegister
)
lambdaRegisterDataSource.createResolver({
typeName: 'Mutation',
fieldName: 'addUser',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
})
const lambdaLoginDataSource = graphql.addLambdaDataSource(
'lambdaLogin',
'Login lambda triggered by appsync',
lambdaLogin
)
lambdaLoginDataSource.createResolver({
typeName: 'Query',
fieldName: 'getUsers',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
})
我在 AWS::AppSync::GraphQLSchema
部署阶段收到以下错误消息:
GraphQLApi/Schema (GraphQLApiSchema5937B126) 模式创建状态为失败,详细信息:保存模式时发生内部故障。
有没有人遇到过这个错误?我怀疑我的 graphql 模式有问题,但我不知道是什么。另一个答案提到 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html 处的 DynamoDB 保留字可能会导致冲突,即使您不使用 DynamoDB,所以我将 User
类型重命名为 AppSync
。但是,看起来 Query
也是一个保留字,但据我所知,这对于 graphql 定义也是必需的。请帮忙。 AWS CDK 太烂了。
将 getUsers(): [AppUser]
更新为 getUsers: [AppUser]
我遇到了同样的错误,并通过将我的架构插入验证器找到了它的原因。
输入你的给
{
"error": "Syntax error while parsing GraphQL query. Invalid input \"{\n getUser(userId: String): AppUser\n getUsers()\", expected ImplementsInterfaces, Directives, FieldDefinition or Comments (line 6, column 12):\ntype Query {\n ^"
}
问题是我的架构不正确。 AppUser
是一种类型,但我用作 addUser
突变的输入。您可以使用特殊的 input
关键字定义查询和变更的输入。我最终将 AppUser
复制为:
input AppUserInput {
userId: String
fullName: String
}
问题就解决了。