はじめに
仕事でAmazon API GatewayとAWS Lambdaを使って
計算用REST APIを作ることになったので、その手順をまとめます。
作るもの
一番最初はAPI Gatewayだけを使って、
POST
したらステータスを返すだけの単純なMock用APIを作成します。
ここから順に発展させていく予定です。
手順
ざっくりした手順は以下の通りです。
- APIを作成する
- リソースを作成する
- メソッドを作成する
- APIキーを作成して認証設定を行う
1. APIを作成する
最初にAPIを作成します。
これはサービスごとに作成すると良いと思います。
- AWS Consoleにログインし、Amazon API Gatewayの画面を開きます。
- APIの作成ボタンをクリックします。
2. リソースを作成する
次にリソースを作成します。
- 先ほど作成したAPIを選択し、アクションタブからリソースの作成を選択します。
2. リソース名とリソースパスを入力し、リソースの作成をクリックします。
3. メソッドを作成する
次にリソース毎にGET
やPOST
などのメソッドを作成します。
- 先ほど作成したリソースを選択した状態で、アクションタブからメソッドの作成を選択します。
2. するとリソース名の下にドロップダウンが表示されるので、適当にHTTPメソッドを選択します。以下のような画面になると思いますので、メソッド名を選択してください。
3. とりあえずAPI Gatewayの確認をしたいので、結合タイプではMockを選択します。後でAWS Lambdaを用意したらここを変更します。
4. ここまでできたら一度動作確認してみましょう。アクションタブからAPIのデプロイを選択してください。すると以下のような画面になるので、ここで新しくステージを作成し、適当なステージ名を入力してください(ステージはプロダクションやステージングなどの環境の切り分けに使います)。その後デプロイを実行してください。
5. デプロイできたら左ペインでステージを選択し、作成したメソッドを選択しましょう。以下のようにURLが表示されると思います。
6. curl
で以下のようなコマンドを叩いてみましょう。ステータス200 OK
が返ってくればOKです。
$ curl -v https://abcdefghij.execute-api.ap-northeast-1.amazonaws.com/test/test \
% -d "" -H "Content-Type: application/json"
...
< HTTP/1.1 200 OK
< Content-Type: application/json
< Content-Length: 0
< Connection: keep-alive
...
4. APIキーを作成して認証設定を行う
このままだとセキュリティがザルなので、せめてAPIキーで認証を行いたいと思います。
- 左ペインでAPIキーを選択し、アクションタブからAPIキーの作成を選択します。
2. APIキーはステージ環境と紐付ける必要があります。先ほど作成したAPIとステージを選択して追加してください。
3. 最後にリソースに戻ってメソッドを選択し、APIキーの必要性をtrueにしましょう。これで設定は終わりです。
4. APIキーでバリデーションできているか確認しましょう。APIキーなしで叩いてみると、403
が返ってきて、ありだと正しく200
が返ってくるのが確認できます。
$ curl -v https://abcdefghij.execute-api.ap-northeast-1.amazonaws.com/test/test \
% -d "" -H "Content-Type: application/json"
...
< HTTP/1.1 403 Forbidden
< Content-Type: application/json
< Content-Length: 24
< Connection: keep-alive
...
{"message": "Forbidden"}%
$ curl -v https://abcdefghij.execute-api.ap-northeast-1.amazonaws.com/test/test \
% -d "" -H "Content-Type: application/json" \
% --header "x-api-key:abcdefghijklmnopqrstuvwxyzabcdefghijklmn"
...
< HTTP/1.1 200 OK
< Content-Type: application/json
< Content-Length: 0
< Connection: keep-alive
...
おわりに
今回は、API GatewayでMock APIを作成しました。
次は簡単なLambda Functionを用意して、API Gatewayと繋いでみます。
おまけ
Qiitaとは別で個人の技術ブログも書いてるので、良かったら見てください!
Yosuke Saito's Blog