尝试使用AWS的API Gateway + Lambda来实现GraphQL
在研究如何在无服务器架构中使用GraphQL时,我发现了serverless framework的一个示例,所以我打算运行一下看看。
无服务器的GraphQL API
- インストール
安装Serverless框架,并安装Serverless-GraphQL-API。
npm install serverless -g
git clone https://github.com/boazdejong/serverless-graphql-api
cd serverless-graphql-api
npm install
资源的区域设置为默认值(us-east-1)。
如果需要,请将serverless.yml的区域修改为运行的区域。
6 provider:
7 name: aws
8 runtime: nodejs4.3
9 iamRoleStatements:
10 - Effect: Allow
11 Action:
12 - dynamodb:DescribeTable
13 - dynamodb:Query
14 - dynamodb:Scan
15 - dynamodb:GetItem
16 - dynamodb:PutItem
17 - dynamodb:UpdateItem
18 - dynamodb:DeleteItem
19 Resource: arn:aws:dynamodb:us-east-1:*:*
如果要将区域更改为东京区域,请在第9行添加 region: ap-northeast-1,将第19行中的us-east-1更改为ap-northeast-1。
- デプロイ
npm run deploy
当部署完成部署后,将输出如下内容。
Serverless: Stack update finished...
Service Information
service: graphql-api
stage: dev
region: us-west-1
api keys:
None
endpoints:
POST - https://xxxxxxx.execute-api.us-west-1.amazonaws.com/dev/graphql
functions:
graphql: graphql-api-dev-graphql
Stack Outputs
GraphqlLambdaFunctionQualifiedArn: arn:aws:lambda:us-west-1:nnnnnnnnnn:function:graphql-api-dev-graphql:2
ServiceEndpoint: https://xxxxxxx.execute-api.us-west-1.amazonaws.com/dev
ServerlessDeploymentBucketName: graphql-api-dev-serverlessdeploymentbucket-xxxxxxxxx
请使用应用程序GraphiQL.app等访问Service Information的endpoints,并确认其正常工作。
这次尝试的是一个使用Apollo的graphql-server-lambda架构实现的无服务器GraphQL API。