#この記事の概要
AWS API Gatewayでリクエスト受けてLambdaを実行するという記事は結構あるのですが、逆にLambdaから他の外部APIを叩くのにサンプルがほしかったのでLabmda & Python 3.8(&標準ライブラリ)からWrikeのAPIを叩いてみました。
bearerトークンが使えるAPIが公開されているWeb serviceなら他のサービスでも流用できると思います。
#本記事の投稿者
Python&Lambda初心者(両方とも初めて書いてみた)のでとりあえず動けばいいというレベルです。
#大まかな手順
Wrikeで永続トークンを生成し、LabmdaでPythonの関数つくって実行。
#Wrike公式APIリファレンス(英語)
https://developers.wrike.com/
#永続アクセストークンの取得
こちらの記事参照
https://note.com/katoiek/n/nf7342fd84add
#AWS Lambdaで関数の作成
今回は1から関数を作るのでAWSコンソールからLabmdaのコンソールへ移動し、新規作成をクリックし、一から作成を選択。
アクセスロールは下記の2個を選択したものを作成もしくは既存のものを使用。1つ目はLabmdaへのアクセス、2つ目はCloud watchへのアクセス(ログ出力など)らしいです。
関数を作成したらタイムアウト3秒だと足りないので60秒くらいにします。
コードをクリックして下記のコードを入力します。
import json
import urllib.request
from pprint import pprint
permanent_token='ここに永続トークンを入力します'
url = 'https://www.wrike.com/api/v4/tasks'
header ={ 'Authorization': 'bearer '+ permanent_token}
#HTTP methodはすべて大文字 GET, POST, PUT, DELETE
method = 'GET'
def lambda_handler(event, context):
req=urllib.request.Request(url, headers=header,method=method)
with urllib.request.urlopen(req) as res:
# resは http.client.HTTPResponse
body = json.loads(res.read().decode('utf8')) # レスポンスボディ
headers = res.getheaders() # ヘッダー(dict)
status = res.getcode() # ステータスコード
pprint(header)
pprint(status)
pprint(body)
永続トークンのところは書き換えてください。
#Lambdaからの実行
Deployし、Testをクリック。
イベント名を入力(必須ですが、名前は任意)単純にGetを叩くだけなのでデータをすべて削除して作成をクリック。
再度Testをクリックすると実行されます。
こんな感じでレスポンスがあればOKです。
今回はシンプルにGetでデータをクエリを行いましたが、Jsonをパースしたりキャストしたりして他のSAASのAPI経由で連携といったこともできると思います。
Cronのように定期的にトリガーを引きたい場合はEventBridgeをトリガーに設定することでスケジューリングなどができます。
Lambdaは無料枠もかなり大きいですしサーバーレスの名の通り実行環境を構築しなくていいという点でAPIの運用にも便利な環境と思います。