皆さん、こんにちわ。
hidesanです。
今回は、AWSサービスを使って簡単なWebAPIを作ってみたいと思います。
APIにも様々なものがありますが、その中でもWebAPIというのはHTTPプロトコルを利用したAPIです。
HTTPによって呼び出されて結果を返すというシンプルな仕組みのため、「手軽に使える」「汎用性がある」というメリットがあります。
最近のWebサービスは、このWebAPIが備わっていることがほとんど当たり前となっています。
今回はこんなWebAPIをAWSサービスを使ってお手軽に作成してみたいと思います。
どのようなものを作るの?
特定のURLをブラウザで叩いたら、現在の時刻を表示してくれる単純なものを作ります。
コードの言語はPython3.6となります。
機能としてはめっちゃショボい代物ですが、基本的なWebAPIのため、中身を作り込膨らますことで、ある程度のWebAPIは作ることが可能となります。
仕組みの全体概要
API GatewayでHTTPリクエストをキャッチし、そのリクエストに紐づいたLambda関数をキックします。
キックされたLambdaは、現在時刻を文字列でAPI Gatewayへ戻し、API Gatewayはリクエストの結果として現在時刻文字列を返します。
WebAPIの作り方
今回はCloud9を使ってLambdaを作成していきたいと思います。
Cloud9を利用すると、開発環境を構築せずに済みますから、開発までの準備が非常に楽になりオススメです。
また自動的にAPI Gatewayも設定してくれますので、楽チンです。
※Cloud9を利用することで、自動的にCloudFormationのスタックが作成されます。API GatewayやLambdaは、このCloudFormationのスタックの一部として作成されることとなります。
(1)Cloud9を立ち上げます
(2)右側から[λ+]をクリックします
(3)”Function name”欄に任意の名前を入力して、[Next]をクリックします
(4)”Select rumtime”欄で”Python 3.6″を選択、”empty-python”を選択して[Next]をクリックします
(5)”Function trigger”欄を”API Gateway”にします。
こうすることで、後に紹介するAPI Gateway側の設定を簡略化することになります。
“Resource Path”は”testapi”、”Security”は”NONE”を設定し、[Next]をクリックします。
(6)”Memory”欄、”Role”欄はデフォルト設定のまま[Next]をクリックします
(7)[Finish]をクリックします
(8)次のコードをcloud9に記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from datetime import datetime def lambda_handler(event, context): d_now = datetime.now() str_now = d_now.strftime('%Y-%m-%d %H:%M:%S') response = { "statusCode": 200, "body": str_now, }; return response |
(9)テストしてみます。[Run]→[Run]をクリックするとテストが実行され、Responseとして現在時刻(UTC)が表示されました。
(10)作成したLambda関数を本番環境へデプロイします。
作成したLambdaを右クリックし、[Deploy]をクリックします。
(11)API Gateway コンソール画面を開きます
(12)作成された[cloud9-TestFunc]をクリックします
(13)[ステージ]→[▼]→[GET]をクリックし、”URLの呼び出し”欄にあるリンクをクリックしてみましょう
はい。この通り。
現在時刻(UTC)がブラウザに表示されましたね。
いかがでしたでしょうか?
結構簡単にWebAPIを実装することができましたね。
しかも、サーバーレスでの実装となります。
(Cloud9についてはサーバー有りですが・・・)
これを元にして、様々なWebAPIを試しに作成してみてはいかがでしょうか?
以上、hidesanでした!