AWS CLI を使用して API Gateway の Lambda プロキシ統合をセットアップする - Amazon API Gateway

AWS CLI を使用して API Gateway の Lambda プロキシ統合をセットアップする

このセクションでは、AWS CLI を使用して Lambda プロキシ統合で API をセットアップする方法について説明します。API Gateway コンソールを使用してプロキシリソースに Lambda プロキシ統合を設定する詳しい手順については、「チュートリアル: Lambda プロキシ統合を使用して REST API を作成する」を参照してください。

たとえば、次のサンプル Lambda 関数を API のバックエンドとして使用します。

export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };

これを API Gateway で Lambda カスタム統合を設定する の Lambdaカスタム統合のセットアップと比較すると、この Lambda 関数への入力はリクエストパラメータと本文で表現できます。クライアントが同じ入力データを渡すことができるように、自由度は高くなっています。ここで、クライアントは、クエリ文字列パラメータ、ヘッダ、または本文プロパティとして Greeter の名前を渡すことができます。この関数は、カスタムの Lambda 統合をサポートすることもできます。API のセットアップはより簡単です。メソッドレスポンスまたは統合レスポンスを設定することはありません。

AWS CLI を使用して Lambda プロキシ統合をセットアップするには
  1. create-rest-api コマンドを呼び出して API を作成します。

    aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2

    レスポンスの作成された API の id 値 (te6si5ach7) を書き留めます。

    { "name": "HelloWorldProxy (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }

    このセクションでは、API id が必要です。

  2. get-resources コマンドを呼び出して、ルートリソース id を取得します。

    aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2

    正常なレスポンスは次のように表示されます。

    { "items": [ { "path": "/", "id": "krznpq9xpg" } ] }

    ルートリソース id 値 (krznpq9xpg) を書き留めます。これは次のステップおよび後で必要になります。

  3. create-resource を呼び出して、/greeting の API Gateway リソースを作成します。

    aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part {proxy+}

    正常に終了すると、レスポンスは以下のようになります。

    { "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }

    作成された {proxy+} リソースの id 値 (2jf6xt) を書き留めます。次のステップでは、/{proxy+} リソース上にメソッドを作成する必要があります。

  4. put-method を呼び出して、ANYANY /{proxy+} メソッドリクエストを作成します。

    aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"

    正常に終了すると、レスポンスは以下のようになります。

    { "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }

    この API メソッドでは、クライアントはバックエンドの Lambda 関数からお知らせを受信または送信できます。

  5. put-integration を呼び出して、ANY /{proxy+} という名前の Lambda 関数で HelloWorld メソッドの統合をセットアップします。この関数は、"Hello, {name}!" パラメータが提供されている場合は greeter、クエリ文字列パラメータが設定されていない場合は "Hello, World!" のメッセージでリクエストに応答します。

    aws apigateway put-integration \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --type AWS_PROXY \ --integration-http-method POST \ --uri arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:HelloWorld/invocations \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
    重要

    Lambda 統合では、関数呼び出しの Lambda サービスアクションの仕様に従って、統合リクエストに POST の HTTP メソッドを使用する必要があります。apigAwsProxyRole の IAM ロールは、apigateway サービスが Lambda 関数を呼び出せるようにするポリシーが必要です。IAM 許可の詳細については、「 API を呼び出すための API Gateway アクセス許可モデル」を参照してください。

    正しい出力は次の例のようになります。

    { "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:HelloWorld/invocations", "httpMethod": "POST", "cacheNamespace": "vvom7n", "credentials": "arn:aws:iam::1234567890:role/apigAwsProxyRole", "type": "AWS_PROXY" }

    credentials の IAM ロールを指定する代わりに、add-permission コマンドを呼び出して、リソースベースのアクセス許可を追加することができます。これは、API Gateway コンソールが行うことです。

  6. create-deployment を呼び出して、API を test ステージにデプロイします。

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  7. ターミナルで次の cURL コマンドを使用して API をテストします。

    ?greeter=jane のクエリ文字列パラメータを使用して API を呼び出します。

    curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'

    greeter:jane のヘッダーパラメータを使用して API を呼び出します。

    curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'

    {"greeter":"jane"} の本文を使用して API を呼び出します。

    curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'

    すべてのケースで、出力は、次のレスポンス本文を持つ 200 レスポンスです。

    Hello, jane!