Apollo server on AWS Lambda

Last update in 9/2019

There are number of things why I really like working with GraphQL. I also enjoy writing Lambda Functions to do simple things without needing to manage full-blown server. Why not merge both? Apollo is awesome tool that will make it super easy! To start, install Apollo Server and GraphQL.

yarn add apollo-server-lambda graphql

This article assumes that you already have serverless framework up and running, so I'll show just functions section.

functions:
graphql:
handler: handler.graphql
events:
- http:
path: graphql
method: post
cors: true
- http:
path: graphql
method: get
cors: true

After that we will create handler.js file in which server will live and import needed packages.

import { ApolloServer, gql } from 'apollo-server-lambda'

Now comes the GraphQL part. Let's create type definitions for API.

const typeDefs = gql`
type Query {
message: String!
}
`

Next, create resolvers. Here you can call functions to get data from database or similar. For testing purposes I'll just return string.

const resolvers = {
Query: {
message: () => 'Your Apollo Server is working.',
},
}

And finally, you must wire up type definitions and resolvers with Apollo and export it.

const server = new ApolloServer({
typeDefs,
resolvers,
})

exports.graphql = server.createHandler({
cors: {
origin: true,
credentials: true,
},
})

There are still few things left to do! Run sls deploy to deploy Apollo Server. After Lambda is successfully uploaded to AWS API Gateway you can visit YOUR-API-ENDPOINT/graphql to try API in GraphQL Playground!