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!