使用設定API閘道的 Lambda 代理伺服器整合 AWS CLI - Amazon API 网关

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用設定API閘道的 Lambda 代理伺服器整合 AWS CLI

在本節中,我們將示範 API Lambda 何使用 AWS CLI. 如需使用API閘道主控台設定具有 Lambda Proxy 整合的代理資源的詳細指示,請參閱教學課程:使RESTAPI用 Lambda 代理整合建立

舉例來說,我們使用下列 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); };

將此值與中的 Lambda 自訂整合設定相比在API閘道中設定 Lambda 自訂整合,對此 Lambda 函數的輸入可以在請求參數和內文中表示。您可以有更多的自由,讓用戶端傳遞相同的輸入資料。在這裡,用戶端可以傳入接待員名稱以做為查詢字串參數、標頭或內文屬性。此函數也可以支援 Lambda 自訂整合。設API置更簡單。您根本不需要設定方法回應或整合回應。

若要使用設定 Lambda 代理伺服器整合 AWS CLI
  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 }

    您需要APIid整個本節。

  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以創建以下內容的API網關資源/greeting

    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 來建立 ANY 方法請求 ANY /{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 來設定具有 Lambda 函數 (即 ANY /{proxy+}) 之 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 整合,您必須根據 L ambda 服務動作的規格,POST針對函數叫用使用的HTTP方法來處理整合請求。的IAM角色apigAwsProxyRole必須具有允許apigateway服務叫用 Lambda 函數的政策。如需有關IAM權限的詳細資訊,請參閱 API呼叫的閘道權限模型 API

    成功輸出類似如下:

    { "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" }

    您可以呼叫 add 權限命令來新增以資源為基礎的權限 credentials,而不是提供的IAM角色。這就是API閘道主控台的作用。

  6. 呼叫create-deployment部署API到test階段:

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  7. 在終端機中API使用以下 c URL 命令進行測試。

    API使用下列項目的查詢字串參數呼叫?greeter=jane

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

    API使用以下標題參數調用greeter:jane

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

    調API用一個身體{"greeter":"jane"}

    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!