

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

# 使用 AWS SAM 搭配 CodeBuild Lambda Java 部署 Lambda 函數
<a name="sample-lambda-sam-gradle"></a>

 AWS Serverless Application Model (AWS SAM) 是用於建置無伺服器應用程式的開放原始碼架構。如需詳細資訊，請參閱 GitHub 上的儲存[AWS Serverless Application Model 庫](https://github.com/aws/serverless-application-model)。下列 Java 範例使用 Gradle 來建置和測試 AWS Lambda 函數。之後，會使用 AWS SAM CLI 來部署 CloudFormation 範本和部署套件。透過使用 CodeBuild Lambda，系統會自動處理建置、測試和部署步驟，以便快速更新基礎設施，而無需在單一建置中手動介入。

## 設定您的 AWS SAM 儲存庫
<a name="sample-lambda-sam-gradle.set-up-repo"></a>

使用 CLI AWS SAM 建立 AWS SAM `Hello World`專案。

**建立您的 AWS SAM 專案**

1. 請遵循在本機電腦上[安裝 CLI AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)的 *AWS Serverless Application Model 開發人員指南*中的指示。

1. 執行`sam init`並選取下列專案組態。

   ```
   Which template source would you like to use?: 1 - AWS Quick Start Templates
   Choose an AWS Quick Start application template: 1 - Hello World Example
   Use the most popular runtime and package type? (Python and zip) [y/N]: N
   Which runtime would you like to use?: 8 - java21
   What package type would you like to use?: 1 - Zip
   Which dependency manager would you like to use?: 1 - gradle
   Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N
   Would you like to enable monitoring using CloudWatch Application Insights? [y/N]: N
   Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]:  N
   Project name [sam-app]: <insert project name>
   ```

1. 將 AWS SAM 專案資料夾上傳至支援的來源儲存庫。如需支援的來源類型清單，請參閱 [ProjectSource](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)。

## 建立 CodeBuild Lambda Java 專案
<a name="sample-lambda-sam-gradle.create-project"></a>

建立 AWS CodeBuild Lambda Java 專案並設定建置所需的 IAM 許可。

**建立 CodeBuild Lambda Java 專案**

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1.  如果顯示 CodeBuild 資訊頁面，請選擇**建立組建專案**。否則，請在導覽窗格中展開**組**建，選擇**組建專案**，然後選擇**建立組建專案**。

1. 在 **Project name (專案名稱)** 中，輸入此建置專案的名稱。組建專案名稱在每個 AWS 帳戶中必須是唯一的。您也可以包含建置專案的選用描述，以協助其他使用者了解此專案的用途。

1. 在**來源**中，選取 AWS SAM 專案所在的來源儲存庫。

1. 在 **Environment (環境)** 中：
   + 針對**運算**，選取 **Lambda**。
   + 針對 **Runtime(s)**，選取 **Java**。
   + 針對**影像**，選取 **aws/codebuild/amazonlinux-x86\$164-lambda-standard：corretto21**。
   + 對於**服務角色**，保留選取**新的服務角色**。記下**角色名稱**。當您稍後在此範例中更新專案的 IAM 許可時，這是必要的。

1. 選擇 **Create build project (建立建置專案)**。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後選取與您的專案相關聯的服務角色。您可以透過選取建置專案、選擇**編輯**、**環境，然後選擇服務角色**，在 CodeBuild 中尋找專案角色。 ****

1. 選擇 **Trust Relationships** (信任關係) 標籤，然後選擇 **Edit Trust Relationship** (編輯信任政策)。

1. 將下列內嵌政策新增至您的 IAM 角色。這將用於稍後部署您的 AWS SAM 基礎設施。如需詳細資訊，請參閱《 IAM 使用者指南》**中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Action": [
                   "cloudformation:*",
                   "lambda:*",
                   "iam:*",
                   "apigateway:*",
                   "s3:*"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------

## 設定專案 buildspec
<a name="sample-lambda-sam-gradle.set-up-buildspec"></a>

為了建置、測試和部署 Lambda 函數，CodeBuild 會從 buildspec 讀取和執行建置命令。

**設定您的專案 buildspec**

1. 在 CodeBuild 主控台中，選取您的建置專案，然後選擇**編輯**和**建置規格**。

1. 在 **Buildspec** 中，選擇**插入建置命令**，然後**切換到編輯器**。

1. 刪除預先填入的建置命令，並貼到下列 buildspec 中。

   ```
   version: 0.2
   env:
     variables:
       GRADLE_DIR: "HelloWorldFunction"
   phases:
     build:
       commands:
         - echo "Running unit tests..."
         - cd $GRADLE_DIR; gradle test; cd ..
         - echo "Running build..."
         - sam build --template-file template.yaml
         - echo "Running deploy..."
         - sam package --output-template-file packaged.yaml --resolve-s3 --template-file template.yaml
         - yes | sam deploy
   ```

1. 選擇 **Update buildspec (更新 buildspec)**。

## 部署您的 AWS SAM Lambda 基礎設施
<a name="sample-lambda-sam-gradle.deploy"></a>

使用 CodeBuild Lambda 自動部署 Lambda 基礎設施

**部署 Lambda 基礎設施**

1. 選擇 **Start build (開始組建)**。這會自動建置、測試和部署您的 AWS SAM 應用程式以 AWS Lambda 使用 CloudFormation。

1. 建置完成後，導覽至 AWS Lambda 主控台，並在 AWS SAM 專案名稱下搜尋新的 Lambda 函數。

1. 在函數概觀下選取 **API Gateway**，然後按一下 **API 端點** URL，以測試您的 Lambda **函數**。您應該會看到開啟的頁面，其中包含訊息 `"message": "hello world"`。

## 清除您的基礎設施
<a name="sample-lambda-sam-gradle.clean-up"></a>

若要避免您在本教學課程中使用的資源進一步收費，請刪除 AWS SAM 範本和 CodeBuild 建立的資源。

**清除您的基礎設施**

1. 導覽至 CloudFormation 主控台，然後選取 `aws-sam-cli-managed-default`。

1. 在 **資源**中，清空部署儲存貯體 `SamCliSourceBucket`。

1. 刪除`aws-sam-cli-managed-default`堆疊。

1. 刪除與您的 AWS SAM 專案相關聯的 CloudFormation 堆疊。此堆疊應與 AWS SAM 專案具有相同的名稱。

1. 導覽至 CloudWatch 主控台，並刪除與 CodeBuild 專案相關聯的 CloudWatch 日誌群組。

1. 導覽至 CodeBuild 主控台，然後選擇刪除組建專案來刪除您的 CodeBuild 專案。 ****