Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

求人
Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

Amazon API Gatewayの使い方についてです。

「新しいAPIの作成」画面でAPI名を入力し、「APIの作成」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

リソースの作成

次にリソースの作成を行います。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

リソース名を適当に入力します。これがURLの一部になります。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「リソースの作成」をクリックすると、リソースが作成されます。

メソッドの作成

次にそのリソースに対してメソッドを作成します。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「メソッドの作成」を押下すると、コンボボックスがでてきますので、ここでは「GET」を指定します。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「GET」の右側にあるチェックを押すと確定されます。

AWS GatewayからLambda関数を呼び出してみます。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

Lambdaリージョンを指定し、Lambda関数は適当に作ったgetgetgetという関数を指定し、「保存」を押します。以下のように権限を与える旨のメッセージがでますので「OK」を押します。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

ちなみにgetgetgetは以下になります。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

テストを実行する

これでAPI GatewayからLambdaを呼び出すことができるようになりました。

実際にテストをしてみます。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「テスト」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

この画面で「テスト」をクリックすると、右側に結果が表示されます。

URLクエリ文字列パラメータをLambda関数に渡す

API Gatewayでクエリ文字列パラメータを定義します。「メソッドリクエスト」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「クエリ文字列の追加」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

以下のように入力できるようになるので、ここでは「ID」と入力します。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

右側のチェックをクリックすれば確定です。

つぎに「統合リクエスト」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

「本文マッピングテンプレート」を開き、「マッピングテンプレートの追加」をクリックします。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

Content-Typeは、「application/json」にします。すると、以下の画面が表示されます。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

入力欄に、以下のように記述します。

IDがAPI Gatewayから渡される値で、XXはevent.XXというようにLambda関数でアクセスすることができます。

実際にテストしてみます。IDにはオブジェクトを渡します。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

Lambda関数では、event.XXを返しているだけです。結果は以下のようになります。

Amazon API Gatewayの使い方とクエリ文字列パラメータの渡し方

Lambdaプロキシの統合の使用

「統合リクエスト」をクリックすると、「Lambdaプロキシの統合の使用」があるので、チェックをします。

これにチェックを入れると、「統合レスポンス」の設定ができなくなります。

また、Lambda関数の戻り値は以下の形式で返す必要があります。

body部は、オブジェクトではなく文字列でないといけないので注意です。

・statusCode,headers,bodyは必須になる(bodyは文字列)

また、event.XXでアクセス出来ていたクエリ文字列が、以下のように「queryStringParameters」を追加する必要があります。

参考サイト

Lambdaプロキシの統合の使用にチェックを入れてPOSTでデータ送信する

今度はLambdaプロキシの統合の使用にチェックを入れてPOSTしてみます。POSTにするには、「メソッドの作成」でPOSTを選択するとPOSTになります。

「テスト」をクリックします。

クエリ文字列、ヘッダーは空のまま、リクエスト本文に以下を設定します。

以下のような感じです。

Lambda関数はシンプルにDATAの値を返しています。

POSTの際に注意しないといけないのは、オブジェクトで渡してもLambda側では文字列のオブジェクトで渡ってくるという点です。なので、JSON.parseしてあげないといけません。

API Gatewayのテストをすると結果は以下のようになります。

参考サイト

リクエストのモデルを作成する

モデルを作成することによってクエリの必須チェックなどが簡単にできるようです。

POSTのデータに対して必須チェックするのには役に立つのかもしれませんが、JSON Schemaで記述する必要があるので非常に書きづらいです。

上記の「モデル」をクリックします。「作成」ボタンがありますので押すと以下の入力画面が表示されます。

「モデルのスキーマ」欄に記述していきます。以下、IDを必須とした例です。

「モデルの作成」をクリックすると、モデルが作成されます。

このモデルを、メソッドリクエストと紐づけます。API Gatewayのメソッドを指定します。

リクエスト本文をクリックすると、以下のように「モデルなし」となっています。

「モデルの追加」をクリックします。コンテンツタイプは「application/json」、モデル名は先ほど作成したモデルがプルダウンで表示されますので、それを選択して、右側のチェックを押して設定完了です。

必須項目がnullだったりすると、以下のようにエラーで怒られます。

参考サイト

モデルでnullを許容する

“ID”: { “type”: “string” }

上記のように記述すると、nullを指定するとInvalid request bodyエラーとなります。

stringもしくはnullを許容したい場合は以下のように配列で[“string”, “null”]というように記述する必要があります。

Cognitoで保護したAPI GatewayをPOSTMANでテストする

POSTMANのAuthorization Typeを「No Auth」にします。

API Gatewayの使い方とクエリ文字列パラメータの渡し方

ヘッダに「Authorization」があるので、このValueに認証トークンを貼り付けます。※console.logなどから取得してください。。

API Gatewayの使い方とクエリ文字列パラメータの渡し方

これでCognitoで保護されたAPI GatewayもPOSTMANからテストすることができます。

関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
Python3.6,Djangoを勉強中です,Javaは少し飽きてしまってます–;
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA