LoginSignup
1

More than 5 years have passed since last update.

SwaggerでLambdaのデバッグ環境を作る(6):GCPのCloud Endpointsをデバッグする

Last updated at Posted at 2019-02-16

第1回投稿で、SwaggerでLambdaのデバッグ環境を作りました。

 SwaggerでLambdaのデバッグ環境を作る(1)

今回は、Google Cloud Platform(以降GCP)のCloudEndpointsをデバッグします。
GCPへの設定は、以下に書いてある手順に従って進めます。

 https://cloud.google.com/endpoints/docs/openapi/get-started-app-engine?hl=ja

ですが、GCPのCloudEndpointsをデバッグするのではなく、Swagger定義ファイルを使って動作していたLambdaのNode.jsのコードを、CloudEndpointsに移設するイメージです。

CloudEndpointsは、Swagger定義ファイル(別名OpenAPI)に基づいて動作します。
したがって、これまでSwagger定義ファイルに基づくRESTfulサーバがあるのであれば、(実行環境に依存した処理がなければ)そのまま移設することができるわけです。

今回は、GCPのCloudEndpointsの実装として、App EngineのNode.jsを選択しました。もし、GCPのCompute Engineで構築したい場合は、以下を参考にしてください。

AWS Cognitoで認証しないと呼び出せない何かのサーバを作る

RESTfulサーバで動作するアプリを用意する

ぜひ、今までの記事を参考にRESTfulサーバで動作するアプリを作成してください。
特に、Node.js使いの方は、Swagger-nodeという素晴らしいツールがありますので、苦も無くRESTfulサーバを構築できるかと思います。

 SwaggerでLambdaのデバッグ環境を作る(1)
 SwaggerでLambdaのデバッグ環境を作る(2):Helperライブラリを使ったLambdaの書き方

GCPのプロジェクトを作成する。

まずは、以下のWebページから、プロジェクトを作成しましょう。すでに作ってある場合はそれを使います。

Google Cloud Console
 https://console.cloud.google.com/?hl=ja

プロジェクト名は適当ですが、たとえば、「TestProject」としました。

image.png

Google Cloud SDKのインストールやアプリの作成など、もろもろの準備が必要でして、以下のページの「始める前に」の作業はあらかじめ済ませておいてください。(手抜きですみません)
 https://cloud.google.com/endpoints/docs/openapi/get-started-app-engine?hl=ja

途中、regionが聞かれますが、asia-northeast1 を選択しましょう。

Swagger定義ファイルをGCPの環境に合わせる

これからが本番です。
ローカルのRESTful環境でアプリのデバッグが終わっている想定です。
GCPのCloud Endpointsにデプロイするために、Swagger定義ファイルを編集する必要があります。具体的には、host:の部分です。
こんな感じに変更します。

 host: "【プロジェクトID】.appspot.com"

修正はそれだけです。
デプロイしましょう。

gcloud endpoints services deploy api\swagger\swagger.yaml

以下のような表示が出れば、成功とのことです。

Service Configuration [2019-02-16r0] uploaded for service [【プロジェクトID】.appspot.com]

次に、「app.yaml」ファイルを作成します。Swaggerプロジェクトフォルダのルートに置きます。

app.yaml
# Copyright 2015-2016, Google, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

runtime: nodejs
env: flex

# [START configuration]
endpoints_api_service:
  # The following values are to be replaced by information from the output of
  # 'gcloud endpoints services deploy openapi-appengine.yaml' command.
  name: 【プロジェクトID】.appspot.com
  rollout_strategy: managed
# [END configuration]

【プロジェクトID】の部分を環境に合わせて変更してください。
修正はこれだけです。

実装の方は、適当で構わないのですが、シンプルに以下で作ってみました。

api\swagger\swagger.yaml
・・・
  /test-get:
    get:
      x-swagger-router-controller: routing
      operationId: test-get
      responses:
        200:
          description: Success
          schema:
            $ref: "#/definitions/CommonResponse"
・・・
api\controllers\routing.js
・・・
const func_table = {
//  "test-func" : require('./test_func').handler,
//  "test-dialogflow" : require('./test_dialogflow').fulfillment,
"test-get" : require('./test-get').handler,
};
・・・
api\controllers\test-get\index.js
'use strict';

const HELPER_BASE = process.env.HELPER_BASE || '../../helpers/';
const Response = require(HELPER_BASE + 'response');
const Redirect = require(HELPER_BASE + 'redirect');

exports.handler = async (event, context, callback) => {
    console.log(event.queryStringParameters);
    return new Response({ message: process.env.MESSAGE });
};
.env
MESSAGE="Good Morning"

/test-getにGETでアクセスすると、.envに書いたメッセージがJSON文字列で返ってくる、という単純なものです。

早速、デプロイを始めましょう。
デプロイによって、アプリの実装がGCPのCloud Endpointsにアップロードされます。

gcloud app deploy

途中、continueしますか?と聞かれますが、当然y(Yes)を入力します。
数分かかります。(これを繰り返したくなければ、しっかりローカルのデバッグ環境でデバッグしておきましょう!)

以下のようなメッセージが表示されて、デプロイが完了です。
 Setting traffic split for service [default]...done.

本当にデプロイができたのか、以下のURLをブラウザからたたいてみましょう

https://【プロジェクトID】.appspot.com/test-get

こんな感じで結果が返ってきましたでしょうか?

image.png

ちなみに、以下を入力すると、console.log出力していたデバッグメッセージが表示されます。(ちょっと反応は遅いですが)

gcloud app logs tail -s default

以上

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
  3. You can use dark theme
What you can do with signing up
1