

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

# 建立 Lambda Web 函數
<a name="web-functions-create"></a>

若要使用 Lambda Web Functions 部署應用程式，您可以使用修訂版和端點建立 Web Function 來接收流量。主控台和 `aws lambda-web deploy`命令可以建立 Web 函數、其第一個修訂版，以及其第一個端點。修訂是您程式碼和組態的不可變快照。端點會將請求路由到作用中的修訂。如需這些資源的詳細資訊，請參閱 [核心概念](web-functions-how-it-works.md)。本主題說明如何使用 Lambda 主控台和 建立它們 AWS CLI。

## 先決條件
<a name="web-functions-create-prereqs"></a>

開始前，請確定您具有下列項目：
+  AWS 帳戶。若要建立註冊選項，請參閱《*AWS 帳戶管理參考指南*》中的[比較註冊選項](https://docs.aws.amazon.com/accounts/latest/reference/sign-up-for-aws.html)。
+ 管理 Web 函數、將執行角色傳遞給 Lambda (`iam:PassRole`)，以及建立或使用支援 Amazon S3 和 IAM 資源的許可。

主控台會建立或重複使用 Web 函數所需的資源，包括執行角色和程式碼的 Amazon S3 儲存貯體。

若要遵循 AWS CLI 程序，您也需要：
+ AWS CLI 第 2 版，在包含 `aws lambda-web`命令的版本中。若要檢查，請執行 `aws lambda-web help`。如果您 AWS CLI 使用官方安裝程式或安裝指令碼安裝 ，請執行 `aws update` 以更新至最新版本。否則，請參閱[安裝或更新至最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。
+ AWS 登入資料和為 AWS 區域 設定的 AWS CLI。
+ 對於 `aws lambda-web deploy`，在部署儲存貯`s3:ListBucket`體上呼叫 `sts:GetCallerIdentity`的許可，以及在其物件`s3:GetObjectVersion`上呼叫 `s3:GetObject`、 `s3:PutObject`和 的許可。
+ 如果 `aws lambda-web deploy`建立預設資源，即呼叫 `iam:GetRole`、`iam:CreateRole`、`iam:PutRolePolicy`、`s3:PutBucketPolicy`、 `s3:CreateBucket`和 的許可`s3:PutBucketVersioning`。
+ （選用） Node.js 24 或更新版本以進行本機開發。若要安裝 Node.js，請參閱 Node.js 網站上的[下載Node.js](https://nodejs.org/en/download/)。

## 建立 Web 函數 （主控台）
<a name="web-functions-create-console"></a>

使用 Lambda 主控台建立 Web 函數、其第一個修訂版，以及其第一個接收流量的端點。

**建立 Web 函數和端點 （主控台）**

1. 開啟位於 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 的 Lambda 主控台。

1. 在導覽窗格中，選擇 **Web 函數**。

1. 選擇**建立 Web 函數**。

1. 在**基本資訊**下，請執行下列動作：

   1. 在**函數名稱**中，輸入 Web 函數的名稱。

   1. 針對**執行期**，保留預設執行期。

   1. 對於**程式碼來源**，請讓 **Hello World 範本**從預先設定的範例應用程式開始。若要改為部署您自己的程式碼，請選擇**上傳 ZIP 檔案**或 **Amazon S3**。

1. 在**端點組態**下，執行下列動作：

   1. 在**端點名稱**中，輸入端點的名稱。

   1. 對於**類型**，請保留 **Home-Region**。主區域端點會在單一區域中執行，使其成為第一個 Web 函數最簡單的組態。如需多區域選項，請參閱 [Lambda Web 函數端點](web-functions-endpoints.md)。
**注意**  
您無法在建立後變更端點類型。

   1. 針對**身分驗證類型**，選擇**應用程式受管身分驗證**。使用此選項，Lambda 會將所有請求轉送到您的應用程式，因此您的應用程式會處理身分驗證。若要改為限制存取，請選擇需要呼叫者簽署請求的 **IAM 身分驗證**。對 `HomeRegion`和 `PerRegion` 端點的請求使用 AWS Signature 第 4 版 (SigV4)。對`MultiRegion`端點的請求使用 Signature 第 4a 版 (SigV4a)。如需詳細資訊，請參閱[Lambda Web 函數端點存取控制](web-functions-endpoint-access-control.md)。

   1. 對於**自動部署**，請保留**最新修訂**。在此模式下，Lambda 會在流量變成**作用中**之後，自動將所有流量路由到每個新修訂。對於具有修訂權重的手動流量控制，請選擇**已停用**。如需詳細資訊，請參閱[部署模式](web-functions-deployment.md)。

1. （選用） 展開**其他組態**以覆寫預設設定。根據預設，Lambda 會建立執行角色，其具有將日誌上傳至 Amazon CloudWatch 的許可，以及帳戶中的 Amazon S3 儲存貯體來存放程式碼。在本節中，您可以改為選擇現有的 IAM 角色或您自己的 Amazon S3 儲存貯體，也可以使用客戶受管金鑰、每個環境的並行上限、環境變數和標籤來設定加密。

1. 選擇**建立 Web 函數**。

當您選擇**建立 Web 函數**時，Lambda 會建立 Web 函數資源及其第一個修訂版，並同時建立端點。修訂會在 Lambda 下載您的程式碼並從中準備程式碼成品，然後轉換為**作用中**時，以**待**定狀態開始。端點也會以**待定**狀態開始。Web 函數、其修訂版及其端點會各自獨立進行這些狀態。如需修訂和生命週期狀態的詳細資訊，請參閱 [核心概念](web-functions-how-it-works.md)。

端點會在達到**作用中**時開始服務流量，並且有要路由的**作用中**修訂。若要尋找端點的網域名稱，請在函數詳細資訊頁面上，選擇**端點**索引標籤，然後選擇端點。若要在您自己的網域上提供應用程式，請將 Amazon CloudFront 分佈放在端點前面。如需端點類型和網域名稱的詳細資訊，請參閱 [Lambda Web 函數端點](web-functions-endpoints.md)。

若要確認您的應用程式正在服務流量，請將請求傳送至網域名稱。由於您選擇了**應用程式受管身分驗證**，因此無需簽署即可傳送純請求。

```
curl https://{{your-endpoint-domain-name}}/
```

成功的回應表示您的 Web 函數正在接收流量，而您的應用程式正在處理請求。

## 建立 Web 函數 (AWS CLI)
<a name="web-functions-create-cli"></a>

從終端機建立和部署 Web 函數。入門命令會產生小型 Node.js HTTP 伺服器、部署它，並傳回 HTTPS 端點 URL。

### 部署和測試您的 Web 函數
<a name="web-functions-create-cli-deploy"></a>

**部署和測試入門 Web 函數**

1. 執行以下命令：

   ```
   aws lambda-web deploy --name my-web-app --hello-world
   ```

   `--hello-world` 會將入門檔案寫入 `./my-web-app`，如果目錄不存在，則建立該目錄。啟動者包含 `server.ts`、TypeScript HTTP 伺服器，以及 `README.md`、 `package.json`和 `AGENTS.md`。

1. 部署完成時，請從輸出複製端點 URL。URL 看起來類似以下內容：

   ```
   https://bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws
   ```

1. 將請求傳送至您在上一個步驟中複製的端點 URL。將 {{endpoint-url}} 取代為該 URL：

   ```
   curl {{endpoint-url}}
   ```

   啟動者會傳回類似以下的回應：

   ```
   {"message":"Hello from Lambda Web!","path":"/"}
   ```

根據預設，啟動者端點接受沒有身分驗證的請求。若要要求 IAM 授權，請新增 `--auth-type IamAuth`。如需控制端點存取的資訊，請參閱 [Lambda Web 函數端點存取控制](web-functions-endpoint-access-control.md)。

### 命令建立的內容
<a name="web-functions-create-cli-resources"></a>

在第一個部署上， 命令：
+ 為部署套件建立或重複使用已啟用版本控制的 Amazon S3 儲存貯體。
+ 建立或重複使用具有 Amazon CloudWatch Logs 許可的 IAM 執行角色。
+ 建立 Web 函數及其第一個修訂版。
+ 建立名為 的`HomeRegion`端點`dev`，並等待它變成 `Active`。若要使用不同的名稱，請新增 `--endpoint-name`。

Web 函數包含程式碼和組態的不可變修訂。稍後部署時， 命令會建立另一個修訂。`dev` 端點使用 `LatestRevision` 模式，並在啟用後提供修訂。

### 部署變更
<a name="web-functions-create-cli-change"></a>

編輯入門應用程式後，請執行：

```
aws lambda-web deploy \
  --name my-web-app \
  --code ./my-web-app
```

執行此命令會上傳您更新的套件、建立修訂，並等待修訂變成 `Active`。`dev` 端點已`autoDeploymentMode`設定為 `LatestRevision`並自動提供修訂。其 URL 保持不變。

若要部署您自己的應用程式而非啟動者，請將其目錄傳遞至 `--code`。您的伺服器必須接聽`AWS_LAMBDA_HTTP_ENDPOINT`環境變數中的主機和連接埠。根據預設，執行時間`index.js`會在部署套件的根目錄載入。若要使用不同的項目檔案，請設定 `AWS_LAMBDA_NODEJS_ENTRYPOINT` 環境變數。Lambda 不會確認您的伺服器在建立修訂時開始接聽。因此，`Active`即使請求失敗，修訂和端點也會顯示 。如需詳細資訊，請參閱[Lambda Web 函數執行時間](web-functions-runtimes.md)。

### 使用現有 AWS 資源
<a name="web-functions-create-cli-existing-resources"></a>

如果您已管理 Amazon S3 儲存貯體或 IAM 執行角色，請使用下列命令來重複使用這些資源，而不是建立預設值。儲存貯體必須已啟用版本控制，以及授予 Lambda 服務主體 (`lambda.amazonaws.com`) `s3:GetObject`和 的儲存貯體政策`s3:GetObjectVersion`。命令不會變更您指定的儲存貯體組態。如需儲存貯體需求，請參閱 [Lambda 的儲存貯體政策](web-functions-code-s3.md#web-functions-code-s3-bucket-policy)。將範例資源值取代為您自己的值。

```
aws lambda-web deploy \
  --name my-web-app \
  --code ./my-web-app \
  --bucket-name amzn-s3-demo-bucket \
  --execution-role-arn arn:aws:iam::111122223333:role/my-web-app-execution-role
```

執行角色必須允許 Lambda 擔任它，而且必須授予應用程式所需的許可。如需詳細資訊，請參閱[執行角色](web-functions-permissions.md#web-functions-permissions-execution-role)。

您可以省略任一資源選項，讓 `deploy`建立預設值。當 在沒有 的情況下`deploy`建立 Web 函數`--hello-world`，或新增端點時，會要求您按 Enter 鍵確認。在指令碼或 CI/CD 管道中，新增 `--create` 以在沒有提示的情況下進行確認。

### 直接使用 API 命令
<a name="web-functions-create-cli-api"></a>

`deploy` 命令會將您的程式碼上傳至 Amazon S3，並為您建立 Web 函數、修訂和端點。若要自行控制每個步驟，請使用映射至 API 操作的 AWS CLI 命令，例如 `create-web-function`、 `create-web-function-revision`和 `update-web-function-endpoint`。在下列命令中，將每個使用者輸入預留位置替換為您自己的資訊。

**使用 API 命令建立 Web 函數 (AWS CLI)**

1. 從應用程式目錄建立 .zip 部署套件，您的項目檔案位於套件的根目錄。將套件上傳至符合 中需求的 Amazon S3 儲存貯體[先決條件](web-functions-code-s3.md#web-functions-code-s3-requirements)。下列命令會建立套件，並使用 AWS CLI 來上傳套件。

   ```
   cd {{my-app}}
   zip -r ../my-app.zip .
   aws s3 cp ../my-app.zip s3://{{amzn-s3-demo-bucket}}/my-app.zip
   ```

1. 使用下列 AWS CLI 命令建立 Web 函數及其第一個修訂版和端點。在 中`revisionConfig`，`buildConfig`指定程式碼位置和執行時間，並`serviceConfig`指定執行角色。`endpointConfig` 屬性定義端點。

   ```
   aws lambda-web create-web-function \
       --function-name {{my-web-app}} \
       --revision-config '{
         "buildConfig": {
           "codeConfig": {
             "s3Object": { "bucket": "{{amzn-s3-demo-bucket}}", "key": "my-app.zip" }
           },
           "runtimeConfig": { "runtime": "nodejs24.x" }
         },
         "serviceConfig": {
           "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/{{my-web-app-execution-role}}"
         }
       }' \
       --endpoint-config '{
         "endpointName": "{{my-endpoint}}",
         "endpointType": "HomeRegion",
         "authType": "ApplicationManaged",
         "autoDeploymentMode": "LatestRevision"
       }'
   ```

   `autoDeploymentMode` 屬性是選用屬性。如果您省略它，預設值為 `Disabled`，端點不會自動將流量路由到新的修訂。在回應中記下`revisionId`修訂版的 。

1. 等到修訂版為 `Active`。將 {{rev-abc12}} 取代為上一個步驟的修訂 ID。

   ```
   aws lambda-web wait web-function-revision-active \
       --function-name {{my-web-app}} \
       --revision-id {{rev-abc12}}
   ```

1. 取得端點的詳細資訊。

   ```
   aws lambda-web get-web-function-endpoint \
       --function-name {{my-web-app}} \
       --endpoint-name {{my-endpoint}}
   ```

   當端點的 `state`為 時`Active`，將請求傳送到其 `domainName`。回應看起來如下摘錄。

   ```
   {
       "endpointName": "my-endpoint",
       "endpointType": "HomeRegion",
       "domainName": "bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws",
       "authType": "ApplicationManaged",
       "autoDeploymentMode": "LatestRevision",
       "state": "Active",
       "updateStatus": "Successful"
   }
   ```

**使用 API 命令部署變更 (AWS CLI)**
+ 上傳新套件並建立修訂。修訂是完整的快照，因此`serviceConfig`每次都要傳遞完整的 `buildConfig`和 。

  ```
  aws s3 cp ../my-app.zip s3://{{amzn-s3-demo-bucket}}/my-app.zip
  aws lambda-web create-web-function-revision \
      --function-name {{my-web-app}} \
      --build-config '{
        "codeConfig": {
          "s3Object": { "bucket": "{{amzn-s3-demo-bucket}}", "key": "my-app.zip" }
        },
        "runtimeConfig": { "runtime": "nodejs24.x" }
      }' \
      --service-config '{
        "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/{{my-web-app-execution-role}}"
      }'
  ```

  由於端點已`autoDeploymentMode`設為 `LatestRevision`，因此會在修訂版變成 後將所有流量路由至新修訂版`Active`。如果您將 `autoDeploymentMode`設定為 `Disabled`，則會改為使用 `update-web-function-endpoint`和 修訂權重來路由流量。如需詳細資訊，請參閱[部署模式](web-functions-deployment.md)。

## 清除
<a name="web-functions-create-cleanup"></a>

當您不再需要 Web 函數時，請將其刪除：

```
aws lambda-web delete-web-function --function-name my-web-app
```

此命令也會刪除 Web 函數的端點和修訂。它不會刪除`deploy`建立或使用的資源：IAM 執行角色 (`awscli-lambdaweb-my-web-app`預設）、Amazon S3 儲存貯`lambda-web/my-web-app/`體中的 部署套件 (`awscli-lambdaweb-{{account-id}}-{{region}}-an`預設）、包括非目前物件版本，或 Web 函數的 Amazon CloudWatch Logs 日誌群組。只有在您不再需要這些資源時，才能分別刪除這些資源。受管 Amazon S3 儲存貯體可由相同 AWS 帳戶 和 區域中的其他部署共用。