

# VPC 링크 V1을 사용한 프라이빗 통합(레거시)
<a name="vpc-links-v1"></a>

**참고**  
프라이빗 통합의 다음 구현에서는 VPC 링크 V1을 사용합니다. VPC 링크 V1은 레거시 리소스입니다. [REST API에는 VPC 링크 V2](apigateway-vpc-links-v2.md)를 사용하는 것이 좋습니다.

프라이빗 통합을 생성하려면 먼저 Network Load Balancer를 생성해야 합니다. Network Load Balancer에는 요청을 VPC의 리소스로 라우팅하는 [리스너](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html)가 있어야 합니다. API의 가용성을 개선하려면 Network Load Balancer에서 AWS 리전의 한 개 이상의 가용 영역에 있는 리소스로 트래픽을 라우팅해야 합니다. 그런 다음 API와 Network Load Balancer를 연결하는 데 사용하는 VPC 링크를 생성합니다. VPC 링크를 생성한 후 프라이빗 통합을 생성하여 VPC 링크 및 Network Load Balancer를 통해 API에서 VPC의 리소스로 트래픽을 라우팅합니다. Network Load Balancer와 API는 동일한 AWS 계정에서 소유해야 합니다.

**Topics**
+ [API Gateway 프라이빗 통합을 위한 Network Load Balancer 설정(레거시)](set-up-nlb-for-vpclink-using-console.md)
+ [API Gateway에 VPC 링크를 생성할 수 있는 권한 부여(레거시)](grant-permissions-to-create-vpclink.md)
+ [AWS CLI를 사용하여 프라이빗 통합이 포함된 API Gateway API 설정(레거시)](set-up-api-with-vpclink-cli.md)
+ [프라이빗 통합에 사용되는 API Gateway 계정(레거시)](set-up-api-with-vpclink-accounts.md)

# API Gateway 프라이빗 통합을 위한 Network Load Balancer 설정(레거시)
<a name="set-up-nlb-for-vpclink-using-console"></a>

**참고**  
프라이빗 통합의 다음 구현에서는 VPC 링크 V1을 사용합니다. VPC 링크 V1은 레거시 리소스입니다. [REST API에는 VPC 링크 V2](apigateway-vpc-links-v2.md)를 사용하는 것이 좋습니다.

 다음 절차에서는 Amazon EC2 콘솔을 사용하여 API Gateway 프라이빗 통합을 위해 Network Load Balancer(NLB)를 설정하는 단계를 설명하고, 각 단계의 상세한 지침을 위한 참조를 제공합니다.

리소스를 보유한 각 VPC에 대해 하나의 NLB와 하나의 VPCLink만 구성하면 됩니다. NLB는 NLB당 여러 [리스너](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html)와 [대상 그룹](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html)을 지원합니다. 각 서비스를 NLB에서 특정 리스너로 구성하고 단일 VPCLink를 사용해 NLB에 연결할 수 있습니다. API Gateway에서 프라이빗 통합을 생성하는 경우, 각 서비스에 할당된 특정 포트를 사용하여 각 서비스를 정의합니다. 자세한 내용은 [자습서: 프라이빗 통합을 통해 REST API 생성](getting-started-with-private-integration.md) 섹션을 참조하세요. Network Load Balancer와 API는 동일한 AWS 계정에서 소유해야 합니다.

**API Gateway 콘솔을 사용하여 프라이빗 통합을 위한 Network Load Balancer를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. Amazon EC2 인스턴스에서 웹 서버를 설정합니다. 설정 예제는 [Amazon Linux 2에 LAMP 웹 서버 설치](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html) 섹션을 참조하세요.

1. Network Load Balancer를 생성하고 대상 그룹에 EC2 인스턴스를 등록한 다음 대상 그룹을 Network Load Balancer의 리스너에 추가합니다. 자세한 내용은 [Network Load Balancer 시작하기](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancer-getting-started.html)의 지침을 따르세요.

1. Network Load Balancer가 생성된 후 다음 작업을 수행합니다.

   1.  Network Load Balancer의 ARN을 기록해 둡니다. API를 Network Load Balancer 뒤의 VPC 리소스와 통합하기 위해 API Gateway에서 VPC 링크를 생성하려면 이 정보가 필요합니다.

   1.  PrivateLink에 대한 보안 그룹 평가를 해제합니다.
      + 콘솔을 사용하여 PrivateLink 트래픽에 대한 보안 그룹 평가를 끄려면 **보안** 탭을 선택한 다음 **편집**을 선택하면 됩니다. **보안 설정**에서 **PrivateLink 트래픽에 인바운드 규칙 적용**을 선택 해제합니다.
      + 다음 [set-security-groups](https://docs.aws.amazon.com/cli/latest/reference/elbv2/set-security-groups.html) 명령을 사용하면 PrivateLink 트래픽에 대한 보안 그룹 평가를 끌 수 있습니다.

        ```
        aws elbv2 set-security-groups --load-balancer-arn arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/net/my-loadbalancer/abc12345 \
          --security-groups sg-123345a --enforce-security-group-inbound-rules-on-private-link-traffic off
        ```

**참고**  
API Gateway CIDR은 예고 없이 변경될 수 있으므로 종속성을 추가하지 마세요.

# API Gateway에 VPC 링크를 생성할 수 있는 권한 부여(레거시)
<a name="grant-permissions-to-create-vpclink"></a>

**참고**  
프라이빗 통합의 다음 구현에서는 VPC 링크 V1을 사용합니다. VPC 링크 V1은 레거시 리소스입니다. [REST API에는 VPC 링크 V2](apigateway-vpc-links-v2.md)를 사용하는 것이 좋습니다.

본인 또는 본인 계정의 사용자가 VPC 링크를 생성 및 유지 관리하려면 VPC 엔드포인트 서비스 구성을 생성, 삭제, 확인하고, VPC 엔드포인트 서비스 권한을 변경하고, 로드 밸런서를 검사할 수 있는 권한이 있어야 합니다. 이러한 권한을 부여하려면 다음 단계를 사용하세요.

**VPC 링크를 생성, 업데이트 및 삭제할 수 있는 권한을 부여하려면**

1. 다음과 비슷한 IAM 정책을 생성합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "apigateway:POST",
                   "apigateway:GET",
                   "apigateway:PATCH",
                   "apigateway:DELETE"
               ],
               "Resource": [
                   "arn:aws:apigateway:us-east-1::/vpclinks",
                   "arn:aws:apigateway:us-east-1::/vpclinks/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "elasticloadbalancing:DescribeLoadBalancers"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateVpcEndpointServiceConfiguration",
                   "ec2:DeleteVpcEndpointServiceConfigurations",
                   "ec2:DescribeVpcEndpointServiceConfigurations",
                   "ec2:ModifyVpcEndpointServicePermissions"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   VPC 링크에 대해 태그 지정을 활성화하려면 태그 지정 작업을 허용해야 합니다. 자세한 내용은 [태그 지정 작업 허용](apigateway-tagging-iam-policy.md#allow-tagging) 섹션을 참조하세요.

1. IAM 역할을 만들거나 선택하여 앞의 정책을 이 역할에 연결합니다.

1. IAM 역할을 본인 또는 VPC 링크를 생성하는 본인 계정의 사용자에게 할당합니다.

# AWS CLI를 사용하여 프라이빗 통합이 포함된 API Gateway API 설정(레거시)
<a name="set-up-api-with-vpclink-cli"></a>

**참고**  
프라이빗 통합의 다음 구현에서는 VPC 링크 V1을 사용합니다. VPC 링크 V1은 레거시 리소스입니다. [REST API에는 VPC 링크 V2](apigateway-vpc-links-v2.md)를 사용하는 것이 좋습니다.

다음 튜토리얼에서는 AWS CLI를 사용하여 VPC 링크와 프라이빗 통합이 생성되는 방법을 보여줍니다. 다음과 같은 사전 조건을 충족해야 합니다.
+ Network Load Balancer를 생성하고 VPC 소스를 대상으로 구성해야 합니다. 자세한 내용은 [API Gateway 프라이빗 통합을 위한 Network Load Balancer 설정(레거시)](set-up-nlb-for-vpclink-using-console.md) 섹션을 참조하세요. 이는 API와 동일한 AWS 계정에 있어야 합니다. VPC 링크를 생성하려면 Network Load Balancer ARN이 필요합니다.
+ `VpcLink`를 생성하고 관리하려면 API에서 `VpcLink`를 생성할 수 있는 권한이 필요합니다. `VpcLink`를 사용하기 위한 권한은 필요하지 않습니다. 자세한 내용은 [API Gateway에 VPC 링크를 생성할 수 있는 권한 부여(레거시)](grant-permissions-to-create-vpclink.md) 섹션을 참조하세요.

**AWS CLI를 사용하여 프라이빗 통합이 포함된 API를 생성하려면**

1. 다음 [create-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-vpc-link.html) 명령을 사용하면 지정된 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
   ```

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

   ```
   {
       "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\$14분이 걸립니다. 작업이 성공적으로 완료되면 `status`는 `AVAILABLE`이 됩니다. 다음 [get-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-vpc-link.html) 명령을 사용하여 이를 확인할 수 있습니다.

   ```
   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 리소스와 통합할 수 있습니다.

   새로 생성한 `VpcLink`의 `id` 값을 기록해 둡니다. 이 예제 출력에서는 `gim7c3`입니다. 프라이빗 통합을 설정하려면 이 값이 필요합니다.

1. 다음 [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) 명령을 사용하면 API Gateway [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) 리소스를 생성할 수 있습니다.

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

   반환된 결과에서 `RestApi`의 `id` 값과 `RestApi`의 `rootResourceId` 값을 기록해 둡니다. 이 작업은 API에 대한 추가 작업을 실행하는 데 필요합니다.

   그런 다음, 루트 리소스(`GET`)에 `/` 메서드만 있는 API를 생성해 이 메서드를 `VpcLink`와 통합합니다.

1. 다음 [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) 명령을 사용하여 `GET /` 메서드를 생성합니다.

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

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

1. `GET /` 메서드를 생성한 후 통합을 설정합니다. 프라이빗 통합의 경우 `connection-id` 파라미터를 사용하여 `VpcLink` ID를 제공합니다. 스테이지 변수를 사용하거나 `VpcLink` ID를 직접 입력할 수 있습니다. `uri` 파라미터는 요청을 엔드포인트로 라우팅하는 데 사용되지 않지만 `Host` 헤더 설정 및 인증서 유효성 검사에 사용됩니다.

------
#### [ Use the VPC link ID ]

   다음 [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) 명령을 사용하여 통합에서 `VpcLink` ID를 직접 사용합니다.

   ```
   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
   ```

------
#### [ Use a stage variable ]

   다음 [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) 명령을 사용하여 스테이지 변수를 사용하여 VPC 링크 ID를 참조합니다. API를 스테이지에 배포할 때 VPC 링크 ID를 설정합니다.

   ```
   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}`)을 큰따옴표로 묶고 `$` 문자를 이스케이프합니다.

------

   또한 언제든지 통합을 업데이트하여 `connection-id`를 변경할 수 있습니다. 다음 [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html) 명령을 사용하여 통합을 업데이트합니다.

   ```
    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` 파라미터 값으로 사용해야 합니다.

   프라이빗 프록시 통합을 사용했기 때문에 이제 API를 배포 및 테스트 실행할 준비가 됐습니다.

1. 스테이지 변수를 사용하여 `connection-id`를 정의한 경우 API를 배포하여 테스트해야 합니다. 다음 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) 명령을 사용하면 스테이지 변수를 사용하여 API를 배포할 수 있습니다.

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

   다른 `VpcLink` ID(예: `asf9d7`)로 스테이지 변수를 업데이트하려면 다음 [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) 명령을 사용합니다.

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

   `VpcLink` ID 리터럴로 `connection-id` 속성을 하드코딩하면 테스트를 위해 API를 배포하지 않아도 됩니다. [test-invoke-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) 명령을 사용하여 API를 배포하기 전에 테스트할 수 있습니다.

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

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

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

# 프라이빗 통합에 사용되는 API Gateway 계정(레거시)
<a name="set-up-api-with-vpclink-accounts"></a>

다음 리전별 API Gateway 계정 ID는 `AllowedPrincipals`을 생성할 때 `VpcLink`로 VPC 종단점 서비스에 자동으로 추가됩니다 .


| **리전** | **계정 ID**\$1 | 
| --- | --- | 
| us-east-1 | 392220576650 | 
| us-east-2 | 718770453195 | 
| us-west-1 | 968246515281 | 
| us-west-2 | 109351309407 | 
| ca-central-1 | 796887884028 | 
| eu-west-1 | 631144002099 | 
| eu-west-2 | 544388816663 | 
| eu-west-3 | 061510835048 | 
| eu-central-1 | 474240146802 | 
| eu-central-2 | 166639821150 | 
| eu-north-1 | 394634713161 | 
| eu-south-1 | 753362059629 | 
| eu-south-2 | 359345898052 | 
| ap-northeast-1 | 969236854626 | 
| ap-northeast-2 | 020402002396 | 
| ap-northeast-3 | 360671645888 | 
| ap-southeast-1 | 195145609632 | 
| ap-southeast-2 | 798376113853 | 
| ap-southeast-3 | 652364314486 | 
| ap-southeast-4 | 849137399833 | 
| ap-south-1 | 507069717855 | 
| ap-south-2 | 644042651268 | 
| ap-east-1 | 174803364771 | 
| sa-east-1 | 287228555773 | 
| me-south-1 | 855739686837 | 
| me-central-1 | 614065512851 | 