Chapter12 Hands-on #6 : Bashoutter’

今回使用するhandsonフォルダーは以下のコマンドより、ローカルにダウンロードしたものを使用する。

まず,以下のコマンドを実行する。

# handsonフォルダーをローカルにダウンロードする
$ git clone https://github.com/tomomano/learn-aws-by-coding-source-code.git

# プロジェクトのディレクトリに移動
$ cd learn-aws-by-coding-source-code/handson/bashoutter

# venvを作成し,依存ライブラリのダウンロードを行う
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt

# デプロイを実行
$ cdk deploy

AWSコンソールからデプロイ済みのエンドポイントの一覧が確認できる。

さらにAPIをクリックし以下のページに移る。 すると,それぞれのメソッドの詳細を見ることができる。

さらにS3のコンソール画面に移ると,Bucketsの「bashouter-」で始まるランダムな名前のバケットが見つかる。

バケットの中身も見ることができる。 index.hemlやcss/,js/などのディレクトリがある。 これらは,ウェブページの枠を定義している静的コンテンツである。

APIリクエストを送信する

 これより,デプロイしたアプリケーションに対し,実際にAPIリクエストを送信してみる。以下のコマンドを実行して,先程デプロイを実行したときに得られたAPIのエンドポイントのURL(Bashoutter.BashoutterApiEndpoint = XXXX)をコマンドラインの変数に設定しておく。

$ export ENDPOINT_URL=XXXX

 次に,俳句の一覧を取得するために,GET/haikuAPIを送信してみる。

$ http GET "{ENDPOINT_URL}/haiku"

 現時点では,まだ誰も俳句を投稿していないので,空の配列([])が返ってくる。

俳句の投稿,GETリクエス

 次に,POST/haikuを使って俳句を投稿してみよう。

$ http POST "${ENDPOINT_URL}/haiku" \
username="松尾芭蕉" \
first="閑さや" \
second="岩にしみ入る" \
third="蝉の声"

 投稿されれば,以下のような表示が出る

 ここで,再びGETリクエストを送信してみる。先程作成した俳句が投稿されていることが確認できる。

いいねの追加

 次に,以下のコマンドより”PATCH /haiku/{item_id}”を呼ぶことでこの俳句にいいねを追加してみる。XXXXは,先程GETリクエストを送信した際に表示された,”item_id”を代入する。

$ http PATCH "${ENDPOINT_URL}/haiku/"XXXX

 実行結果

 ここで再びGETリクエストを送信してみる。

 ”like”が1増えたことが確認できる。

俳句の削除

 最後に,以下のコマンドよりDELETEリクエストを送ることで俳句の削除を行ってみる。(XXXXはitem_idの値)

$ http DELETE "${ENDPOINT_URL}/haiku/XXXX"

 実行結果

 また,GETリクエストを送信してみると返り値が空([])になっていることが確認できる。

大量のAPIリクエストをシミュレートする

 SNSのように多数のユーザーガイルのような状況では,1秒間に数千件以上の投稿がなされている。そこで,以下のコマンドを実行することでテストとして,APIを300回実行してみる。

$ python client.py $ENDPOINT_URL post_many 300

 実行結果

 先程のようなコマンドにより,大量の俳句を投稿するとデータベースに無駄なデータが大量に溜まっていってしまう。
 以下のコマンドを実行することで,データベースを完全に空にできる。

$ python client.py $ENDPOINT_URL clear_database

 実行結果

Bashoutter GUIを動かしてみる

 今までは,コマンドラインからAPIを送信していた。ウェブアプリケーションでは,これと同じことがウェブブラウザの背後で行われ,ページのコンテンツが表示されている。
 この章の最後にAPIGUIの結合されるとどうなるか確認を行う。
 ”Bashoutter.BucketUrl=XXXX”で得られたURL(XXXXの部分)をウェブで検索してみる。すると,以下のような画面が出る。

 ここで,俳句を投稿してみる

 そして,GETリクエストを送信して投稿されたことを確認する

アプリケーションの削除

 以下のコマンドを実行して,スタックを削除して終了。

$ cdk destroy