Edited at

Serverless Frameworkを試してみる(Line Message API + API Gateway + Lambda + Google Cloud Vision API編)

More than 1 year has passed since last update.


はじめに

前回、Lambda + API GatewayでAPIをサクッと作れることが分かったので、

このままLine Message APIから、API Gatewayを呼び出してみよう!

ついでに、Google Cloud Visionで画像解析の結果を取得して返してみよう!

ってことで、いろいろまとめてみました。

Line Message APIにはSDK、

Google Cloud Vision APIにはClient

が用意されており、意外と簡単に作れちゃいます。

botのソースコードについてはgithub上を参照してください。


試してみる


LINEアカウントの準備

まずLINE Business CenterのDeveloper Trialよりアカウントを作成。

アカウントが作成できると、アカウントリストに「LINE@ Developer」が作成されるので、「LINE@ MANAGER」へアクセス。

「アカウント設定」→「Bot設定」より「APIを利用する」を押下。

下記、Bot設定を行い、保存。

- Webhook送信:利用する

- 自動応答メッセージ:利用しない

こんな感じですね。

スクリーンショット 2016-11-08 8.11.57.png


Google Cloud Vision APIの準備

何はともあれGoogleのアカウントが必要です。

Googleアカウントを作成後、Google Cloud Platformにログインします。

なお、Google Cloud Visionは無料枠があるものの、課金を有効にしないと利用できないので、クレジットカードを登録する必要があります。

なので、その辺りの設定を行ってください。

設定が終わったら、新しいプロジェクトを作成します。

スクリーンショット 2016-12-27 8.24.23.png

プロジェクト名は適当な感じで作成。

スクリーンショット 2016-12-27 8.24.55.png

google APIを利用する枠を押下。

スクリーンショット 2016-12-27 8.25.23.png

「APIを有効にする」を押下します。

スクリーンショット 2016-12-27 8.25.42.png

すると、APIを検索する画面に遷移しますので、「Cloud Vision」と入力し、「Google Cloud Vision API」のリンクを押下。

スクリーンショット 2016-12-27 8.26.08.png

「有効にする」を押下します。

スクリーンショット 2016-12-27 8.26.23.png

楽だけど、長い。。。

次に認証情報を作成します。

左メニューの「認証情報」を押下し、「認証情報を作成」ボタンを押下します。

スクリーンショット 2016-12-27 8.36.19.png

すると、何種類か出てくるのですが、今回は「Google Cloud API向け」と書かれてる「サービス アカウント キー」を選択します。

取り急ぎサービスアカウントキーは初めからある「Compute Engine default service account」を選択し、キーのタイプはJSONで作成します。

スクリーンショット 2016-12-27 8.43.35.png

すると、作成されたキーファイルがダウンロードされます。

こちらは、後ほどGoogleのSDKから利用しますので、とっておいてください。


Line Message API用のWebhook URLのendpointの作成


環境


  • Serverless:1.4.0

  • Python:2.7.11

  • pip:9.0.1


手順

今回、新たにプロジェクトを作成します。今回もpythonで作成します。

$ serverless create --template aws-python --path detectImage-linebot-service

$ cd detectImage-linebot-service

line-bot用のSDKとGoogleAPIのクライアントをvendor配下にインストール。


requirements.txt

line-bot-sdk>=1.0.2

google-api-python-client>=1.5.0

$ pip install -r requirements.txt -t vendor

endpointをcallbackという名前で用意.


serverless.yml

provider:

name: aws
runtime: python2.7
region: ap-northeast-1
custom:
stage: "${opt:stage, self:provider.stage}"

functions:
callback:
handler: handler.callback
events:
- http:
path: callback
method: post
environment: ${file(env-${self:custom.stage}.yml)}

plugins:
- serverless-offline


env-**.ymlには各自のキーを環境変数として登録します。1


env-dev.yml

LINE_CHANNEL_SECRET: "XXX"

LINE_CHANNEL_ACCESS_TOKEN: "XXX"
GOOGLE_APPLICATION_CREDENTIALS: "ダウンロードしたサービスアカウントキーのファイルパス"

あとは、Line Message APIからのリクエストを受け、

Google Cloud Vision APIにリクエストして、

そのレスポンスを解析して、

Line Message API経由で返す

ようにプログラミングして、デプロイ。

デプロイ結果のendpoints「https://XXXXXXXXXX.execute-api.XXX.amazonaws.com/dev/callback」を

LINE Developersの「Webhook URL」に設定してあげればOK。

あっという間に、Lineから画像認識してくれるbotの出来上がりです。


所感

LINE BOT API Trialの頃よりも、ドキュメントやSDKが整備されていて、かなりLine botの作成は簡単になっていると感じました。

また、Google Cloud Vision APIもサービスアカウントキーのパスさえ環境変数に設定しておけば、Client側で勝手によしなにやってくれ、手間いらず。

以前よりも簡単にMyBotが作れ、各サービスとの連携もし易くなっていますので、皆さんも是非お試しください。