MongoDB Atlasの機能でGraphQLを設定

## はじめに
MongoDB Atlasは、クラウドベースのフルマネージド型のデータベースサービスで様々な機能を持っている。そのなかに、GraphQL APIの機能があり、最小限の設定をしてみた。ここでは、GraphQL簡単な設定のみを行い、外部からのアクセスについては別に記載する。

## GraphQLサービスの構築
まず、MongoDB Atlas上にアプリケーションを作成し、その後作成済みのDBとCollection(以下、WebCam)にたいしてGrpahQLの設定を行う。

### アプリケーションの作成
MongoDB Atlas上にGraphQL用のアプリケーションを作成する。
1. 上部のメニューから「App Services」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/f9ea8c6e-be78-bd02-de75-2c36edb8e224.png)

2. 初めてアプリケーションを作成する場合、テンプレートを選択するポップアップ画面が表示されるので「Build your own App」を選択し、「next」を押下。(すでにアプリケーションを作成したことがある場合、ポップアップ画面は表示されない。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/f0e7d057-6ea8-4876-1d57-73427ad718fb.png)

3. 切り替わった画面において、以下の3項目を指定して「Create App Service」を押下 
* 使用するデータソースをドロップダウンリストから選択
* アプリケーション名の記入
* デプロイモデルを選択
※アプリケーション名は、後から変更することができない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/83473a9f-3d17-8345-1bc8-65a441d20ed0.png)

4. 再度「App Services」を上部のメニューから選択すると、作成したアプリケーションが表示されているので、アプリ右上のボタンから「Change Environment」を選択してGraphQLの設定を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/363adc35-a0f1-b28a-039f-eb4e84299a79.png)


### GraphQLの設定
作成したアプリケーションにGraphQLの設定を行う。
作成済みのコレクションのデータのスキーマを作成したのちにデプロイを実施する。

#### スキーマの作成
MongoDB Atlasの機能で、Collectionに登録されているデータからスキーマを作成することができる。

1. 左側ペインのメニューからGraphQLのリンクを選択し、選択後、右側のペインに表示された「Generate JSON Schema」ボタンを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/6e98126c-7d73-9980-dade-4c37190a9e25.png)

2. 切り替わった画面の真ん中のペインで、スキーマを作成するコレクションのリンクを選択(以下では、WebCam)。
選択後、右側のペインに「Define a Schema」ボタンが表示されるのでボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/32590e4a-dfa7-9f10-c96f-e60054ca1003.png)

3. 切り替わった画面から、「Generate schema from sampling」を押下すると、登録されているデータをもとに、MongoDB Atlasの機能によりスキーマが生成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/149b036c-f7c4-7f4f-d657-686e5e2e7d4a.png)

4. スキーマが作成されたのを確認して、「Save Draft」を押下。Draftの保存だけではアプリケーションに反映はされないので、以後のDeployが必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/ecba623d-7ac7-f919-4b9c-c900171f0190.png)

5. 画面上部の 「Review Draft & Deploy」ボタンを押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/cd83804d-8f56-f324-bcb1-6328830d1831.png)

6. 表示されたポップアップ画面下部の「Deploy」ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/6587d8e3-6b4a-0bae-3d44-ebfe6d9bb661.png)

デプロイに成功した場合、画面上部にメッセージが出力される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/19323aab-2591-133f-037c-d21ae506706a.png)

### 設定の確認
左側ペインのメニューから再度GraphQLを選択する。

上部には、GraphQLのエンドポイントのURLが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/a056e53a-d4c9-728f-7bfd-e21643a05056.png)

また、queryのテスト画面が作成され、実際にGraphQL用のqueryを作成して実行することで結果を確認することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1284235/1f58e6b3-1afa-fadf-4ae5-2eeec1d90b8e.png)

## おわりに
エンドポイントは作成されているものの、外部からのアクセスのためには、データアクセスのルールと認証の設定が必要。MongoDB Atlas自体は高機能だと思うがいろいろ機能がありすぎて使いこなせる気がしない。