View a markdown version of this page

Crea la tua prima microVM Lambda - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea la tua prima microVM Lambda

Questo tutorial illustra la creazione di un'immagine AWS Lambda MicroVM e l'esecuzione di una MicroVM da essa. Alla fine, avrai un'applicazione in esecuzione accessibile tramite HTTPS.

Prerequisiti

Hai bisogno di due cose prima di iniziare:

  1. Un bucket Amazon S3 nella tua AWS regione preferita per archiviare gli artefatti dell'applicazione (il file zip che creerai nella fase 2).

  2. Un ruolo di build IAM che Lambda assume durante la creazione dell'immagine. Lambda utilizza questo ruolo per scaricare l'artefatto di codice da Amazon S3 e scrivere i log di compilazione in. CloudWatch

Crea il ruolo IAM con la seguente policy di fiducia. Ciò consente al servizio Lambda di assumere il ruolo:

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

Allega la seguente politica di autorizzazioni al ruolo. Sostituiscilo <your-bucket-name> con il nome del tuo bucket 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:*:*:*" } ] }
Nota

Se esegui i Dockerfile prelievi da un repository AWS ECR privato, aggiungi anche ecr:GetAuthorizationToken and ecr:BatchGetImage alla policy delle autorizzazioni.

Creazione della tua prima immagine MicroVM

Un'immagine MicroVM cattura l'applicazione in uno stato completamente inizializzato. Quando si esegue una microVM da questa immagine, l'applicazione viene avviata immediatamente, senza ritardi nell'avvio o nell'inizializzazione.

Fase 1: Scrivere l'applicazione e il Dockerfile

Crea un semplice server HTTP che funzioni all'interno della tua MicroVM. Questo esempio utilizza Node.js senza dipendenze esterne:

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'); });

Quindi, crea un Dockerfile pacchetto e avvia la tua applicazione:

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"]
Nota

L'FROMistruzione imposta l'immagine del contenitore per i livelli dell'applicazione. È possibile utilizzare qualsiasi immagine del contenitore compatibile. L'immagine di base gestita Lambda (che fornisce il sistema operativo MicroVM e i componenti di servizio) viene specificata separatamente --base-image-arn nel passaggio 3.

Se la tua applicazione genera valori univoci (ID, segreti o materiale crittografico), utilizza la libreria CSPRNG (Pseudorandom Number Generator) crittograficamente sicura (CSPRNG) standard del tuo linguaggio per garantire l'unicità tra le microVMS. Se la tua applicazione utilizza OpenSSL, usa l'immagine del contenitore di base Lambda che include una versione compatibile con le istantanee. Per i dettagli, consulta la sezione sulla compatibilità delle istantanee in. Immagini MicroVM

Passaggio 2: impacchettamento e caricamento su Amazon S3

Imballa app.js i tuoi dati Dockerfile in un archivio zip, quindi caricali nel tuo bucket Amazon S3. Esegui i seguenti comandi nel tuo terminale:

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

Passaggio 3: creare l'immagine MicroVM

Chiama create-microvm-image per iniziare la compilazione. Lambda scarica il file zip da Amazon S3, lo esegueDockerfile, avvia l'applicazione e acquisisce un'istantanea Firecracker dello stato completamente inizializzato:

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

L'immagine inizia nello stato. CREATING Controlla lo stato della build con:

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

Al termine della compilazione, il state campo diventa: 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", ... }

Se lo stato èCREATE_FAILED, controlla i log di compilazione CloudWatch sotto/aws/lambda/microvms/my-first-microvm-image.

Esecuzione della prima MicroVM

Una volta raggiunto CREATED lo stato dell'immagine MicroVM, è possibile eseguire MicroVMS da essa. Ogni immagine può avviare più microVM, una per tenant, sessione utente o processo.

Esegui una microVM con il seguente comando:

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}'

Parametri spiegati:

  • --ingress-network-connectors— Abilita il traffico HTTPS in entrata verso la tua MicroVM su tutte le porte. Si tratta di un connettore. Lambda-managed

  • --egress-network-connectors— Consente l'accesso a Internet in uscita dalla tua MicroVM. Si tratta di un connettore. Lambda-managed

  • --idle-policy— Configura il comportamento automatico di sospensione-ripresa. Questa policy sospende la MicroVM dopo 15 minuti di inattività, la mantiene sospesa per un massimo di 5 minuti e riprende automaticamente quando arriva il traffico.

La risposta include l'ID MicroVM e l'URL dell'endpoint:

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

Attendi che lo stato raggiunga: RUNNING

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

Connessione alla tua MicroVM

Tutte le richieste a un endpoint MicroVM richiedono un token di autenticazione. Generane uno con:

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

La risposta include un token nel authToken campo. Usalo per inviare una richiesta all'applicazione in esecuzione:

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

Dovresti vedere la risposta della tua applicazione:

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

La tua MicroVM è in esecuzione e serve traffico. L'applicazione che hai scritto nel passaggio 1 è disponibile nell'URL dell'endpoint.

Eliminazione

Per evitare addebiti continui, interrompi la MicroVM quando hai finito:

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

Fasi successive

  • Scopri come Concetti principali comprendere il processo di istantanea, gli stati del ciclo di vita e le immagini di base.

  • Scoprite Immagini MicroVM di più sugli hook per la creazione delle immagini, sul controllo delle versioni e sulla compatibilità delle istantanee.

  • Consulta Esecuzione di MicroVMS gli esempi di SDK, gli hook del ciclo di vita e le strategie di scalabilità.

  • Consulta le integrazioni di servizi supportateIntegrazioni.