View a markdown version of this page

Menjalankan dan menggunakan MicroVMS - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menjalankan dan menggunakan MicroVMS

Bagian ini menjelaskan cara memulai MicroVM, menyambung ke aplikasi yang sedang berjalan, mengelola siklus hidup MicroVM, dan menangani penskalaan.

Memulai MicroVM

Gunakan run-microvm perintah untuk meluncurkan microVM baru dari gambar tertentu. Lambda menyediakan sumber daya yang diperlukan, membuat titik akhir HTTPS khusus, dan memulai aplikasi Anda dari snapshot gambar.

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-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":1800}' \ --maximum-duration-in-seconds 14400

MicroVM dibuat saat Anda menelep run-microvm on. Setiap microVM memiliki titik akhir khusus sendiri. Tidak ada penyeimbangan beban di seluruh microVM dari satu titik akhir — setiap titik akhir ditautkan ke microVM tunggal.

Satu-satunya parameter yang diperlukan adalah --image-identifier (yang harus menjadi ARN dari gambar microVM). Semua parameter lainnya adalah opsional.

Parameter Kunci

Parameter Deskripsi
--image-identifier (Diperlukan) ARN dari image microVM untuk dijalankan.
--image-version Versi gambar microVM yang akan dijalankan. Defaultnya ke versi aktif terbaru.
--execution-role-arn Peran IAM yang menyediakan izin runtime untuk microVM untuk berinteraksi dengan layanan lain AWS .
--idle-policy Mengontrol penangguhan otomatis dan melanjutkan perilaku. Lihat konfigurasi kebijakan idle di bagian berikut.
--maximum-duration-in-seconds Durasi maksimum microVM dapat tetap dalam keadaan berjalan atau ditangguhkan sebelum Lambda mengakhirinya. Rentang: 1—28.800 detik (8 jam).
--run-hook-payload Muatan string (maks 16 KB) dikirimkan ke hook /run siklus hidup saat microVM dimulai.
--logging Konfigurasi logging. Sesuaikan grup CloudWatch log dan streaming, atau nonaktifkan pencatatan sepenuhnya.
--ingress-network-connectors ARN konektor masuk yang memungkinkan konektivitas HTTPS masuk.
--egress-network-connectors ARN konektor keluar untuk konektivitas keluar (internet atau VPC).
catatan

Untuk menonaktifkan konektivitas masuk, gunakan Lambda-provided NO_INGRESS konektor. Untuk detail selengkapnya tentang konektor jaringan, lihatJaringan.

Konfigurasi kebijakan idle

Saat diaktifkan, kebijakan idle mengontrol penangguhan otomatis dan dimulainya kembali. Kehadiran lalu lintas melalui titik akhir microVM menandakan aktivitas. Jika tidak ada lalu lintas yang tiba untuk durasi idle yang dikonfigurasi, microVM diperlakukan sebagai idle dan ditangguhkan.

Bidang Deskripsi
autoResumeEnabled Ketikatrue, microVM secara otomatis dilanjutkan ketika lalu lintas tiba di titik puncaknya saat ditangguhkan.
maxIdleDurationSeconds Jumlah detik tanpa lalu lintas setelah itu microVM ditangguhkan. Maksimum: 28.800 (8 jam).
suspendedDurationSeconds Jumlah detik microVM tetap dalam keadaan tersuspensi sebelum Lambda menghentikannya.
catatan

Untuk aplikasi asinkron yang tidak secara aktif mengirim atau menerima lalu lintas melalui titik akhir, nonaktifkan penangguhan otomatis atau konfigurasikan durasi idle yang sesuai.

Muatan waktu proses

Dengan runHookPayload parameter, Anda dapat meneruskan data konfigurasi per-microVM (string maks 16 KB) pada waktu berjalan. Lambda mengirimkan muatan ini sebagai bagian dari badan permintaan ke kait /run siklus hidup. Lambda juga menyuntikkan microvmId ke badan permintaan.

H /run ook menerima badan JSON dengan struktur berikut:

{ "microvmId": "mvm-01234567-abcd-ef01-2345-6789abcdef01", "runHookPayload": "tenant-specific-string" }

Gunakan payload runtime untuk menyediakan konfigurasi yang bervariasi per microVM — misalnya, ID penyewa, token sesi, URL yang ditandatangani, atau jalur Manajer Rahasia. Tidak seperti variabel lingkungan (yang diatur pada tingkat gambar dan dibagikan di semua microVM dari gambar itu), payload hook run unik untuk setiap microVM.

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --run-hook-payload 'tenant-specific-string'

Ketika Anda tidak lagi membutuhkan microVM, hentikan untuk menghentikan semua biaya. Untuk petunjuk, lihat Mengakhiri MicroVM.

Menghubungkan ke MicroVM

Setiap microVM mendapatkan URL titik akhir HTTPS publik yang unik, ditetapkan saat Anda menelep run-microvm on. Anda terhubung ke aplikasi Anda yang berjalan di dalam microVM melalui URL ini.

Autentikasi

Semua permintaan ke titik akhir microVM memerlukan token otentikasi JWE. Tidak ada opsi akses yang tidak diautentikasi. Hasilkan token dengancreate-microvm-auth-token:

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"allPorts":{}}]'

Token dicakup ke port tertentu dan memiliki kedaluwarsa yang dapat dikonfigurasi. Anda dapat membatasi akses ke satu port, rentang port, atau semua port:

{ "port": number } { "range": { "startPort": N, "endPort": N } } { "allPorts": {} }

Perutean port

Secara default, Lambda merutekan lalu lintas masuk ke port 8080 dalam microVM Anda. Untuk merutekan ke port yang berbeda, sertakan X-aws-proxy-port header dalam permintaan Anda. Port target harus berada dalam yang allowedPorts ditentukan dalam token otentikasi.

Protokol

Lambda MicroVMS mendukung HTTP/2,, gRPC WebSockets, dan SSE melalui URL titik akhir.

Untuk WebSocket koneksi, lewati token otentikasi dan port target melalui subprotokol:

// JavaScript WebSocket example const protocols = [ "lambda-microvms", // Required base protocol "lambda-microvms.authentication.<auth-token>", // Auth token "lambda-microvms.port.9000" // Target port ]; const ws = new WebSocket('wss://<microvm-endpoint>/path', protocols);

Lambda menghapus MicroVM-specific subprotokol dari permintaan sebelum meneruskannya ke aplikasi Anda.

Contoh SDK

Contoh berikut menunjukkan cara menjalankan microVM dan menghubungkannya menggunakan AWS SDK.

Python
contoh Contoh - Menjalankan microVM dan menghubungkan dengan boto3
import boto3, requests client = boto3.client("lambda-microvms") run_resp = client.run_microvm( imageIdentifier="arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image", idlePolicy={"autoResumeEnabled": True, "maxIdleDurationSeconds": 900, "suspendedDurationSeconds": 300} ) microvm_id = run_resp["microvmId"] endpoint = run_resp["endpoint"] print(f"MicroVM {microvm_id} running at {endpoint}") token_resp = client.create_microvm_auth_token( microvmIdentifier=microvm_id, expirationInMinutes=30, allowedPorts=[{"allPorts": {}}] ) token = token_resp["authToken"]["X-aws-proxy-auth"] resp = requests.get(f"https://{endpoint}/health", headers={"X-aws-proxy-auth": token}) print(resp.status_code, resp.json())
Node.js
contoh Contoh - Menjalankan microVM dan menghubungkan dengan AWS SDK untuk JavaScript
import { LambdaMicrovmsClient, RunMicrovmCommand, CreateMicrovmAuthTokenCommand } from "@aws-sdk/client-lambda-microvms"; const client = new LambdaMicrovmsClient({}); const { microvmId, endpoint } = await client.send(new RunMicrovmCommand({ imageIdentifier: "arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image", idlePolicy: { autoResumeEnabled: true, maxIdleDurationSeconds: 900, suspendedDurationSeconds: 300 } })); const { authToken } = await client.send(new CreateMicrovmAuthTokenCommand({ microvmIdentifier: microvmId, expirationInMinutes: 30, allowedPorts: [{ allPorts: {} }] })); const resp = await fetch(`https://${endpoint}/health`, { headers: { "X-aws-proxy-auth": authToken["X-aws-proxy-auth"] } }); console.log(await resp.json());

Mengirim permintaan

Bash
contoh Contoh - Mengirim permintaan dengan cURL
curl 'https://<microvm-endpoint>' \ -H 'X-aws-proxy-auth: <TOKEN>' \ -H 'X-aws-proxy-port: 8080'
Python
contoh Contoh — Mengirim permintaan dengan perpustakaan permintaan
import requests response = requests.get('https://<microvm-endpoint>', headers={'X-aws-proxy-auth': '<TOKEN>'}) print(response.text)
Node.js
contoh Contoh — Mengirim permintaan dengan fetch
const response = await fetch('https://<microvm-endpoint>', { headers: { 'X-aws-proxy-auth': '<TOKEN>', 'X-aws-proxy-port': '8080' } }); console.log(await response.text());

Pengait siklus hidup

Pengait siklus hidup memungkinkan Anda menjalankan logika kustom pada titik-titik kunci dalam siklus hidup microVM — saat dimulai, ditangguhkan, dilanjutkan, atau dihentikan. Gunakan kait untuk menginisialisasi status per penyewa, membersihkan data sebelum ditangguhkan, menyegarkan kredenSIAL pada resume, atau membersihkan sumber daya sebelum penghentian.

Setiap hook adalah titik akhir HTTP yang diekspos aplikasi Anda. Lambda mengirimkan permintaan POST ke hook pada peristiwa siklus hidup yang sesuai. Hooks mendengarkan di jalur /aws/lambda-microvms/runtime/v1/<hook-name> pada port yang Anda konfigurasikan.

MicroVM Anda mulai menerima lalu lintas eksternal setelah /run hook mengembalikan HTTP 200. Sampai saat itu, titik akhir tidak meneruskan permintaan ke aplikasi Anda.

Kait Saat dipanggil Tujuan
/aws/lambda-microvms/runtime/v1/run Setelah MicroVM dimulai dari snapshot Inisialisasi status per penyewa, atur ulang nilai unik, lakukan pemeriksaan kesehatan. Lalu lintas dimulai setelah hook ini kembali.
/aws/lambda-microvms/runtime/v1/resume Setelah MicroVM dilanjutkan dari status ditangguhkan Re-establish koneksi jaringan, refresh kredensi, memvalidasi status. MicroVM tetap dalam SUSPENDED keadaan saat hook ini dieksekusi; itu beralih ke RUNNING setelah hook kembali.
/aws/lambda-microvms/runtime/v1/suspend Sebelum MicroVM ditangguhkan Flush penulisan tertunda, tutup koneksi, rilis sumber daya.
/aws/lambda-microvms/runtime/v1/terminate Sebelum MicroVM berakhir Siram data, beri tahu sistem eksternal, bersihkan.

Untuk kait yang berjalan selama pembuatan gambar (/readydan/validate), lihatKait pembuatan gambar MicroVM.

Spesifikasi OpenAPI:

{ "openapi": "3.0.2", "info": { "title": "Lambda MicroVMs Application Hook Interface", "version": "2025-12-03" }, "paths": { "/ready": { "post": { "description": "Called by Lambda during MicroVM image creation to determine if the application has initialized.", "operationId": "Ready", "responses": { "200": { "description": "Successful invocation." }, "503": { "description": "Application is not yet ready. Lambda retries until timeout." } } } }, "/resume": { "post": { "description": "Called by Lambda when resuming a MicroVM that is in the SUSPENDED state.", "operationId": "Resume", "responses": { "200": { "description": "Successful invocation." } } } }, "/run": { "post": { "description": "Called by Lambda when a new MicroVM is run from a MicroVM image.", "operationId": "Run", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunRequestContent" } } } }, "responses": { "200": { "description": "Successful invocation." } } } }, "/suspend": { "post": { "description": "Called by Lambda when suspending a MicroVM.", "operationId": "Suspend", "responses": { "200": { "description": "Successful invocation." } } } }, "/terminate": { "post": { "description": "Called by Lambda when terminating a MicroVM, before resources are released.", "operationId": "Terminate", "responses": { "200": { "description": "Successful invocation." } } } }, "/validate": { "post": { "description": "Called by Lambda when running a MicroVM to validate the image build. Use this hook to perform tests that validate your application behaves correctly when running. Lambda also samples the portions of the image that are used when handling this request, allowing Lambda to prefetch those portions of the image to reduce latency at run time.", "operationId": "Validate", "responses": { "200": { "description": "Successful invocation." }, "503": { "description": "Validation in progress. Lambda retries until timeout." } } } } }, "components": { "schemas": { "RunRequestContent": { "type": "object", "properties": { "microvmId": { "type": "string", "description": "The MicroVM identifier." }, "runHookPayload": { "type": "string", "description": "Run hook payload provided to RunMicrovm." } } } } }, "servers": [ { "url": "/aws/lambda-microvms/runtime/v1" } ] }

Menangguhkan dan Melanjutkan MicroVM

Tangguhkan MicroVM untuk mengurangi biaya sambil mempertahankan status aplikasi. Saat berlari, Anda membayar biaya komputasi. Saat ditangguhkan, Anda hanya membayar biaya penyimpanan snapshot.

Cara menangguhkan

Ada dua cara untuk menangguhkan microVM:

  1. Kebijakan idle (otomatis) — Konfigur maxIdleDurationSeconds asikan dalam kebijakan idle. Jika tidak ada lalu lintas yang tiba di titik akhir microVM untuk durasi tersebut, Lambda menangguhkan microVM secara otomatis.

  2. Panggilan API (eksplisit) — Panggilan suspend-microvm untuk segera menangguhkan:

aws lambda-microvms suspend-microvm --microvm-identifier microvm-id

Pengait /suspend

Sebelum menangguhkan, Lambda memanggil hook Anda/suspend. Gunakan untuk menghapus penulisan yang tertunda, menutup koneksi jaringan, dan melepaskan sumber daya yang tidak boleh bertahan melintasi batas penangguhan.

Lanjutkan perilaku

Ketika microVM dilanjutkan (melalui panggilan API atau auto-resume), Lambda mengembalikan memori dan status disk dari pos pemeriksaan suspensi. MicroVM tetap dalam SUSPENDED keadaan saat /resume hook dieksekusi. Setelah hook mengembalikan HTTP 200, microVM bertransisi ke RUNNING dan mulai menerima lalu lintas.

Gunakan /resume hook untuk menyegarkan kredenSIAL, membangun kembali koneksi jaringan, dan memvalidasi status.

aws lambda-microvms resume-microvm --microvm-identifier microvm-id

Auto-resume

Ketika autoResumeEnabled=true lalu lintas tiba di titik akhir microVM yang ditangguhkan, Lambda melanjutkan microVM secara otomatis. Lambda menahan permintaan masuk saat resume selesai (termasuk /resume hook), lalu mengirimkannya ke aplikasi Anda.

Resume menambahkan latensi ke permintaan pertama. Durasi tergantung pada ukuran keadaan tersuspensi yang dipulihkan dan durasi /resume kait Anda.

Jika resume tidak berhasil, Lambda mengembalikan 502 Bad Gateway ke penelepon.

catatan

Auto-resume menambahkan latensi hanya ke permintaan pertama setelah penangguhan. Permintaan selanjutnya saat microVM berjalan tidak terpengaruh.

Penskalaan dan konkurensi

Anda membuat microVM baru dengan menelepon. run-microvm Setiap microVM memiliki titik akhir khusus sendiri. Tidak ada penyeimbangan beban di seluruh microVM dari satu titik akhir.

Account-level kapasitas — Akun Anda memiliki kuota untuk total memori yang dapat dialokasikan di semua microVM Anda di SUSPENDED negara bagian RUNNING atau di Wilayah, dan Anda dapat menskalakan secara vertikal hingga empat kali kuota ini. Untuk meminta peningkatan kuota, kunjungi konsol Kuota Layanan dan cari MicroVMS Lambda.

Model biaya:

  • Menjalankan MicroVMS dikenakan biaya komputasi.

  • MicroVM yang ditangguhkan dikenakan biaya penyimpanan snapshot tetapi tidak dikenakan biaya komputasi.

  • MicroVM yang dihentikan tidak dikenakan biaya.

Strategi untuk mengelola kapasitas:

  • Menangguhkan microVM idle — Konfigurasikan kebijakan idle untuk secara otomatis menangguhkan microVM yang tidak menerima lalu lintas.

  • Hentikan MicroVM yang tidak lagi diperlukan — Gunakan suspendedDurationSeconds untuk menghentikan secara otomatis setelah durasi maksimum yang ditangguhkan, atau menelepon secara eksplisit. terminate-microvm

  • Right-size kebijakan idle — Tetapkan maxIdleDurationSeconds berdasarkan pola lalu lintas Anda. Waktu idle yang lebih pendek membebaskan kapasitas lebih cepat.

Mengakhiri MicroVM

Hentikan microVM ketika tidak lagi diperlukan. Pengakhiran melepaskan semua sumber daya komputasi dan menghentikan semua biaya.

Sebelum melepaskan sumber daya, Lambda memanggil /terminate hook Anda. Gunakan untuk membersihkan data yang tertunda atau memberi tahu sistem eksternal.

aws lambda-microvms terminate-microvm --microvm-identifier microvm-id

Daftar MicroVM

Daftar semua MicroVM di akun Anda, secara opsional difilter berdasarkan gambar:

aws lambda-microvms list-microvms # Filter by image aws lambda-microvms list-microvms --image-identifier my-image --image-version 1.0

Penanganan kesalahan

Jalankan kesalahan

Tabel berikut mencantumkan kesalahan umum yang dikembalikan oleh run-microvm API:

Kesalahan Penyebab Solusi
ServiceQuotaExceededException Akun telah mencapai kuota memori untuk microVM bersamaan. Hentikan microVM yang tidak aktif atau minta peningkatan kuota.
ResourceNotFoundException Gambar yang ditentukan tidak ada atau tidak dalam CREATED keadaan. Verifikasi pengenal gambar dan konfirmasikan pembuatan selesai.
ValidationException Satu atau lebih parameter permintaan tidak valid. Periksa nilai kebijakan idle, format pengidentifikasi gambar, dan ARN konektor.
ThrottlingException Batas tarif API untuk operasi ini telah terlampaui. Terapkan backoff eksponensial dengan jitter.

Strategi percobaan kembali

Untuk kesalahan transien (ThrottlingException,InternalServerException), gunakan backoff eksponensial:

import time, random def run_with_retry(client, params, max_retries=5): for attempt in range(max_retries): try: return client.run_microvm(**params) except client.exceptions.ThrottlingException: delay = (2 ** attempt) + random.uniform(0, 1) time.sleep(delay) raise Exception("Max retries exceeded")

Untuk informasi tentang integrasi layanan yang didukung dengan Instans Terkelola Lambda, lihat. Integrasi