14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazon API Gateway × AWS Lambdaでサーバーレスアーキテクチャ(1)

Posted at

はじめに

仕事でAmazon API GatewayとAWS Lambdaを使って
計算用REST APIを作ることになったので、その手順をまとめます。

作るもの

一番最初はAPI Gatewayだけを使って、
POSTしたらステータスを返すだけの単純なMock用APIを作成します。
ここから順に発展させていく予定です。

手順

ざっくりした手順は以下の通りです。

  1. APIを作成する
  2. リソースを作成する
  3. メソッドを作成する
  4. APIキーを作成して認証設定を行う

1. APIを作成する

最初にAPIを作成します。
これはサービスごとに作成すると良いと思います。

  1. AWS Consoleにログインし、Amazon API Gatewayの画面を開きます。
  2. APIの作成ボタンをクリックします。

1.png
3. API名を入力して、APIの作成をクリックします。

2.png

2. リソースを作成する

次にリソースを作成します。

  1. 先ほど作成したAPIを選択し、アクションタブからリソースの作成を選択します。

3.png
2. リソース名とリソースパスを入力し、リソースの作成をクリックします。

4.png

3. メソッドを作成する

次にリソース毎にGETPOSTなどのメソッドを作成します。

  1. 先ほど作成したリソースを選択した状態で、アクションタブからメソッドの作成を選択します。

5.png
2. するとリソース名の下にドロップダウンが表示されるので、適当にHTTPメソッドを選択します。以下のような画面になると思いますので、メソッド名を選択してください。

6.png
3. とりあえずAPI Gatewayの確認をしたいので、結合タイプではMockを選択します。後でAWS Lambdaを用意したらここを変更します。

7.png
4. ここまでできたら一度動作確認してみましょう。アクションタブからAPIのデプロイを選択してください。すると以下のような画面になるので、ここで新しくステージを作成し、適当なステージ名を入力してください(ステージはプロダクションやステージングなどの環境の切り分けに使います)。その後デプロイを実行してください。

8.png
5. デプロイできたら左ペインでステージを選択し、作成したメソッドを選択しましょう。以下のようにURLが表示されると思います。

9.png
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キーで認証を行いたいと思います。

  1. 左ペインでAPIキーを選択し、アクションタブからAPIキーの作成を選択します。

10.png
2. APIキーはステージ環境と紐付ける必要があります。先ほど作成したAPIとステージを選択して追加してください。

11.png
3. 最後にリソースに戻ってメソッドを選択し、APIキーの必要性をtrueにしましょう。これで設定は終わりです。

12.png
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

14
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?