2018年11月30日金曜日
AWSLambdaとServerlessを使ってみる[第2回]
こんにちは、シタテルエンジニアの工です!
AWSLambdaとServerless第2回に入っていきます!
前回は、AWSLambdaとserverlessについてさらっと確認して
serverlessでServiceをcreateするところまでをやってきました。
AWSLambdaとServerlessを使ってみる[第1回]|sitateru tech blog
今回は実際にSansan OpenAPIを利用して名刺情報を取得してみます 🚀
SansanAPI
公式ドキュメント Sansan Open API
名刺API 名刺Set取得(期間指定)
を使ってみます。
SansanAPIを利用するにはAPI Keyが必要です。
取得方法はこちらを参考にしてください。
作る
前回createしたServiceを利用して作っていきます。
現在この2ファイルが作成されている状態です。
- serverless.yml
- 各種設定を書いていきます
- handler.js
- 処理を書いていきます
axiosインストール
今回は、httpリクエストにaxiosを使用します。
$ npm install axios
インストールされました
.
├── handler.js
├── node_modules
│ ├── axios
├── package-lock.json
└── serverless.yml
serverless.yml
環境変数の設定
lambdaには環境変数を設定することができます。
SansanAPIKeyを環境変数として設定してみます。
serverless.yml
# you can define service wide environment variables here
environment:
SANSAN_API_KEY: xxx
環境変数を利用する場合は、このように取得できます。
process.env.SANSAN_API_KEY
handler.js
それでは処理を書いていきます。
lambdaの非同期処理とcallbackについてはこちらを参考にしてください。
名刺情報はお見せできないので、取得した件数を出力してみます。
'use strict';
const axios = require('axios')
axios.defaults.headers.common['X-Sansan-Api-Key'] = process.env.SANSAN_API_KEY
axios.defaults.headers.get['Content-Type'] = 'application/json'
module.exports.hello = async (event, context, callback) => {
var updatedFrom = "2018-11-26T01:00:00Z"
var updatedTo = "2018-11-27T21:00:00Z"
await axios.get(`https://api.sansan.com/v2.0/bizCards?updatedTo=${updatedTo}&range=all&entryStatus=completed`)
.then(function (response) {
callback(null, response.data.data.length)
})
.catch(function (error) {
callback(error)
});
};
deploy
cliでdeployします。
serverlessを使わない場合、serviceを手動でzipにしてawsにdeployする必要があるのでとても面倒です...
$ serverless deploy -v
deployが完了したら情報が出力されます。
...
Serverless: Stack update finished...
Service Information
service: hello-sansan
stage: dev
region: us-east-1
stack: hello-sansan-dev
api keys:
None
endpoints:
None
functions:
hello: hello-sansan-dev-hello
lambdaの関数のところにも表示されています。
環境変数も設定されています。
実行
こちらもcliで実行します。
$ sls invoke -f hello
16
件数が取得できました。
おわりに
今回はlambdaからSansanOpenAPIを利用して名刺情報をゲットしてみました!
lambdaはサーバーのこと気にせずに処理だけ書けば良く、serverlessはcliでごにょごにょできるし、とても便利です!
sitateruではlambdaを使って、SansanとHubSpotの同期を自動化しています。
どこかのタイミング第3回としてserverless-offlineを使用したlambdaの開発についても書こうと思います。