views4GCPのストレージサービスについてまとめてみた。Endpointsとは何か、どんな場合に活用できるのか、それを使うとどんなメリットがあるのかについて解説します。実際のソースコードを使って認証機能を持ったAPIを構築する例をご紹介します。Endpointsを使ったAPI構築から活用までの流れを把握することができます。Endpointsについての記事です。Pythonにも対応していますが、本稿ではそれらについては言及しません。Platform(GCP)のサービスの1つで、API管理のための機能を提供します。Endpointsの主な機能は3つです。認証(APIキー、JWT)モニタリング(メトリクス分析、ロギング)共有APIドキュメントAPIのリクエストやレスポンスの仕様(ルール)を定義し、それをデプロイすることでその仕様を実際のAPIに適用することができます。Endpointsがルールを元にリクエストをチェックし、リクエストを通すかどうかを判断します。Endpointsは複数のコンポーネントの集まりとして構成されています。APIルールをデプロイ・管理するツールやサービス、リクエストを監視するリバースプロキシです。これらを操作することによってAPIに上記の3つの機能を付加することができます。EndpointsのユースケースAPIを外部に公開するAPIを外部に公開する場合、認証機能をAPIに付与することで、APIにアクセスするユーザーを識別することができ、悪意のあるユーザーからのリクエストを遮断できます。認証方法はAPIキーかOAuth2のどちらか、もしくは両方を選択することができます。マイクロサービスを使ったアプリケーションを構築するマイクロサービスを構築する際、それぞれのマイクロサービスにサービスアカウントキーを持たせることでマイクロサービスとAPI間の通信に認証機能を付加することができます。することでAPIを利用するマイクロサービスを限定することができ、セキュリティが向上します。EndpointsはOpenAPI仕様に対応しています。OpenAPIはコードベースのAPI定義フォーマットです。コードベースなのでGitで管理することが可能です。OpenAPIではAPI定義ファイルからドキュメントを自動生成することができますので、別途APIドキュメントを作る手間が省けます。APIの管理・デプロイが簡単APIルールは1つの定義ファイルの中で管理されているので、それを編集することによりAPIの追加や削除は簡単に行えます。APIキーやOAuthなどのセキュリティルールの定義を一度行えば、ルールを全APIに適用したり、一部のAPIのみに適用するといった設定も簡単に行えます。作成したAPIルールはコマンド一回でデプロイすることができます。EndpointsにはAPIモニタリング用の画面が用意されており、そこで個々のAPIの利用状況をモニタリングしたり、ログを見ることができます。これを活用することで、デバッグやAPI開発のヒントを得ることができます。Endpointsの仕組みについてはこちらが詳しいです。本稿では仕組みについては詳しく触れません。Endpointsの全体像を掴んでもらいたいと思います。構築の手順は以下の通りです。SDKでデプロイする上記の手順を行うと以下のようなアーキテクチャが構築できます。クライアントはプロジェクトに割り当てられたAPIキーをあらかじめ持っておき、それをAPIのリクエストに含めることでAPIへのアクセスが可能となります。逆に、APIキーをリクエストに含めない場合はエラーになります。EndpointsのサービスとKubernetes(k8s)のサービスの2種類があります。それぞれを区別するために便宜上「EPサービス」「K8sサービス」と記載します。Registryにアップロードするデフォルトのプロジェクトを設定します。[PROJECT_ID]はご自身のプロジェクトIDに置き換えてください。[PROJECT_ID]以降も度々[PROJECT_ID]が登場しますが、それらも全て置き換えてください。以下のファイルを作り同じディレクトリに配置します。World」とプレーンテキストを返すだけの単純なものです。["./app"]コンテナイメージをビルドします。Registryにプッシュします。EngineでバックエンドAPIのクラスタを構築するKubernetesの構成ファイルを用意します。今回は以下の構成ファイルを使います。8080GKEクラスタを作成します。--preemptible構成ファイルをクラスタにデプロイします。backend.yamlEPサービスをデプロイするOpenAPI定義ファイルを用意します。今回は以下の定義ファイルを使います。queryhostはEndpointsにデプロイされるEPサービスの一意な名前です。"sample-api.endpoints.[PROJECT_ID].cloud.goog"x-google-endpointsは任意のドメインを使用してAPIにアクセスしたい場合に記述します。nameは所有しているドメイン(.endpoints.[PROJECT_ID].cloud.googドメインは自由に使うことができます)、targetはバックエンドのIPアドレスを記載します。今回はGKEにデプロイしたk8sサービスの外部IPアドレスを使用します。"[BACKEND_IP]"K8sサービスの外部IPアドレスを確認します。1dk8sサービスのEXTERNAL-IPの値をコピーし、openapi.yamlのファイルの[BACKEND_IP]の値と置き換えます。securityDefinitionsにはAPIのセキュリティルールを記載します。以下の場合、APIキーをクエリ文字列のkeyの値にセットしてリクエストを送信しなければならないというルールを定義しています。queryこのルールをAPIに適用するには、APIのメソッド直下にsecurityプロパティを追加し、定義した認証ルールの名前を記載します。[]OpenAPI定義ファイルをデプロイします。openapi.yamlこれで手順は全て完了です。試しに構築したAPIを使って、APIキーを使った場合と使わなかった場合の動作比較をしてみたいと思います。Consoleにアクセスし、サービスメニューから「APIとサービス」→「認証情報」のページへ移動します。認証情報のページに移動したら、「認証情報を作成」→「APIキー」の順にクリックし、生成されたAPIキーをクリップボードにコピーします。]}APIキーをクエリに含めなかった場合、APIの呼び出しに失敗しました。APIのドキュメントを見るデプロイしたAPI定義ファイルからドキュメントを自動生成してプロジェクトで共有することができます。Consoleから「エンドポイント」→「デベロッパーポータル」にアクセスし、サービスリストからEPサービスを選択します。API」でAPIを試しに実行することもできます。Consoleから「エンドポイント」→「サービス」へアクセスします。APIリストの各行にある「ログを表示」ボタンをクリックすると、各APIのログを見ることができます。まとめいかがでしたでしょうか。Endpointsを使うとAPIの管理が簡単にできることがお分かりいただけたと思います。個人的には、APIのドキュメントを自動で作成してくれるデベロッパーポータルが特に魅力的でした。これを使えば、APIのドキュメントを別途Gitなどで管理する必要が無くなり、属人化が発生しにくくなります。使いこなすには少し知識が必要ですが、一度使いこなすととても便利なツールです。Endpointsを試してみてはいかがでしょうか。