Apollo Engine
アカウントについて
デフォルトだと、GitHub アカウントでの登録
登録したアカウントの Organization を認識する
Team プラン以上だと SSO ログインのオプションもあるが、要相談
最初に登録した人の GitHub のユーザアカウントが作成される
アカウント登録
GitHub アカウントで登録する
Organization 内で一意のサービス ID を作成する
https://gyazo.com/d31db5ba9ffbadaba745ca738a9c7ba2
スキーマレジストリ
Apollo CLI
グローバルにインストールしても良いし、プロジェクト毎にインストールして npx 経由で利用しても良い。
code:bash
# グローバルにインストール
$ npm install -g apollo
# 動作確認
$ apollo --version
apollo/2.5.1 darwin-x64 node-v9.11.2
# プロジェクトローカルにインストール
$ npm install --save-dev apollo
# 動作確認
$ npx apollo --version
apollo/2.5.1 darwin-x64 node-v9.11.2
Schema の push
まず、以下のような .env ファイルをプロジェクトルートに配置する。
code:.env
ENGINE_API_KEY=service:app-name:xxxxxxxxxxxxxxxx
次に、同じくプロジェクトルートに、Apollo プロジェクトの設定ファイルを配置する。クライアント用とサーバ用があるが、Apollo Server を利用しているのであればサーバ用の設定ファイルをおく。このとき、スキーマ情報の取得先を リモートのエンドポイント にするか ローカルの graphql ファイル にするか選ぶことができる。 code:apollo.config.js
// リモートのエンドポイントを読み込む場合 SSL や authorization 設定はオプション
module.exports = {
service: {
endpoint: {
headers: {
authorization: 'Bearer lkjfalkfjadkfjeopknavadf',
},
skipSSLValidation: true,
},
},
};
// ローカルのファイルを読み込む場合
module.exports = {
service: {
localSchemaFile: './path/to/schema.graphql'
},
};
上記設定ファイルを用意したら、以下のコマンドでスキーマを push することができる。
code:shell
$ npx apollo service:push
✔ Loading Apollo Project
✔ Uploading service to Engine
id schema tag
────── ────────────────── ───────
b0fcc6 sample-graphql-app current
その後、スキーマを変更した場合も再度 push すれば、変更情報等が Schema Registry 上でバージョン管理される。以下は、一度 push した後に新しくフィールドを追加して再度 push した場合。何が追加/削除されたかがわかるようになっている。 https://gyazo.com/7ba08c6818004c0eca82a9caf9e05489
Apollo Server との連携
code:js
const { makeExecutableSchema } = require("graphql-tools");
const { fetchItemById, fetchItemByType } = require("./resolvers");
const { importSchema } = require("graphql-import");
const { ApolloServer } = require("apollo-server");
const typeDefs = importSchema("./schema.graphql");
const resolvers = {
Query: {
item: (root, args, context, info) => {
return fetchItemById(args.id);
},
itemByType: (root, args, context, info) => {
return fetchItemByType(args.type);
}
}
};
const schema = makeExecutableSchema({
typeDefs,
resolvers
});
const server = new ApolloServer({
schema: schema,
engine: {
apiKey: "service:sample-graphql-app:xxxxxxxxxx"
}
});
server.listen().then(({ url }) => {
console.log(🚀 Server ready at ${url});
});
レポート用のエンドポイントに直接トレースをレポートする
Apollo Engine
Explorer
https://gyazo.com/434ac29e8de2dd080429409346e49a6a
Deprecated な API が存在する場合は、それを教えてくれる。また、それが利用されてしまっている場合は、誰に、どの程度利用されているか?が見てわかるようになっている。
https://gyazo.com/e530d126b4b8a42c3f0cdfe047d10f9b
History
既述の通りなので省略
Clients
Team 以上のプランでないと利用できない。詳細は Apollo を参照。 Metrics
トップ画面では、概要として以下が確認できる
Request Rate
p95 Service Time
Error Percentage
その他、リクエスト全体の RPM、レイテンシー等がグラフで確認できる。
https://gyazo.com/d0831fde60a40efb5e7fccb20188bde2
右端のサイドバーでは、リクエストのあったクエリを任意の順でソートして表示できる (デフォルトは Total Requests)。
https://gyazo.com/4d2321f1e72ed7f42cdbfabc51c44c9a
ここから1つのクエリを選択すると、さらに Traces と Operation タブを確認できるようになる。Traces では過去のリクエストを Tracing した情報を確認できる。Apollo Tracing で確認できる情報がここで確認できると思って良さそうに見える。 https://gyazo.com/065f683f498e5ea74730e233cb3a118a
Operation ではクエリのシグネチャを確認できる。
https://gyazo.com/6fec0c0dffd2cf339021f44e61adccdb