API Gateway에서 Lambda 사용자 지정 통합 설정 - Amazon API Gateway

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

API Gateway에서 Lambda 사용자 지정 통합 설정

Lambda 사용자 지정 통합을 설정하는 방법을 보여주기 위해 API Gateway API를 생성하여 Lambda 함수를 호출할 GET /greeting?greeter={name} 메서드를 공개합니다. 다음 예시 Lambda 함수 중 하나를 API에 사용하십시오.

다음 예시 Lambda 함수 중 하나를 사용하십시오.

Node.js
export const handler = function(event, context, callback) { var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; if (event.greeter==null) { callback(new Error('Missing the required greeter parameter.')); } else if (event.greeter === "") { res.body = "Hello, World"; callback(null, res); } else { res.body = "Hello, " + event.greeter +"!"; callback(null, res); } };
Python
import json def lambda_handler(event, context): print(event) res = { "statusCode": 200, "headers": { "Content-Type": "*/*" } } if event['greeter'] == "": res['body'] = "Hello, World" elif (event['greeter']): res['body'] = "Hello, " + event['greeter'] + "!" else: raise Exception('Missing the required greeter parameter.') return res

이 함수는 "Hello, {name}!" 파라미터 값이 비어 있지 않은 문자열인 경우 greeter이라는 메시지로 응답합니다. "Hello, World!" 값이 빈 문자열이면 greeter라는 메시지를 반환합니다. 수신 요청에 greeter 파라미터가 설정되지 않은 경우 함수는 "Missing the required greeter parameter."라는 오류 메시지를 반환합니다. 이 함수의 이름을 HelloWorld로 지정합니다.

Lambda 콘솔에서 또는 AWS CLI를 사용하여 이를 생성할 수 있습니다. 이 단원에서는 다음 ARN을 사용하여 이 함수를 참조합니다.

arn:aws:lambda:us-east-1:123456789012:function:HelloWorld

백엔드에 설정된 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": "HelloWorld (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 greeting

    성공적인 응답은 다음과 같습니다.

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

    greeting 리소스의 id 값(2jf6xt)을 기록해 둡니다. 다음 단계에서 /greeting 리소스에 메서드를 생성하려면 이 값이 필요합니다.

  4. put-method를 호출하여 GET /greeting?greeter={name}의 API 메서드 요청을 생성합니다.

    aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=false

    성공적인 응답은 다음과 같습니다.

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.querystring.greeter": false } }

    이 API 메서드를 통해 클라이언트는 백엔드에서 Lambda 함수의 인사를 수신할 수 있습니다. greeter 파라미터는 선택 사항인데, 그 이유는 백엔드가 익명 호출자 또는 자기 동일 호출자를 처리해야 하기 때문입니다.

  5. 다음과 같이 put-method-response 함수를 호출하여 200 OK의 메서드 요청에 GET /greeting?greeter={name} 응답을 설정합니다.

    aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200

  6. put-integration을 호출하여 GET /greeting?greeter={name}라는 Lambda 함수로 HelloWorld 메서드의 통합을 설정합니다. 이 함수는 "Hello, {name}!" 파라미터가 제공되면 greeter이라는 메시지로, 쿼리 문자열 파라미터가 설정되어 있지 않으면 "Hello, World!"라는 메시지로 요청에 응답합니다.

    aws apigateway put-integration \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --type AWS \ --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations \ --request-templates '{"application/json":"{\"greeter\":\"$input.params('greeter')\"}"}' \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole

    여기에 제공된 매핑 템플릿은 greeter 쿼리 문자열 파라미터를 JSON 페이로드의 greeter 속성으로 변환합니다. 이것이 필요한 이유는 Lambda 함수에 대한 입력은 본문에 표시되어야 하기 때문입니다.

    중요

    Lambda 통합의 경우에는 함수 호출을 위한 Lambda 서비스 작업의 사양에 따라 통합 요청에 대해 POST의 HTTP 메서드를 사용해야 합니다. uri 파라미터는 함수 호출 작업의 ARN입니다.

    성공적인 출력 결과는 다음과 같습니다.

    { "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations", "httpMethod": "POST", "requestTemplates": { "application/json": "{\"greeter\":\"$input.params('greeter')\"}" }, "cacheNamespace": "krznpq9xpg", "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole", "type": "AWS" }

    apigAwsProxyRole의 IAM 역할에는 apigateway 서비스가 Lambda 함수를 호출하도록 허용하는 정책이 있어야 합니다. credentials에 IAM 역할을 제공하는 대신 add-permission 명령을 호출하여 리소스 기반 권한을 추가할 수 있습니다. API Gateway 콘솔은 이 방식으로 권한을 추가합니다.

  7. put-integration-response를 호출하여 통합 응답을 설정함으로써 클라이언트에게 Lambda 함수 출력을 200 OK 메서드 응답으로 전달합니다.

    aws apigateway put-integration-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 \ --selection-pattern ""

    빈 문자열에 선택 패턴을 설정하면 200 OK 응답이 기본값입니다.

    올바른 응답은 다음과 유사합니다.

    { "selectionPattern": "", "statusCode": "200" }
  8. 다음과 같이 create-deployment를 호출하여 API를 test 단계에 배포합니다.

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  9. 터미널에서 다음 cURL 명령을 사용하여 API를 테스트합니다.

    curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=me' \ -H 'authorization: AWS4-HMAC-SHA256 Credential={access_key}/20171020/us-west-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=f327...5751'