はじめに
こんにちは。ジールの@________________-_です。
GCPのAPI ゲートウェイを利用する機会があったので、チュートリアルを参考に簡単なAPIを作成してみました。
APIゲートウェイとバックエンドにcloud functionsを利用しただけの単純な構成です。
普段APIを作ることが無いので、ドキドキの初めてのおつかい実装となりました。
サービスアカウントの作成
まずは、API構成に紐づけるサービスアカウントとcloud functionsに紐づけるサービスアカウントを作成します。
IAMのコンソール画面の左ペインから「サービスアカウント」を選択します。
上部の「サービスアカウントを作成」をクリックします。
API構成に紐づけるサービスアカウント名を入力して「完了」をクリックします。
今回はcloud functions関数を認証なしで実行できる様にする為、サービスアカウントに権限は付与しません。
※認証ありの場合に関しては別途記事を記載する予定です
同じ作業を繰り返し、cloud functions用のサービスアカウントも作成します。
関数から各種GCPサービスにアクセスしない為、こちらもサービスアカウントに権限付与は不要です。
cloud functionsの作成
API ゲートウェイのバックエンドとして実行する関数を作成します。
cloud functionsのコンソール画面上部の「関数の作成」をクリックします。
最初に構成を設定していきます。
「関数名」を入力して、「リージョン」を選択します。
「トリガータイプ」は「HTTP」を選択します。
「認証」は「未認証の呼び出しを許可」を選択します。
「HTTPSが必須」をチェックします。
設定が完了しましたら「保存」をクリックします。
「ランタイム、ビルド、接続、セキュリティの設定」欄を開き、「ランタイム」タブを選択します。
「ランタイム サービスアカウント」で、上記で作成したcloud functions用のサービスアカウントを選択します。
「次へ」をクリックします。
次に実行するコードを設定します。
「ランタイム」で「python3.x」を選択します。
コードはデフォルトで入力されているhello_world関数をそのまま利用します。
「デプロイ」をクリックします。
デプロイ完了後、関数が正しく動くかテストしてます。
認証無しなので誰でも実行できます。
関数のトリガーURLは、cloud functionsコンソール画面で関数名をクリック後、トリガータブを開くと記載されています。
コマンドで実行した結果「testestest」が返ってくればOKです。
curl https://region-project_name.cloudfunctions.net/helloworld?message=testestest
>>> testestest
API ゲートウェイの作成
いよいよ本命のAPIゲートウェイを作成する訳ですが、コンソールから作成する前にAPI定義を記載した構成ファイルを準備する必要があります。
構成ファイルの準備
OpenAPI仕様を使用してAPI ゲートウェイの動作を定義していきます。
そもそもOpenAPIとは???という感じなのですが、こちらの記事に詳しくまとまっておりました。先人達の記事に今日も感謝です。
分かったつもりになったところで、構成ファイルを作成していきます。
address:
の部分を上記で作成したcloud functions関数のトリガーURLに変更します。
修正後、yamlファイルとしてローカルに保存します。
ファイル名に日本語が入っていると取り込む際にエラーになるので要注意です。
# openapi2-functions.yaml
swagger: '2.0'
info:
title: hello_test
description: Sample API on API Gateway with a Google Cloud Functions backend
version: 1.0.0
schemes:
- https
produces:
- application/json
paths:
/hello/{message}:
get:
summary: echo message
operationId: hello
x-google-backend:
address: https://region-project_name.cloudfunctions.net/helloworld
path_translation: CONSTANT_ADDRESS
responses:
'200':
description: A successful response
schema:
type: string
parameters:
- name: message
in: path
required: true
type: string
description: message
※API構成の詳細説明は割愛させていただきます。
詳しく知りたい方はAPIゲートウェイ公式ドキュメントやSwagger 基本構造のサイトをご確認下さいませ。
また、google独自のOpenAPIの拡張拡張やOpenAPI 機能の制限など、APIゲートウェイでの独自拡張・制限がございますので併せてご確認下さいませ。
APIゲートウェイの作成
構成ファイルが作成できたので、いよいよAPIゲートウェイを作成していきます!
APIゲートウェイのコンソール画面に行くと、なにやらAPIの有効化が足りてない様子。
「LAUNCH」をクリックして不足したAPIを有効にします。
各種APIを有効に出来ましたら、「ゲートウェイを作成」をクリックします。
「APIを選択」は「新しいAPIの作成」を選択します。
「表示名」、「API ID」を入力します。
「構成を選択」は「新しいAPI構成の作成」を選択します。
「API仕様をアップロード」でローカルに保存したAPI構成ファイルを選択します。
「表示名」を入力します。
「サービスアカウントを選択」でAPIゲートウェイ用に作成したサービスアカウントを選択します。
「ゲートウェイの詳細 表示名」を入力して、「場所」を選択します。
設定が完了したら「ゲートウェイを作成」をクリックします。
APIゲートウェイを実行してみる
APIゲートウェイがデプロイ出来たら、コマンドで実行してみます。
「testestest」が返ってきたら成功です。
無事におつかい実装でけた!!!
curl https://xxx.an.gateway.dev/hello/testestest
>>> testestest
さいごに
構成ファイルの作成で若干躓いたりもしましたが、
そこさえ乗り越えられれば後はスムーズに出来る印象です。
少なくともチュートリアルをそのまま実装するだけであれば、問題なく実装できそうです。
今回はcloud functionsもAPIゲートウェイも認証なしで実装しましたが、
認証が必要になる場合も多々あると思います。
次回は認証ありを作成していきます。
参照
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください: