View a markdown version of this page

建立您的第一個 Lambda MicroVM - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立您的第一個 Lambda MicroVM

本教學課程會逐步引導您建立 AWS Lambda MicroVM 映像並從中執行 MicroVM。最後,您將有一個透過 HTTPS 存取的執行中應用程式。

先決條件

在開始之前,您需要兩件事:

  1. 在您偏好的區域中存放應用程式成品的 Amazon S3 儲存貯體 (您將在步驟 2 中建立的 zip 檔案)。 AWS

  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:*:*:*" } ] }
注意

如果從私有 AWS ECR 儲存庫Dockerfile提取 ,也請將 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 指令會為您的應用程式層設定容器映像。您可以使用任何相容的容器映像。Lambda 受管基礎映像 (提供 MicroVM 作業系統和服務元件) 會在步驟 3 --base-image-arn中使用 分別指定。

如果您的應用程式產生唯一值 IDs、秘密或密碼編譯資料),請使用您語言的標準密碼編譯安全虛擬數字產生器 (CSPRNG) 程式庫,以確保 MicroVMs的唯一性。如果您的應用程式使用 OpenSSL,請使用包含快照相容版本的 Lambda 基礎容器映像。如需詳細資訊,請參閱 中的快照相容性一節MicroVM 映像

步驟 2:封裝並上傳至 Amazon S3

app.js和 封裝Dockerfile至 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 狀態,您就可以從中執行 MicroVMs。每個映像都可以啟動許多 MicroVMs 每個租戶、使用者工作階段或任務一個。

使用下列命令執行 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,讓 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 映像以了解映像建置勾點、版本控制和快照相容性。

  • 執行 MicroVMs 如需 SDK 範例、生命週期關聯和擴展策略,請參閱 。