チュートリアル: Lambda プロキシ統合を使用して REST API を作成する
Lambda プロキシ統合は、軽量で柔軟な API Gateway API 統合タイプであり、これを使用すると、API メソッドまたは API 全体を Lambda 関数と統合できます。Lambda 関数は、Lambda がサポートする任意の言語で記述できます。これはプロキシ統合であるため、API を再デプロイする必要がなく、いつでも Lambda 関数の実装を変更できます。
このチュートリアルでは、以下の作業を行います。
-
「Hello, World!」 Lambda 関数を API のバックエンドにします。
-
「Hello, World!」 Lambda プロキシ統合による API。
「Hello, World!」 Lambda 関数
「Hello, World!」を作成するには Lambda コンソールで Lambda 関数を作成します。
Lambda コンソール (https://console.aws.amazon.com/lambda/
) にサインインします。 -
AWS ナビゲーションバーで、AWS リージョンを選択します。
注記
Lambda 関数を作成したリージョンを書き留めます。これは、API を作成するときに必要になります。
-
ナビゲーションペインで、[関数] を選択します。
-
[関数の作成] を選択します。
-
Author from scratch を選択します。
-
[基本的な情報] で、以下の作業を行います。
-
[関数名] に
GetStartedLambdaProxyIntegration
と入力します。 -
[ランタイム] で、サポートされている最新の Node.js または Python ランタイムのいずれかを選択します。
[アーキテクチャ] は、デフォルト設定のままにします。
-
[Permissions] (許可) で、[Change default execution role] (デフォルトの実行ロールの変更) を展開します。[実行ロール]] ドロップダウンリストで、[AWS ポリシーテンプレートから新しいロールを作成] を選択します。
-
[ロール名] に
GetStartedLambdaBasicExecutionRole
と入力します。 -
[Policy templates] フィールドは空白のままにします。
-
[関数の作成] を選択します。
-
-
インラインコードエディタの [Function code (関数コード)] に、以下のコードをコピーして貼り付けます。
-
[デプロイ] を選択します。
「Hello, World!」 API
ここで、「Hello, World!」に API を作成します。API Gateway コンソールを使用して Lambda 関数を実行します。
「Hello, World!」を作成するには API
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
API Gateway を初めて使用する場合は、サービスの特徴を紹介するページが表示されます。[REST API] で、[構築] を選択します。[Create Example API (サンプル API の作成)] がポップアップ表示されたら、[OK] を選択します。
API Gateway を使用するのが初めてではない場合、[Create API] (API を作成)を選択します。[REST API] で、[構築] を選択します。
[API 名] に「
LambdaProxyAPI
」と入力します。(オプション) [説明] に説明を入力します。
[API エンドポイントタイプ] を [リージョン別] に設定したままにします。
API の作成 を選択します。
API を作成したら、リソースを作成します。通常、API リソースはアプリケーションロジックに従ってリソースツリーに整理されます。この例では、/helloworld リソースを作成します。
リソースを作成するには
[リソースの作成] を選択します。
[プロキシのリソース] はオフのままにします。
[リソースパス] は
/
のままにします。[リソース名] に「
helloworld
」と入力します。[CORS (Cross Origin Resource Sharing)] はオフのままにします。
[リソースの作成] を選択します。
プロキシ統合では、任意の HTTP メソッドを表すすべての ANY
メソッドをキャッチオールがらリクエスト全体がそのままバックエンド Lambda 関数に送信されます。実際の HTTP メソッドは、実行時にクライアントによって指定されます。ANY
メソッドでは、単一の API メソッドのセットアップを DELETE
、GET
、HEAD
、OPTIONS
、PATCH
、POST
および PUT
のサポートされるすべての HTTP メソッドに使用できます。
ANY
メソッドを作成するには
/helloworld リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] で、[ANY] を選択します。
[統合タイプ] で、[Lambda 関数] を選択します。
[Lambda プロキシ統合]を有効にします。
[Lambda 関数] で、Lambda 関数を作成した AWS リージョンを選択し、関数名を入力します。
-
29 秒のデフォルトのタイムアウト値を使用するには、[デフォルトタイムアウト] をオンのままにします。カスタムのタイムアウトを設定するには、[デフォルトタイムアウト] を選択してから、タイムアウト値を
50
~29000
ミリ秒の間で入力します。 [メソッドの作成] を選択します。
API をデプロイしてテストする
API をデプロイするには
[API のデプロイ] を選択します。
[ステージ] で [新規ステージ] を選択します。
[Stage name (ステージ名)] に
test
と入力します。(オプション) [説明] に説明を入力します。
[デプロイ] を選択します。
[ステージの詳細] で、コピーアイコンを選択して API の呼び出し URL をコピーします。
ブラウザと cURL を使用して Lambda プロキシ統合で API をテストする
API をテストするためにブラウザまたは cURL
クエリ文字列パラメータのみを使用して GET
リクエストをテストする場合は、API の helloworld
リソースの URL をブラウザのアドレスバーに入力できます。
API の helloworld
リソースの URL を作成するには、リソース helloworld
とクエリ文字列パラメータ ?greeter=John
を呼び出し URL に追加します。URL は次のようになります。
https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld?greeter=John
それ以外のメソッドの場合は、POSTMAN
cURL を使用してデプロイした API をテストするには
-
ターミナルウィンドウを開きます。
-
次の cURL コマンドをコピーしてターミナルウィンドウに貼り付け、呼び出し URL を前のステップでコピーした URL に置き換えて、URL の末尾に
/helloworld
を追加します。注記
Windows でコマンドを実行している場合は、代わりに次の構文を使用してください。
curl -v -X POST "https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"?greeter=John
のクエリ文字列パラメータを使用して API を呼び出すにはcurl -X GET 'https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld?greeter=John'greeter:John
のヘッダーパラメータを使用して API を呼び出すにはcurl -X GET https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'{"greeter":"John"}
の本文を使用して API を呼び出すにはcurl -X POST https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -d '{ "greeter": "John" }'
すべてのケースで、出力は、次のレスポンス本文を持つ 200 レスポンスです。
Hello, John!