💭
AWSLambdaにApolloServerをデプロイ
Apollo Docsのチュートリアルをみながらデプロイまでしてみましたので、自己学習した記録を残します。
Apollo Docs
参考にさせていただいた記事
AWS CLIのインストール
macOSで進めていきます。
前提条件としてAWSアカウントを持っていることとします。
1. AWSCLIをインストールします。
自分はpipコマンドを用いてインストールしました。
コマンド
sudo pip install awscli --upgrade --ignore-installed six
2. ユーザー認証情報を使用してAWSCLIの設定
コマンド
aws configure
設定
AWS Access Key ID [None]: *************ID
AWS Secret Access Key [None]: ******************************KEY
Default region name [None]: ap-northeast-1
Default output format [None]: json
3. NPMからサーバーレスフレームワークをインストール
npm install -g serverless
ここまでで、ApolloDocsの前提条件がクリアできます。
プロジェクトの設定
ここからはプロジェクト用ディレクトリで操作を行ってください。
1. apollo-server-lambdaパッケージのインストール
npm install apollo-server-lambda graphql
2. スキーマの型定義とリゾルバーの設定
まずプロジェクトディレクトリの直下にgraphql.jsを作成します。
// graphql.js
const { ApolloServer, gql } = require('apollo-server-lambda');
// graphQL serverが返す値に関する型の定義
const typeDefs = gql`
type Query {
hello: String
}
`;
// graphQL serverが実際にどんな値を返すのかを定義
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
ApolloServerのコンストラクターに渡す
const server = new ApolloServer({ typeDefs, resolvers });
exports.graphqlHandler = server.createHandler({
cors: {
origin: true,
credentials: true,
},
});
一応認証情報(cookie,http認証)を使用したリクエストに対応するためにcrosを有効にしています。
最後の行でgraphqlHandlerをエクスポートしていることを覚えておきましょう。
3. ServerlessFrameworkの構成
serverless.ymlというファイルを使ってデプロイします。
# serverless.yml
service: apollo-lambda
provider:
name: aws
runtime: nodejs12.x
functions:
graphql:
handler: graphql.graphqlHandler
events:
- http:
path: graphql
method: post
cors: true
- http:
path: graphql
method: get
cors: true
serverless.ymlファイルのhandlerには先ほどエクスポートしたファイル名.ハンドラー名を記入します。
handler:<FILENAME>.<HANDLER>という形式でかきます。
以上でデプロイする準備が完了しました。
4. デプロイ
以下のコマンドでデプロイできます。
serverless deploy
サービスの管理に関してはAWSコンソールにて確認できます。
GraphQLPlaygroundのセットアップ
最後にGraphQLPlaygroundのセットアップを行います。
コンストラクターにplaygroundのendpointを追加します。
const server = new ApolloServer({
typeDefs,
resolvers,
playground: {
endpoint: "/dev/graphql"
}
});
Discussion