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

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を開いたら、[関数の作成] ボタンをクリックします。


a00.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関数が呼ばれて、そのリクエスト情報一式が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メソッドのエンドポイントがリクエスト受けた時、どのように処理するか設定します。

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


a05.png


統合タイプは「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」とします。

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

2. productionステージにデプロイされます。

ツリーのGETメソッドのエンドポイントを選択すると、エンドポイントのURLが表示されます。


d03.png


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

    Lambdaで設定した、Hello from Lambda!という文字列がレスポンスとして返ってきました。
このように、Node.js + Expressを使えば、簡単にREST APIを作成する事ができます。


�� まとめ

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

色々試してみてください。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)