Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
158
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

API Gateway + LambdaでREST API開発を体験しよう [10分で完成編]

🔷 はじめに

今回は、AWSのAPI GatewyとLambdaで、REST APIの作成を行います。
手順に沿って行うだけで、10分もかからずAPIが作成できます。

🔶 API Gatewy

https://aws.amazon.com/jp/api-gateway/
REST APIをノンコーディングで製造、管理ができるサービス。
ただし、作れるのはAPIの入り口部分までで、APIがリクエストを受けた後の具体的な処理は、別に用意する必要があります。
今回は、処理はLambda関数を使用します。

🔶 Lambda

https://aws.amazon.com/jp/lambda/
様々な言語のコードをデプロイできる実行環境。
コードは、様々なAWSプロダクトで発生したアクションをトリガーに実行する事ができます。
今回は、「API Gatewayへのリクエスト」をトリガーに、コードを実行します。

🔷 作業手順

今回は、GETメソッドのAPIを作成します。
1. Lambdaで、APIの内部処理を担当する関数を作成する。
2. API Gatewayで、REST APIを作成して、Lambda関数を繋げて、APIを完成させる。

🔶 Lambda関数の作成

まずは、以下にアクセスして、Lambda関数を作成します。
https://aws.amazon.com/jp/lambda/

1. Lambdaを開いたら、[関数の作成] ボタンをクリックします。
l00.png

2. 「一から作成」を選択します。
l01.png
⬛名前
・任意の関数名を入力します。
・今回は、「helloFunction」とします。
⬛ランタイム
・関数は様々な言語で作成できますが、今回はNode.js 8.10を選択します。

3. 続いて、今回のLambda関数の他のAWSサービスへのアクセス許可を設定します。
l02.png

と言っても、今回のLambda関数はAPI Gatewayから呼ばれる事はあっても、他のAWSサービスを呼ぶ用事は無いので、とりあえず動作logの書き込み先となる、CloudWatchというサービスにアクセスできるようにします。

⬛ロール
1つ以上のテンプレートから新しいロールを作成します。を選択します。
⬛ロール名
・任意のロール名を入力します。
・今回は、testRoleとします。
⬛ポリシーテンプレート
基本的な Lambda@Edge のアクセス権限(CloudFront トリガーの場合)を選択します。
・このテンプレートには、CloudWatchへのアクセス権限が含まれているので、今回作成したロールが付与されたサービスは、CloudWatchにログを出力できるようになります。

一通り入力したら、 [関数の作成] ボタンをクリックします。
すると、以下のようなサンプル関数が生成されます。
l03.png

今回は、このサンプルをそのまま使います。

簡単にサンプルの処理を説明すると、API Gatewayで作成したAPIがリクエストを受けると、Lambda関数が呼ばれて、そのリクエスト情報一式が1行目のeventに渡されます。
eventは今回は使わずに、APIには「"Hello from Lambda!"という文字列をレスポンスとして返すように」という指示を、処理結果として返します。

🔶 API Gatewayで、REST APIを作成

まずは、以下にアクセスして、APIを作成します。

https://aws.amazon.com/jp/api-gateway/

1. API Gatewayの設定画面を開きます。
a00.png

APIのタイプはRESTで、作成方法は新しいAPIがデフォルトで選択されているので、そのままにします。

⬛API名
・任意のAPI名を入力します。
・今回は、「hello API」とします。

入力したら、[APIの作成] ボタンをクリックします。

2. hello APIが作成されます。まずはエンドポイントを作成します。
[アクション]→[リソースの作成]をクリックします。
a01.png

リソース作成画面が表示されます。
a02.png

⬛リソース名
・任意のリソース名を入力します。
・今回は、「test」とします。
⬛API Gateway CORS を有効にする
・チェックを入れると、testリソースの作成と共に、optionメソッドのエンドポイントが作成されます。
・ブラウザからAPIを利用できるように、チェックを入れます。

入力したら、[リソースの作成] ボタンをクリックします。

3. testリソースに、GETメソッドのエンドポイントを作成します。
[アクション]→[メソッドの作成]をクリックします。
a03.png

「GET」を選択してチェックをクリックします。
a04.png

4. GETメソッドのエンドポイントがリクエスト受けた時、どのように処理するか設定します。
a05.png

他のAPIにリクエストを渡したり、モックとして固定値を返したり、色々できますが、今回はLambda関数に処理を渡しますので、統合タイプはLambda関数のままにします。

⬛Lambda プロキシ統合の使用
・チェックを入れると、このエンドポイントに対するリクエスト情報一式を、Lambdaのevent変数(後述)に渡します。
・必ずチェックを入れます。
⬛Lambda関数
・このエンドポイントに対するリクエストがあった時、呼び出すLambda関数を設定します。
・先ほど作成した、helloFunctionを設定します。

入力したら、[保存] ボタンをクリックします。

すると、以下のように「API GatewayからLambda関数を呼び出す権限を与える」旨のメッセージが表示されるので、[OK] ボタンをクリックします。
a06.png

これで、hello APIから、helloFunctionを呼び出せるようになりました。
Lambda関数の画面を開いて、以下のようにLambda関数を呼び出すトリガーとして、API Gatewayが設定されている事を確認します。
a07.png

🔶 hello APIのテスト

1. hello APIを使えるようにデプロイします。
[アクション]→[APIのデプロイ]をクリックします。
d01.png

2. どこにデプロイするか設定します。
d02.png

⬛デプロイされるステージ
・「[新しいステージ]」を設定します。
⬛ステージ名
・任意のステージ名を入力します。
・今回は、「production」とします。

入力したら、[デプロイ] ボタンをクリックします。

3. productionステージにデプロイされます。
ツリーのGETメソッドのエンドポイントを選択すると、エンドポイントのURLが表示されます。
d03.png

4. URLをクリックして、APIにリクエストを送ってみます。
d04.png

Lambdaで設定した、Hello from Lambda!という文字列がレスポンスとして返ってきました。

このように、API Gateway + Lambdaを使えば、簡単にREST APIを作成する事ができます。

🔷 まとめ

今回はLambda関数は単純な文字列を返すだけのサンプルを使いましたが、具体的な処理を実装する事で、実際に使えるAPIを簡単に作る事ができます。
色々試してみてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
158
Help us understand the problem. What are the problem?