typescript - aws cdk appsync Skjemaskaping-status er FEILET med detaljer: Intern feil under lagring av skjemaet


Gitt det følgende GraphQL-skjemaet

graphql/schema.graphql
type AppUser {
  userId: String
  fullName: String
}

type Query {
  getUser(userId: String): AppUser
  getUsers(): [AppUser]
}

type Mutation {
  addUser(user: AppUser!): AppUser
}

Og følgende CDK-kode definert i lib/mystack.ts:

    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(),
    })

Jeg får følgende feilmelding under AWS::AppSync::GraphQLSchema-utrullingsfasen:

GraphQLApi/Schema (GraphQLApiSchema5937B126) Skapelsesstatus for skjema er FEILET med detaljer: Intern feil under lagring av skjemaet.

Har noen støtt på denne feilen før? Jeg mistenker at det er noe galt med min graphql-skjema, men jeg kunne ikke si hva det var. Et annet svar nevnte at DynamoDBs reserverte ord på https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html kunne forårsake konflikter, selv om du ikke bruker DynamoDB, så jeg omdøpte User-typen til AppSync. Det ser imidlertid ut til at Query også er et reservert ord, men så vidt jeg forstår, er det nødvendig for en graphql-definisjon. Vennligst hjelp. AWS CDK suger skikkelig.

Svar #1

Problemet var at skjemaet mitt var feil. AppUser er en type, men jeg brukte den som input for addUser-mutasjonen. Du definerer inputene for spørringer og mutasjoner med det spesielle input-nøkkelordet. Jeg endte opp med å duplisere AppUser til å være:

input AppUserInput {
  userId: String
  fullName: String
}

Og det løste problemet.

Svar #2

For å forstå hvor problemet oppstår med ditt GraphQL-skjema i dette tilfellet, kan du bare gå til din AppSync API og manuelt prøve å legge til skjemaet (kopiere/lim inn), og det vil automatisk gi en feil.

Relaterte artikler