네트워킹
런타임에 네트워크 커넥터 리소스를 AWS Lambda MicroVM과 연결하여 MicroVM에 대한 네트워크 액세스를 구성합니다. 네트워크 커넥터는 run-microvm 직접 호출 시 지정되며 MicroVM 실행 중에는 변경할 수 없습니다.
개요
각 MicroVM에는 독립적인 수신(인바운드) 및 송신(아웃바운드) 네트워크 구성이 있을 수 있습니다.
-
수신 네트워크 커넥터는 인바운드 연결을 활성화합니다. 클라이언트는 서비스 관리형 HTTPS 엔드포인트에 연결되고, Lambda는 MicroVM 내에서 구성하는 포트로 트래픽을 전달합니다. 수신 커넥터는 AWS 관리형이므로 MicroVM을 실행할 때 ARN으로 참조합니다.
-
송신 네트워크 커넥터는 아웃바운드 트래픽을 활성화합니다. 기본적으로 MicroVM은 퍼블릭 인터넷에 액세스할 수 있습니다. 대신 고객 관리형 VPC 송신 커넥터를 생성하여 VPC를 통해 아웃바운드 트래픽을 라우팅할 수 있습니다.
하나의 커넥터를 여러 MicroVM에서 재사용할 수 있습니다. 이것이 의도된 사용 패턴입니다.
인바운드 연결
run-microvm을 직접적으로 호출할 때 할당되는 고유한 HTTPS 엔드포인트 URL을 통해 각 Lambda MicroVM에 연결할 수 있습니다. 클라이언트는 HTTPS를 통해 이 엔드포인트로 요청을 보냅니다. Lambda는 각 요청을 MicroVM 내부의 포트로 라우팅하고, 애플리케이션은 해당 포트에서 요청을 수신합니다.
기본적으로 엔드포인트에서 수신된 요청은 MicroVM 내의 포트 8080으로 라우팅됩니다. 다른 포트로 라우팅하려면 포트 라우팅 섹션을 참조하세요.
인바운드 엔드포인트에서는 다음 프로토콜이 지원됩니다.
-
HTTP/1.1
-
HTTP/2
-
WebSocket
-
gRPC
-
서버 전송 이벤트(SSE)
참고
클라이언트와 MicroVM 엔드포인트 간의 트래픽은 항상 TLS로 암호화됩니다. 애플리케이션은 내부적으로 HTTP 또는 HTTPS를 통해 요청을 처리할 수 있습니다.
포트 라우팅
Lambda는 다음 우선순위에 따라 MicroVM 내의 대상 포트를 선택합니다.
-
X-aws-proxy-port헤더 - 표준 HTTP 요청의 경우 대상 포트 번호와 함께 이 헤더를 포함합니다. -
WebSocket 하위 프로토콜 - WebSocket 클라이언트가 사용자 지정 헤더를 설정할 수 없는 경우 대상 포트를
lambda-microvms.port.이라는 하위 프로토콜로 지정합니다. 여기서NN은 포트 번호입니다. WebSocket 연결을 열 때 하위 프로토콜을 제공합니다. 문제 해결 예는 프로토콜을(를) 참조하세요. -
기본값(8080) - 둘 다 지정되지 않은 경우 포트 8080으로 요청이 라우팅됩니다.
중요
대상 포트는 인증 토큰에 정의된 allowedPorts 내에 있어야 합니다. 승인되지 않은 포트에 대한 요청은 403 금지됨 응답을 수신합니다.
Authentication
MicroVM 엔드포인트에 대한 모든 요청에는 X-aws-proxy-auth 헤더에 유효한 인증 토큰이 필요합니다. create-microvm-auth-token을 사용하여 토큰을 생성합니다. 각 토큰은 다음 범위의 암호화된 JWE(JSON Web Encryption) 문자열입니다.
-
특정 MicroVM(ID로 식별됨)
-
허용된 포트 세트(단일 포트, 범위 또는 모든 포트)
-
만료 시간(토큰 생성 시 구성됨)
다음 예제에서는 토큰을 생성하고 이를 사용하여 인증된 요청을 보냅니다.
aws lambda-microvms create-microvm-auth-token \ --microvm-identifiermicrovm-id\ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth:TOKEN' \ -H 'X-aws-proxy-port: 8080'
WebSocket 연결을 포함하여 토큰 생성 및 MicroVM 연결에 대한 전체 단계별 안내는 MicroVM에 연결 섹션을 참조하세요.
오류 응답
MicroVM 엔드포인트가 요청을 처리하거나 애플리케이션에 전송할 수 없을 때 다음과 같은 HTTP 상태 코드가 반환됩니다. 이러한 응답은 애플리케이션이 아닌 엔드포인트에서 옵니다.
| 코드 | Status | 원인 및 해결 방법 |
|---|---|---|
| 400 | 잘못된 요청 | 요청 형식, 포트 헤더 또는 WebSocket 하위 프로토콜이 잘못되었습니다. 형식을 확인하세요. |
| 403 | 금지됨 | 토큰이 누락되었거나, 만료되었거나, 잘못되었습니다. 또는 요청된 포트가 토큰의 allowedPorts에 없습니다. 새 토큰을 생성하거나 허용된 포트를 사용하세요. |
| 429 | 요청이 너무 많습니다. | 속도 제한을 초과했습니다(계정 수준 또는 MicroVM당). 지수 백오프를 사용하여 재시도하세요. |
| 500 | 내부 서버 오류 | 내부 오류가 발생했습니다. 요청을 다시 시도하세요. |
| 502 | 잘못된 게이트웨이 | 애플리케이션이 응답하지 않거나 자동 재개가 최대 재시도 횟수 내에 성공하지 못했습니다. 자동 재개을(를) 참조하세요. |
요청 헤더
X-aws-proxy-* 헤더 네임스페이스는 Lambda에서 인증 토큰(X-aws-proxy-auth), 대상 포트(X-aws-proxy-port) 등의 요청 메타데이터용으로 예약되어 있습니다. Lambda는 요청을 애플리케이션에 전달하기 전에 X-aws-proxy-* 헤더를 제거합니다.
요청/응답 대역폭
각 Lambda MicroVM에는 크기에 따라 선형으로 규모가 조정되는 요청/응답 대역폭이 있습니다. 이 대역폭은 MicroVM 엔드포인트를 통과하는 모든 트래픽(인바운드 요청 및 아웃바운드 응답 모두)에 적용됩니다.
| MicroVM 크기(기준) | 최대 대역폭 |
|---|---|
| 0.5GB, 0.25 vCPU | 1MB/초(8Mbps) |
| 1GB, 0.5 vCPU | 2MB/초(16Mbps) |
| 2GB, 1 vCPU | 4MB/초(32Mbps) |
| 4GB, 2 vCPU | 8MB/초(64Mbps) |
| 8GB, 4 vCPU | 16MB/초(128Mbps) |
네트워크 포화로 인해 요청 지연 시간이 증가하는 경우 요청 동시성 또는 페이로드 크기를 줄이거나 더 큰 MicroVM 크기를 선택하여 사용 가능한 대역폭을 늘리세요.
HTTP/2 지원
Lambda MicroVM은 인바운드 엔드포인트에서 HTTP/2를 지원합니다. Lambda는 TLS 핸드셰이크 중 ALPN(Application-Layer Protocol Negotiation)을 통해 프로토콜을 협상하며, HTTP/2를 우선적으로 사용하고 HTTP/1.1로 폴백합니다. HTTP/2 지원 클라이언트는 이를 자동으로 사용합니다.
엔드포인트와 MicroVM 내의 애플리케이션 간에 HTTP/2를 사용하려면
-
애플리케이션에서 TLS 제공 - Lambda는 ALPN을 통해 애플리케이션과 HTTP/2를 협상하여 HTTP/2가 지원되지 않는 경우 HTTP/1.1로 폴백합니다.
-
애플리케이션에서 일반 텍스트 HTTP 제공 - 애플리케이션 연결에서 HTTP/2를 사용하려면 요청에
X-aws-proxy-force-h2: true헤더를 포함합니다.
아웃바운드 연결
기본적으로 Lambda MicroVM은 송신 경로를 통해 퍼블릭 인터넷에 액세스할 수 있습니다. RDS, ElastiCache, 내부 API, Direct Connect 또는 VPN을 통해 연결된 온프레미스 시스템 등 프라이빗 VPC의 리소스와 MicroVM을 연결하려면 VPC 구성을 사용하여 Lambda 네트워크 커넥터를 생성합니다.
VPC 송신을 사용하는 경우 아웃바운드 트래픽은 VPC의 트래픽을 관리하는 보안 그룹 규칙과 네트워크 ACL의 적용을 받습니다.
송신 네트워크 커넥터 작업
송신 네트워크 커넥터는 VPC를 통해 MicroVM의 아웃바운드 트래픽을 라우팅합니다. 커넥터를 한 번 생성한 다음 run-microvm 명령을 통해 MicroVM을 시작할 때 ARN으로 해당 커넥터를 참조합니다.
사전 조건
네트워크 커넥터를 생성하기 전에 Lambda가 VPC에서 탄력적 네트워크 인터페이스(ENI)를 생성할 수 있도록 허용하는 IAM 역할이 필요합니다. 역할에는 다음 권한이 필요합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }
네트워크 커넥터 생성
VPC 서브넷, 보안 그룹 및 네트워크 프로토콜(IPv4 또는 DualStack)을 지정하여 커넥터를 생성합니다.
aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole
네트워크 커넥터 상태
run-microvm에서 커넥터를 참조하려면 커넥터가 ACTIVE 상태여야 합니다.
| State | 설명 |
|---|---|
PENDING |
커넥터가 생성되고 있습니다(기본 ENI가 프로비저닝되고 있음). |
ACTIVE |
커넥터를 사용할 준비가 되었습니다. |
INACTIVE |
커넥터가 일시적으로 비활성 상태입니다. |
FAILED |
프로비저닝 또는 업데이트에 실패했습니다. StateReason을 검토합니다. |
DELETING |
커넥터가 삭제되고 ENI가 정리되고 있습니다. |
DELETE_FAILED |
삭제에 실패했습니다. |
네트워크 커넥터를 사용하여 MicroVM 실행
MicroVM을 실행할 때 커넥터 ARN을 참조합니다.
aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectorsconnector-arn\ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
참고
커넥터를 업데이트하거나 삭제하기 전에 커넥터를 사용하는 모든 MicroVM이 종료되었는지 확인합니다. 현재 사용 중인 커넥터를 수정하면 실행 중인 MicroVM에 네트워크 연결 문제가 발생할 수 있습니다.