

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

# 建立您的第一個 Lambda MicroVM
<a name="microvms-getting-started"></a>

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

## 先決條件
<a name="microvms-getting-started-prereqs"></a>

在開始之前，您需要兩件事：

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

1. 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:GetAuthorizationToken`和 `ecr:BatchGetImage` 新增至許可政策。

## 建立您的第一個 MicroVM 映像
<a name="microvms-getting-started-first-image"></a>

MicroVM 映像會以完全初始化的狀態擷取您的應用程式。當您從此映像執行 MicroVM 時，您的應用程式會立即啟動 – 不會啟動或初始化延遲。

### 步驟 1：撰寫您的應用程式和 Dockerfile
<a name="microvms-getting-started-step1"></a>

建立將在 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 映像](microvms-images.md)。

### 步驟 2：封裝並上傳至 Amazon S3
<a name="microvms-getting-started-step2"></a>

將 `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 映像
<a name="microvms-getting-started-step3"></a>

呼叫 `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
<a name="microvms-getting-started-run"></a>

一旦 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
<a name="microvms-getting-started-connect"></a>

對 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。

## 清除
<a name="microvms-getting-started-cleanup"></a>

若要避免持續收費，請在完成後終止 MicroVM：

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

## 後續步驟
<a name="microvms-getting-started-next"></a>
+ 了解如何[核心概念](microvms-how-it-works.md)了解快照程序、生命週期狀態和基礎映像。
+ 探索[MicroVM 映像](microvms-images.md)以了解映像建置勾點、版本控制和快照相容性。
+ [執行 MicroVMs](microvms-launching.md) 如需 SDK 範例、生命週期關聯和擴展策略，請參閱 。