

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Lambda Java 部署 Lam AWS SAM b CodeBuild da 函数
<a name="sample-lambda-sam-gradle"></a>

 AWS Serverless Application Model (AWS SAM) 是一个用于构建无服务器应用程序的开源框架。有关更多信息，请参阅上的[AWS Serverless Application Model 存储库](https://github.com/aws/serverless-application-model) GitHub。以下 Java 示例使用 Gradle 来构建和测试 AWS Lambda 函数。之后，使用 AWS SAM CLI 来部署 CloudFormation 模板和部署包。通过使用 CodeBuild Lambda，构建、测试和部署步骤均可自动处理，从而无需手动干预单个构建即可快速更新基础架构。

## 设置您的 AWS SAM 存储库
<a name="sample-lambda-sam-gradle.set-up-repo"></a>

使用 AWS SAM CLI 创建 AWS SAM `Hello World`项目。

**创建您的 AWS SAM 项目**

1. 按照《*AWS Serverless Application Model 开发者指南*》中的说明在本地计算机上[安装 AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)。

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://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  如果显示 CodeBuild 信息页面，请选择 “**创建构建项目**”。否则，请在导航窗格中，展开**构建**，选择**构建项目**，然后选择**创建构建项目**。

1. 在**项目名称**中，输入此构建项目的名称。每个 AWS 账户中的构建项目名称必须是唯一的。您还可以包含构建项目的可选描述，以帮助其他用户了解此项目的用途。

1. 在**源代码**中，选择 AWS SAM 项目所在的源存储库。

1. 在**环境**中：
   + 在**计算**中，选择 **Lambda**。
   + 在**运行时**中，选择 **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 policy**（编辑信任策略）。

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**

1. 在 CodeBuild 控制台中，选择您的构建项目，然后选择 “**编辑**” 和 “**Buildspec**”。

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 (更新构建规范)**。

## 部署您的 AWS SAM Lambda 基础架构
<a name="sample-lambda-sam-gradle.deploy"></a>

使用 CodeBuild Lambda 自动部署您的 Lambda 基础架构

**部署 Lambda 基础设施**

1. 选择**启动构建**。这将自动构建、测试您的 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 项目来删除您的项目**。