Skip to content

Resolver ​

The Resolver resource lets you manage AWS AppSync Resolvers for connecting GraphQL operations to data sources.

Minimal Example ​

Create a basic AppSync resolver with required properties and a common optional property:

ts
import AWS from "alchemy/aws/control";

const basicResolver = await AWS.AppSync.Resolver("basicResolver", {
  TypeName: "Query",
  FieldName: "getUser",
  ApiId: "your-api-id",
  DataSourceName: "UserDataSource",
  RequestMappingTemplate: `
    {
      "version": "2017-02-28",
      "operation": "GetItem",
      "key": {
        "id": $util.dynamodb.toDynamoDBJson($ctx.args.id)
      }
    }
  `,
  ResponseMappingTemplate: `
    $util.toJson($ctx.result)
  `
});

Advanced Configuration ​

Configure a resolver with additional options, including caching and a pipeline configuration:

ts
import AWS from "alchemy/aws/control";

const advancedResolver = await AWS.AppSync.Resolver("advancedResolver", {
  TypeName: "Mutation",
  FieldName: "createUser",
  ApiId: "your-api-id",
  DataSourceName: "UserDataSource",
  MaxBatchSize: 10,
  CachingConfig: {
    Ttl: 300,
    CacheKeys: ["$ctx.args.id"]
  },
  RequestMappingTemplate: `
    {
      "version": "2017-02-28",
      "operation": "PutItem",
      "key": {
        "id": $util.dynamodb.toDynamoDBJson($ctx.args.id)
      },
      "attributeValues": {
        "name": $util.dynamodb.toDynamoDBJson($ctx.args.name),
        "email": $util.dynamodb.toDynamoDBJson($ctx.args.email)
      }
    }
  `,
  ResponseMappingTemplate: `
    $util.toJson($ctx.result)
  `
});

Pipeline Resolver Example ​

Create a resolver that utilizes a pipeline configuration to handle complex logic:

ts
import AWS from "alchemy/aws/control";

const pipelineResolver = await AWS.AppSync.Resolver("pipelineResolver", {
  TypeName: "Query",
  FieldName: "searchUsers",
  ApiId: "your-api-id",
  DataSourceName: "UserDataSource",
  PipelineConfig: {
    Functions: ["function1", "function2"]
  },
  RequestMappingTemplate: `
    $util.toJson($ctx.args)
  `,
  ResponseMappingTemplate: `
    $util.toJson($ctx.result)
  `
});

Using S3 for Mapping Templates ​

Leverage S3 for storing request and response mapping templates:

ts
import AWS from "alchemy/aws/control";

const s3Resolver = await AWS.AppSync.Resolver("s3Resolver", {
  TypeName: "Mutation",
  FieldName: "updateUser",
  ApiId: "your-api-id",
  DataSourceName: "UserDataSource",
  RequestMappingTemplateS3Location: "s3://your-bucket/request-mapping-template.vtl",
  ResponseMappingTemplateS3Location: "s3://your-bucket/response-mapping-template.vtl"
});

This document provides a comprehensive overview of how to manage AWS AppSync Resolvers using Alchemy, showcasing different configurations and use cases for effective integration with your GraphQL APIs.