search
LoginSignup
0

posted at

updated at

Organization

【GCP】初めてのAPIゲートウェイ

はじめに

こんにちは。ジールの@________________-_です。
GCPのAPI ゲートウェイを利用する機会があったので、チュートリアルを参考に簡単なAPIを作成してみました。
APIゲートウェイとバックエンドにcloud functionsを利用しただけの単純な構成です。
普段APIを作ることが無いので、ドキドキの初めてのおつかい実装となりました。

サービスアカウントの作成

まずは、API構成に紐づけるサービスアカウントとcloud functionsに紐づけるサービスアカウントを作成します。

IAMのコンソール画面の左ペインから「サービスアカウント」を選択します。
上部の「サービスアカウントを作成」をクリックします。
image.png
API構成に紐づけるサービスアカウント名を入力して「完了」をクリックします。
今回はcloud functions関数を認証なしで実行できる様にする為、サービスアカウントに権限は付与しません。
※認証ありの場合に関しては別途記事を記載する予定です
image.png
同じ作業を繰り返し、cloud functions用のサービスアカウントも作成します。
関数から各種GCPサービスにアクセスしない為、こちらもサービスアカウントに権限付与は不要です。

cloud functionsの作成

API ゲートウェイのバックエンドとして実行する関数を作成します。

cloud functionsのコンソール画面上部の「関数の作成」をクリックします。
最初に構成を設定していきます。
「関数名」を入力して、「リージョン」を選択します。
「トリガータイプ」は「HTTP」を選択します。
「認証」は「未認証の呼び出しを許可」を選択します。
「HTTPSが必須」をチェックします。
設定が完了しましたら「保存」をクリックします。
image.png
「ランタイム、ビルド、接続、セキュリティの設定」欄を開き、「ランタイム」タブを選択します。
「ランタイム サービスアカウント」で、上記で作成したcloud functions用のサービスアカウントを選択します。
「次へ」をクリックします。
image.png
次に実行するコードを設定します。
「ランタイム」で「python3.x」を選択します。
コードはデフォルトで入力されているhello_world関数をそのまま利用します。
「デプロイ」をクリックします。
image.png

デプロイ完了後、関数が正しく動くかテストしてます。
認証無しなので誰でも実行できます。
関数のトリガーURLは、cloud functionsコンソール画面で関数名をクリック後、トリガータブを開くと記載されています。
image.png
コマンドで実行した結果「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
# 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を有効にします。

image.png

image.png

各種APIを有効に出来ましたら、「ゲートウェイを作成」をクリックします。
「APIを選択」は「新しいAPIの作成」を選択します。
「表示名」、「API ID」を入力します。
「構成を選択」は「新しいAPI構成の作成」を選択します。
「API仕様をアップロード」でローカルに保存したAPI構成ファイルを選択します。
「表示名」を入力します。
「サービスアカウントを選択」でAPIゲートウェイ用に作成したサービスアカウントを選択します。
「ゲートウェイの詳細 表示名」を入力して、「場所」を選択します。
設定が完了したら「ゲートウェイを作成」をクリックします。

image.png

APIゲートウェイを実行してみる

APIゲートウェイがデプロイ出来たら、コマンドで実行してみます。
testestest」が返ってきたら成功です。
無事におつかい実装でけた!!!

 curl https://xxx.an.gateway.dev/hello/testestest
>>> testestest

さいごに

構成ファイルの作成で若干躓いたりもしましたが、
そこさえ乗り越えられれば後はスムーズに出来る印象です。
少なくともチュートリアルをそのまま実装するだけであれば、問題なく実装できそうです。
今回はcloud functionsもAPIゲートウェイも認証なしで実装しましたが、
認証が必要になる場合も多々あると思います。
次回は認証ありを作成していきます。

参照

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0