

# Lambda용 인바운드 인터페이스 VPC 엔드포인트 연결
<a name="configuration-vpc-endpoints"></a>

Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 AWS 리소스를 호스팅하는 경우, VPC와 Lambda 간에 연결을 설정할 수 있습니다. 이 연결을 사용하여 공용 인터넷을 통과하지 않고 Lambda 함수를 간접 호출할 수 있습니다.

VPC와 Lambda 간에 프라이빗 연결을 설정하려면 [인터페이스 VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html)를 생성합니다. 인터페이스 엔드포인트는 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결 없이 비공개로 Lambda API에 액세스할 수 있도록 지원하는 [AWS PrivateLink](https://aws.amazon.com/privatelink)에 의해 구동됩니다. VPC의 인스턴스는 Lambda API와 통신하는 데 퍼블릭 IP 주소가 필요하지 않습니다. VPC와 Lambda 간의 트래픽은 AWS 네트워크를 벗어나지 않습니다.

각 인터페이스 엔드포인트는 서브넷에서 하나 이상의 [탄력적 네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)로 표현됩니다. 네트워크 인터페이스는 트래픽에 대한 진입점 역할을 하는 프라이빗 IP 주소를 Lambda에 제공합니다.

**Topics**
+ [Lambda 인터페이스 엔드포인트의 고려 사항](#vpc-endpoint-considerations)
+ [Lambda에 대한 인터페이스 엔드포인트 생성](#vpc-endpoint-create)
+ [Lambda에 대한 인터페이스 엔드포인트 정책 생성](#vpc-endpoint-policy)

## Lambda 인터페이스 엔드포인트의 고려 사항
<a name="vpc-endpoint-considerations"></a>

Lambda에 대한 인터페이스 엔드포인트를 설정하기 전에 *Amazon VPC 사용 설명서*에서 [인터페이스 엔드포인트 속성 및 제한 사항](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)을 검토해야 합니다.

VPC에서 모든 Lambda API 작업을 호출할 수 있습니다. 예를 들어 VPC 내에서 `Invoke` API를 간접 호출하여 Lambda 함수를 간접 호출할 수 있습니다. Lambda API의 전체 목록은 Lambda API 참조의 [작업](https://docs.aws.amazon.com/lambda/latest/dg/API_Operations.html)을 참조하세요.

`use1-az3`은 Lambda VPC 함수를 위한 제한된 용량 리전입니다. 이 가용 영역의 서브넷을 Lambda 함수와 함께 사용해서는 안 됩니다. 이렇게 하면 운영 중단 시 영역 중복성이 감소할 수 있기 때문입니다.

### 지속적인 연결을 위한 연결 유지
<a name="vpc-endpoint-considerations-keepalive"></a>

Lambda는 시간이 지남에 따라 유휴 연결을 제거하므로 지속적인 연결을 유지하려면 연결 유지 지시문을 사용해야 합니다. 함수를 호출할 때 유휴 연결을 재사용하려고 하면 연결 오류가 발생합니다. 지속적인 연결을 유지하려면 런타임과 관련된 연결 유지 지시문을 사용하세요. 예를 들어 *AWS SDK for JavaScript 개발자 안내서*의 [Node.js에서 연결 유지로 연결 재사용](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html)을 참조하세요.

### 청구 고려 사항
<a name="vpc-endpoint-considerations-billing"></a>

인터페이스 엔드포인트를 통해 Lambda 함수에 액세스하는 데는 추가 비용이 발생하지 않습니다. Lambda 요금에 대한 자세한 내용은 [AWS Lambda 요금](https://aws.amazon.com/lambda/pricing/)을 참조하세요.

AWS PrivateLink의 표준 요금이 Lambda의 인터페이스 엔드포인트에 적용됩니다. 각 가용 영역에서 인터페이스 엔드포인트가 프로비저닝된 각 시간과 인터페이스 엔드포인트를 통해 처리된 데이터에 대해 AWS 계정에 요금이 청구됩니다. 인터페이스 엔드포인트 요금에 대한 자세한 내용은 [AWS PrivateLink 요금](https://aws.amazon.com/privatelink/pricing/)을 참조하세요.

### VPC 피어링 고려 사항
<a name="vpc-endpoint-considerations-peering"></a>

[VPC 피어링](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)을 사용하여 인터페이스 엔드포인트가 있는 VPC에 다른 VPC를 연결할 수 있습니다. VPC 피어링은 두 VPC 간의 네트워킹 연결입니다. 사용자의 자체 두 VPC 간에 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 설정할 수 있습니다. VPC는 두 개의 서로 다른 AWS 리전에 있을 수도 있습니다.

피어링된 VPC 간의 트래픽은 AWS 네트워크에 유지되며 공용 인터넷을 통과하지 않습니다. VPC가 피어링되면 두 VPC의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, Amazon Relational Database Service(Amazon RDS) 인스턴스 또는 VPC 지원 Lambda 함수와 같은 리소스는 VPC 중 하나에서 생성된 인터페이스 엔드포인트를 통해 Lambda API에 액세스할 수 있습니다.

## Lambda에 대한 인터페이스 엔드포인트 생성
<a name="vpc-endpoint-create"></a>

Amazon VPC 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Lambda에 대한 인터페이스 엔드포인트를 생성할 수 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)을 참조하세요.

**Lambda에 대한 인터페이스 엔드포인트를 생성하려면(콘솔)**

1. Amazon VPC 콘솔의[ 엔드포인트 페이지](https://console.aws.amazon.com/vpc/home?#Endpoints)를 엽니다.

1. **엔드포인트 생성**을 선택합니다.

1. **서비스 카테고리**에서 **AWS 서비스**가 선택되어 있는지 확인하세요.

1. **서비스 이름**에 **com.amazonaws.*region*.lambda**를 선택합니다. **유형**이 **인터페이스**인지 확인합니다.

1. VPC와 서브넷을 선택합니다.

1. 인터페이스 엔드포인트에 대한 프라이빗 DNS를 활성화하려면 **DNS 이름 활성화** 확인란을 선택합니다. AWS 서비스용 VPC 엔드포인트에 프라이빗 DNS 이름을 사용하는 것이 좋습니다. 이렇게 하면 AWS SDK를 통해 이루어진 요청과 같이 퍼블릭 서비스 엔드포인트를 사용하는 요청이 VPC 엔드포인트로 확인됩니다.

1. **보안 그룹**에서 하나 이상의 보안 그룹을 선택합니다.

1. **Create endpoint**(엔드포인트 생성)을 선택합니다.

프라이빗 DNS 옵션을 사용하려면 VPC의 `enableDnsHostnames` 및 `enableDnsSupportattributes`를 설정해야 합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC에 대한 DNS 지원 보기 및 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)를 참조하세요. 인터페이스 엔드포인트에 프라이빗 DNS를 사용하도록 설정하는 경우, 리전에 대한 기본 DNS 이름(예: `lambda.us-east-1.amazonaws.com`)을 사용하여 Lambda에 API 요청을 할 수 있습니다. 서비스 엔드포인트에 대한 자세한 내용은 *AWS 일반 참조*의 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하세요.

자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 엔드포인트를 통해 서비스 액세스](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#access-service-though-endpoint)를 참조하세요.

CloudFormation을 사용하여 엔드포인트를 생성하고 구성하는 방법에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [AWS::EC2::VPCEndpoint](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html) 리소스를 참조하세요.

**Lambda에 대한 인터페이스 엔드포인트를 생성하려면(AWS CLI)**  
[create-vpc-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-vpc-endpoint.html) 명령을 사용하여 엔드포인트 네트워크 인터페이스와 연결할 VPC ID, VPC 엔드포인트 유형(인터페이스), 서비스 이름, 엔드포인트를 사용할 서브넷 및 보안 그룹을 지정합니다. 예제:

```
aws ec2 create-vpc-endpoint 
  --vpc-id vpc-ec43eb89
  --vpc-endpoint-type Interface
  --service-name com.amazonaws.us-east-1.lambda
  --subnet-id subnet-abababab
  --security-group-id sg-1a2b3c4d
```

## Lambda에 대한 인터페이스 엔드포인트 정책 생성
<a name="vpc-endpoint-policy"></a>

인터페이스 엔드포인트를 사용할 수 있는 사용자와 사용자가 액세스할 수 있는 Lambda 함수를 제어하기 위해 엔드포인트에 엔드포인트 정책을 연결할 수 있습니다. 이 정책은 다음 정보를 지정합니다.
+ 작업을 수행할 수 있는 보안 주체.
+ 보안 주체가 수행할 수 있는 작업입니다.
+ 보안 주체가 작업을 수행할 수 있는 리소스입니다.

자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

**예: Lambda 작업에 대한 인터페이스 엔드포인트 정책**  
다음은 Lambda에 대한 엔드포인트 정책의 예입니다. 엔드포인트에 연결된 경우 이 정책을 통해 사용자 `MyUser`가 `my-function` 함수를 간접 호출할 수 있습니다.

**참고**  
리소스에 정규화된 함수 ARN과 정규화되지 않은 함수 ARN을 모두 포함해야 합니다.

```
{
   "Statement":[
      {
         "Principal":
         { 
             "AWS": "arn:aws:iam::111122223333:user/MyUser" 
         },
         "Effect":"Allow",
         "Action":[
            "lambda:InvokeFunction"
         ],
         "Resource": [
               "arn:aws:lambda:us-east-2:123456789012:function:my-function",
               "arn:aws:lambda:us-east-2:123456789012:function:my-function:*"
            ]
      }
   ]
}
```