@ttoss/appsync-api
v0.19.1
Published
A library for building GraphQL APIs for AWS AppSync.
Downloads
271
Readme
@ttoss/appsync-api
This package provides a opinionated way to create an AppSync API using @ttoss/graphql-api
API.
Installation
pnpm add @ttoss/appsync-api @ttoss/graphql-api graphql
Getting Started
You can create and deploy an AppSync API in four steps:
Create a
schemaComposer
object usinggraphql-compose
, that the next steps will use to create the API.Create a
cloudformation.ts
file that exports a CloudFormation template usingcreateApiTemplate
:
import { createApiTemplate } from '@ttoss/appsync-api';
import { schemaComposer } from './schemaComposer';
const template = createApiTemplate({
schemaComposer,
dataSource: {
roleArn: {
'Fn::ImportValue': 'AppSyncLambdaDataSourceIAMRoleArn',
},
},
lambdaFunction: {
roleArn: {
'Fn::ImportValue': 'AppSyncLambdaFunctionIAMRoleArn',
},
},
});
export default template;
- Create a
lambda.ts
file that exports a Lambda handler function usingcreateAppSyncResolverHandler
:
import { createAppSyncResolverHandler } from '@ttoss/appsync-api';
import { schemaComposer } from './schemaComposer';
export const handler = createAppSyncResolverHandler({ schemaComposer });
- Add
graphql
to thelambdaExternals
array oncarlin.yml
:
lambdaExternals:
- graphql
Now you can deploy your API using carlin deploy
:
carlin deploy
API
Resolvers Context
The createAppSyncResolverHandler
function adds the context
object to the resolvers. This object contains the following properties:
handler
- AWS Lambda context object.request
- AppSync request object (see Request section).identity
- AppSync identity object (see Identity section).
Custom domain name
You can add a custom domain name to your API using the customDomain
option.
import { createApiTemplate } from '@ttoss/appsync-api';
export const handler = createApiTemplate({
schemaComposer,
customDomain: {
domainName: 'api.example.com', // required
certificateArn: {
'Fn::ImportValue': 'AppSyncDomainCertificateArn',
}, // required
},
});
If your domain is on Route53, you can use the option customDomain.hostedZoneName
to create the required DNS records.
import { createApiTemplate } from '@ttoss/appsync-api';
export const template = createApiTemplate({
schemaComposer,
customDomain: {
domainName: 'api.example.com', // required
certificateArn: {
'Fn::ImportValue': 'AppSyncDomainCertificateArn',
}, // required
hostedZoneName: 'example.com.', // optional
},
});