AWS CLI를 사용하여 프라이빗 통합이 포함된 API Gateway API 설정 - Amazon API Gateway

AWS CLI를 사용하여 프라이빗 통합이 포함된 API Gateway API 설정

프라이빗 통합이 포함된 API를 생성하려면 먼저 VPC 리소스를 설정하고 Network Load Balancer를 생성하고 VPC 소스를 대상으로 구성해야 합니다. 요구 사항이 충족되지 않으면 API Gateway 프라이빗 통합을 위한 Network Load Balancer 설정에 따라 VPC 리소스를 설치하고, NLB를 생성하고, VPC 리소스를 Network Load Balancer의 대상으로 설정합니다.

참고

Network Load Balancer와 API는 동일한 AWS 계정에서 소유해야 합니다.

VpcLink를 생성하고 관리하려면 적절한 권한을 구성해야 합니다. 자세한 내용은 VPC 링크를 생성할 수 있는 권한 부여 단원을 참조하십시오.

참고

API에 VpcLink를 만들 수 있는 권한만 있으면 됩니다. VpcLink를 사용하기 위한 권한은 필요하지 않습니다.

Network Load Balancer가 생성된 후 ARN을 적어 둡니다. 이것은 프라이빗 통합을 위한 VPC 링크를 생성하는 데 필요합니다.

AWS CLI를 사용하여 프라이빗 통합이 포함된 API를 생성하려면
  1. 지정된 Network Load Balancer를 대상 지정하는 VpcLink를 생성합니다.

    aws apigateway create-vpc-link \ --name my-test-vpc-link \ --target-arns arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef

    이 명령의 출력은 요청 수신을 확인하고 생성 중인 VpcLinkPENDING 상태를 보여줍니다.

    { "status": "PENDING", "targetArns": [ "arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef" ], "id": "gim7c3", "name": "my-test-vpc-link" }

    API Gateway가 VpcLink 생성을 완료하는 데 2~4분이 걸립니다. 작업이 성공적으로 완료되면 statusAVAILABLE이 됩니다. 다음 CLI 명령을 호출하여 이를 확인할 수 있습니다.

    aws apigateway get-vpc-link --vpc-link-id gim7c3

    작업이 실패하면 오류 메시지가 포함된 FAILED와 함께 statusMessage 상태를 얻게 됩니다. 예를 들어 이미 VPC 종단점에 연결된 Network Load Balancer를 사용하여 VpcLink를 생성하려는 경우, statusMessage 속성에서 다음을 얻게 됩니다.

    "NLB is already associated with another VPC Endpoint Service"

    VpcLink가 성공적으로 생성되어야 API를 생성하고 VpcLink를 통해 VPC 리소스와 통합할 수 있습니다.

    새로 생성된 idVpcLink 값을 적어 둡니다(앞의 출력에서는 gim7c3). 프라이빗 통합을 설정하려면 이 값이 필요합니다.

  2. API Gateway RestApi 리소스를 생성하여 API를 설정합니다.

    aws apigateway create-rest-api --name 'My VPC Link Test'

    반환된 결과에서 RestApiid 값을 적어 둡니다. 이 작업은 API에 대한 추가 작업을 실행하는 데 필요합니다.

    예시를 위해 루트 리소스(GET)에 / 메서드만 있는 API를 생성해 이 메서드를 VpcLink와 통합하겠습니다.

  3. GET / 메서드를 설정합니다. 먼저 루트 리소스(/) 식별자를 가져옵니다.

    aws apigateway get-resources --rest-api-id abcdef123

    출력에서 id 경로의 / 값을 적어 둡니다. 이 예에서는 이 값이 skpp60rab7라고 가정합니다.

    API 메서드 GET /에 대한 메서드 요청을 설정합니다.

    aws apigateway put-method \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --http-method GET \ --authorization-type "NONE"

    VpcLink에 프록시 통합을 사용하지 않는 경우, 상태 코드가 200 이상인 메서드 응답도 설정해야 합니다. 여기서는 프록시 통합을 사용합니다.

  4. HTTP_PROXY 유형의 프라이빗 통합을 설정하고 다음과 같이 put-integration 명령을 호출합니다.

    aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id gim7c3

    프라이빗 통합의 경우, connection-typeVPC_LINK로 설정하고, connection-idVpcLink의 식별자 또는 VpcLink ID를 참조하는 단계 변수로 설정해야 합니다. uri 파라미터는 요청을 엔드포인트로 라우팅하는 데 사용되지 않지만 Host 헤더 설정 및 인증서 유효성 검사에 사용됩니다.

    명령은 다음 출력을 반환합니다.

    { "passthroughBehavior": "WHEN_NO_MATCH", "timeoutInMillis": 29000, "connectionId": "gim7c3", "uri": "http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com", "connectionType": "VPC_LINK", "httpMethod": "GET", "cacheNamespace": "skpp60rab7", "type": "HTTP_PROXY", "cacheKeyParameters": [] }

    통합을 생성할 때 단계 변수를 사용하여 connectionId 속성을 설정합니다.

    aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id "\${stageVariables.vpcLinkId}"

    단계 변수 표현식(${stageVariables.vpcLinkId})을 큰따옴표로 묶고 $ 문자를 이스케이프합니다.

    또는 통합을 업데이트하여 단계 변수로 connectionId 값을 재설정할 수 있습니다.

    aws apigateway update-integration \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --http-method GET \ --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'

    문자열화된 JSON 목록을 patch-operations 파라미터 값으로 사용해야 합니다.

    VpcLink의 단계 변수 값을 재설정하여 단계 변수를 통해 API를 다른 VPC 또는 Network Load Balancer와 통합할 수 있습니다.

    프라이빗 프록시 통합을 사용했기 때문에 이제 API를 배포 및 테스트 실행할 준비가 됐습니다. 비 프록시 통합의 경우, HTTP 사용자 지정 통합이 포함된 API를 설정할 때처럼 메서드 응답과 통합 응답도 설정해야 합니다.

  5. API를 테스트하려면 API를 배포하세요. 이것은 VpcLink ID의 자리 표시자로 단계 변수를 사용한 경우에 필요합니다. 단계 변수가 포함된 API를 배포하려면 다음과 같이 create-deployment 명령을 호출하세요.

    aws apigateway create-deployment \ --rest-api-id abcdef123 \ --stage-name test \ --variables vpcLinkId=gim7c3

    다른 VpcLink ID(예: asf9d7)로 단계 변수를 업데이트하라면 update-stage 명령을 호출합니다.

    aws apigateway update-stage \ --rest-api-id abcdef123 \ --stage-name test \ --patch-operations op=replace,path='/variables/vpcLinkId',value='asf9d7'

    다음 명령을 사용하여 API를 호출합니다.

    curl -X GET https://abcdef123.execute-api.us-east-2.amazonaws.com/test

    또는 API의 호출 URL을 웹 브라우저에서 입력하여 결과를 볼 수 있습니다.

    connection-id ID 리터럴로 VpcLink 속성을 하드코드하면 test-invoke-method를 호출하여 API가 배포되기 전에 API 호출을 테스트할 수도 있습니다.