View a markdown version of this page

첫 번째 Lambda MicroVM 생성 - AWS Lambda

첫 번째 Lambda MicroVM 생성

이 자습서에서는 AWS Lambda MicroVM 이미지를 생성하고 해당 이미지에서 MicroVM을 실행하는 방법을 단계별로 안내합니다. 자습서를 마치면 HTTPS를 통해 액세스할 수 있는 실행 중인 애플리케이션이 생깁니다.

사전 조건

시작하기 전에 다음 두 가지가 필요합니다.

  1. 애플리케이션 아티팩트(2단계에서 생성할 zip 파일)를 저장할 선호하는 AWS 리전의 Amazon S3 버킷.

  2. 이미지 생성 중 Lambda가 수임하는 IAM 빌드 역할. Lambda는 이 역할을 사용하여 Amazon S3에서 코드 아티팩트를 다운로드하고 CloudWatch에 빌드 로그를 작성합니다.

다음 신뢰 정책을 사용하여 IAM 역할을 생성합니다. 이렇게 하면 Lambda 서비스가 해당 역할을 수임할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:TagSession"] }] }

역할에 다음 권한 정책을 연결합니다. <your-bucket-name>을 사용자의 Amazon S3 버킷 이름으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::<your-bucket-name>/*" }, { "Effect": "Allow", "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"], "Resource": "arn:aws:logs:*:*:*" } ] }
참고

Dockerfile이 프라이빗 AWS ECR 리포지토리에서 풀링하는 경우 권한 정책에 ecr:GetAuthorizationTokenecr:BatchGetImage도 추가하세요.

첫 번째 MicroVM 이미지 생성

MicroVM 이미지는 애플리케이션을 완전히 초기화된 상태로 캡처합니다. 이 이미지에서 MicroVM을 실행하면 부팅 또는 초기화 지연 없이 애플리케이션이 즉시 시작됩니다.

1단계: 애플리케이션 및 Dockerfile 작성

MicroVM 내에서 실행될 간단한 HTTP 서버를 생성합니다. 이 예제에서는 외부 종속성이 없는 Node.js를 사용합니다.

app.js

// Minimal HTTP server — listens on port 8080 const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ status: 'ok', path: req.url })); }); server.listen(8080, () => { console.log('Listening on port 8080'); });

그런 다음 애플리케이션을 패키징하고 시작하는 Dockerfile을 생성합니다.

Dockerfile

# Use a lightweight Node.js runtime for your application layers FROM node:24-alpine # Set the working directory inside the container WORKDIR /app # Copy your application code COPY app.js . # Declare the port your app listens on EXPOSE 8080 # Start the application — Lambda snapshots the running state CMD ["node", "app.js"]
참고

FROM 명령어는 애플리케이션 계층의 컨테이너 이미지를 설정합니다. 호환되는 아무 컨테이너 이미지나 사용할 수 있습니다. MicroVM 운영 체제 및 서비스 구성 요소를 제공하는 Lambda 관리형 기본 이미지는 3단계에서 --base-image-arn을 사용하여 별도로 지정됩니다.

애플리케이션에서 고유 값(ID, 시크릿 또는 암호화 자료)을 생성하는 경우 언어의 암호학적으로 안전한 표준 가상 난수 생성기(CSPRNG) 라이브러리를 사용하여 MicroVM 전체에서 고유성을 보장하세요. 애플리케이션에서 OpenSSL을 사용하는 경우 스냅샷 호환 버전이 포함된 Lambda 기본 컨테이너 이미지를 사용하세요. 자세한 내용은 MicroVM 이미지의 스냅샷 호환성 섹션을 참조하세요.

2단계: 패키징 및 Amazon S3에 업로드

app.jsDockerfile을 zip 아카이브로 패키징한 다음 Amazon S3 버킷에 업로드합니다. 터미널에서 다음 명령을 실행합니다.

zip app.zip app.js Dockerfile aws s3 cp app.zip s3://your-bucket-name/app.zip

3단계: MicroVM 이미지 생성

create-microvm-image를 직접적으로 호출하여 빌드를 시작합니다. Lambda는 Amazon S3에서 zip을 다운로드하고, Dockerfile을 실행하고, 애플리케이션을 시작하고, 완전히 초기화된 상태의 Firecracker 스냅샷을 캡처합니다.

aws lambda-microvms create-microvm-image \ --name my-first-microvm-image \ --code-artifact uri=s3://your-bucket-name/app.zip \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole

이미지는 CREATING 상태로 시작됩니다. 다음을 통해 빌드 상태를 확인합니다.

aws lambda-microvms get-microvm-image \ --image-identifier my-first-microvm-image

빌드가 완료되면 state 필드가 CREATED로 변경됩니다.

{ "imageName": "my-first-microvm-image", "imageArn": "arn:aws:lambda:us-east-1:123456789012:microvm-image:my-first-microvm-image", "state": "CREATED", "imageVersion": "1.0", ... }

상태가 CREATE_FAILED인 경우 CloudWatch의 /aws/lambda/microvms/my-first-microvm-image에서 빌드 로그를 확인합니다.

첫 번째 MicroVM 실행

MicroVM 이미지가 CREATED 상태가 되면 해당 이미지에서 MicroVM을 실행할 수 있습니다. 각 이미지는 테넌트, 사용자 세션 또는 작업당 하나씩 많은 MicroVM 시작할 수 있습니다.

다음 명령을 사용하여 MicroVM을 실행하세요.

aws lambda-microvms run-microvm \ --image-identifier my-first-microvm-image \ --ingress-network-connectors "arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:ALL_INGRESS" \ --egress-network-connectors "arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:INTERNET_EGRESS" \ --idle-policy '{"autoResumeEnabled":true,"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300}'

파라미터 설명:

  • --ingress-network-connectors - 모든 포트에서 MicroVM으로 전송되는 인바운드 HTTPS 트래픽을 활성화합니다. Lambda 관리형 커넥터입니다.

  • --egress-network-connectors - MicroVM으로부터의 아웃바운드 인터넷 액세스를 활성화합니다. Lambda 관리형 커넥터입니다.

  • --idle-policy - 자동 일시 중지-재개 동작을 구성합니다. 이 정책은 15분 동안 활동이 없으면 MicroVM을 일시 중지하고 최대 5분 동안 일시 중지된 상태로 유지한 후 트래픽이 도착하면 자동으로 재개합니다.

응답에는 MicroVM ID와 엔드포인트 URL이 포함됩니다.

{ "microvmId": "mvm-01234567-abcd-ef01-2345-6789abcdef01", "state": "PENDING", "endpoint": "mvm-01234567-abcd-ef01-2345-6789abcdef01.lambda-microvm.us-east-1.on.aws", ... }

RUNNING 상태가 될 때까지 기다립니다.

aws lambda-microvms get-microvm \ --microvm-identifier mvm-01234567-abcd-ef01-2345-6789abcdef01

MicroVM에 연결

MicroVM 엔드포인트에 대한 모든 요청에는 인증 토큰이 필요합니다. 다음 명령을 사용하여 하나 생성하세요.

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier mvm-01234567-abcd-ef01-2345-6789abcdef01 \ --expiration-in-minutes 30 \ --allowed-ports '[{"allPorts":{}}]'

응답에는 authToken 필드에 토큰이 포함되어 있습니다. 이를 사용하여 실행 중인 애플리케이션에 요청을 보내세요.

curl https://mvm-01234567-abcd-ef01-2345-6789abcdef01.lambda-microvm.us-east-1.on.aws/ \ -H "X-aws-proxy-auth: <token-value>"

애플리케이션에서 다음과 같은 응답이 표시되어야 합니다:

{"status":"ok","path":"/"}

MicroVM이 실행 중이며 트래픽을 처리하고 있습니다. 1단계에서 작성한 애플리케이션이 엔드포인트 URL에서 실행되고 있습니다.

정리

지속적 요금 부과를 방지하려면 사용이 끝나면 MicroVM을 종료합니다.

aws lambda-microvms terminate-microvm \ --microvm-identifier mvm-01234567-abcd-ef01-2345-6789abcdef01

다음 단계

  • 핵심 개념에 대해 알아보고 스냅샷 프로세스, 수명 주기 상태 및 기본 이미지를 이해합니다.

  • MicroVM 이미지를 살펴보고 이미지 빌드 후크, 버전 관리 및 스냅샷 호환성에 대해 알아봅니다.

  • MicroVM 실행에서 SDK 예제, 수명 주기 후크 및 스케일링 전략을 확인합니다.