

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

# QuickStart: 将 Java 应用程序部署到 Elastic Beanstalk
<a name="java-quickstart"></a>

本 QuickStart 教程将引导您完成创建 Java 应用程序并将其部署到 AWS Elastic Beanstalk 环境的过程。

**不用于生产用途**  
示例仅用于演示。请勿在生产环境中使用示例应用程序。

**Topics**
+ [你的 AWS 账户](#java-quickstart-aws-account)
+ [先决条件](#java-quickstart-prereq)
+ [步骤 1：创建 Java 应用程序](#java-quickstart-create-app)
+ [步骤 2：在本地运行应用程序](#java-quickstart-run-local)
+ [步骤 3：使用 EB CLI 部署 Java 应用程序](#java-quickstart-deploy)
+ [步骤 4：在 Elastic Beanstalk 上运行应用程序](#java-quickstart-run-eb-ap)
+ [第 5 步：清理](#java-tutorial-cleanup)
+ [AWS 您的应用程序的资源](#java-quickstart-eb-resources)
+ [后续步骤](#java-quickstart-next-steps)
+ [使用 Elastic Beanstalk 控制台进行部署](#java-quickstart-console)

## 你的 AWS 账户
<a name="java-quickstart-aws-account"></a>

如果您还不是 AWS 客户，则需要创建一个 AWS 帐户。注册后，您就可以访问 Elastic Beanstalk AWS 和其他所需的服务。

如果您已经有一个 AWS 帐户，则可以继续前进[先决条件](#java-quickstart-prereq)。

### 创建一个 AWS 账户
<a name="java-quickstart-aws-account-procedure"></a>

#### 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

#### 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 先决条件
<a name="java-quickstart-prereq"></a>

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

### EB CLI
<a name="java-quickstart-prereq.ebcli"></a>

本教程使用 Elastic Beanstalk 命令行界面 (EB CLI)。有关安装和配置 EB CLI 的详细信息，请参阅 [使用设置脚本安装 EB CLI（推荐）](eb-cli3.md#eb-cli3-install) 和 [配置 EB CLI](eb-cli3-configuration.md)。

### Java 和 Maven
<a name="java-quickstart-prereq.runtime"></a>

如果您的本地计算机上没有安装 Amazon Corretto，则可以按照《*Amazon Corretto 用户指南*》中的[安装说明](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/amazon-linux-install.html)进行安装。

通过运行以下命令来验证您的 Java 安装。

```
~$ java -version 
```

本教程使用 Maven。按照 Apache Maven Project 网站上的[下载](https://maven.apache.org/download.cgi)和[安装](https://maven.apache.org/install.html)说明进行操作。有关 Maven 的更多信息，请参阅 Apache Maven Project 网站上的 [Maven 用户中心](https://maven.apache.org/users/index.html)：

通过运行以下命令来验证您的 Maven 安装。

```
~$ mvn -v
```

## 步骤 1：创建 Java 应用程序
<a name="java-quickstart-create-app"></a>

创建项目目录。

```
~$ mkdir eb-java
~$ cd eb-java
```

接下来，创建一个您将使用 Elastic Beanstalk 部署的应用程序。我们将创建一个 “Hello World” RESTful 网络服务。

此示例使用 [Spring Boot](https://spring.io/projects/spring-boot) 框架。此应用程序在端口 5000 上打开侦听器。Elastic Beanstalk 默认将请求转发到端口 5000 上的应用程序。

创建以下文件：

该文件创建一个简单的 Spring Boot 应用程序。

**Example `~/eb-java/src/main/java/com/example/Application.java`**  

```
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

该文件创建一个映射，返回我们在此处定义的字符串。

**Example `~/eb-java/src/main/java/com/example/Controller.java`**  

```
package com.example;
    
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
    
@RestController
public class Controller {
    
    @GetMapping("/")
    public String index() {
       return "Hello Elastic Beanstalk!";
    }
}
```

此文件定义 Maven 项目配置。

**Example `~/eb-java/pom.xml`**  

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
  </parent>

  <groupId>com.example</groupId>
  <artifactId>BeanstalkJavaExample</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <java.version>21</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
```

此属性文件将默认端口覆盖为 5000。这是 Elastic Beanstalk 向 Java 应用程序发送流量的默认端口。

**Example `~/eb-java/application.properties`**  

```
server.port=5000
```

## 步骤 2：在本地运行应用程序
<a name="java-quickstart-run-local"></a>

使用以下命令打包您的应用程序：

```
~/eb-java$ mvn clean package
```

使用以下命令在本地运行您的应用程序：

```
~/eb-java$ java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
```

在应用程序运行时，在浏览器中导航至 `http://127.0.0.1:5000/`。您应该会看到文本“Hello Elastic Beanstalk\$1”。

## 步骤 3：使用 EB CLI 部署 Java 应用程序
<a name="java-quickstart-deploy"></a>

在将您的 Java 应用程序部署到 Elastic Beanstalk 之前，让我们从目录中清理构建应用程序并创建一个 [Buildfile](java-se-buildfile.md) 和一个 [Procfile](java-se-procfile.md) 来控制如何在您的 Elastic Beanstalk 环境上构建和运行应用程序。

**准备和配置应用程序部署**

1. 清理构建的应用程序。

   ```
   ~/eb-java$ mvn clean
   ```

1. 创建 `Buildfile`。  
**Example `~/eb-java/Buildfile`**  

   ```
   build: mvn clean package
   ```

   此 `Buildfile` 指定用于构建应用程序的命令。如果您没有包括用于 Java 应用程序的 `Buildfile`，Elastic Beanstalk 不会尝试构建您的应用程序。

1. 创建 `Procfile`。  
**Example `~/eb-java/Procfile`**  

   ```
   web: java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
   ```

   此 `Procfile` 指定用于运行应用程序的命令。如果您没有包括用于 Java 应用程序的 `Procfile`，则 Elastic Beanstalk 假定源包的根目录中有一个 JAR 文件，并尝试使用 `java -jar` 命令运行它。

 既然您已经设置了配置文件来构建和启动应用程序，可以部署它了。

**创建环境并部署 Java 应用程序**

1. 使用 **eb init** 命令，初始化 EB CLI 存储库。

   ```
   ~/eb-java eb init -p corretto java-tutorial --region us-east-2
           
   Application java-tutorial has been created.
   ```

   此命令创建名为 `java-tutorial` 的应用程序并配置您的本地存储库，以创建具有最新 Java 平台版本的环境。

1. （可选）再次运行 **eb init** 以配置默认密钥对，以便使用 SSH 连接到运行您的应用程序的 EC2 实例。

   ```
   ~/eb-java$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   如果您已有密钥对，请选择一个，或按提示创建一个。如果您没有看到提示或需要以后更改设置，请运行 **eb init -i**。

1. 创建环境并使用 **eb create** 将应用程序部署到此环境中。Elastic Beanstalk 会自动为您的应用程序生成一个 zip 文件，并在端口 5000 上启动该文件。

   ```
   ~/eb-java$ eb create java-env
   ```

   Elastic Beanstalk 大约需要五分钟来创建您的环境。

## 步骤 4：在 Elastic Beanstalk 上运行应用程序
<a name="java-quickstart-run-eb-ap"></a>

当创建环境的过程完成后，使用 **eb open** 打开您的网站。

```
~/eb-java eb open
```

恭喜您！您已使用 Elastic Beanstalk 部署了 Java 应用程序！这将使用为应用程序创建的域名打开一个浏览器窗口。

## 第 5 步：清理
<a name="java-tutorial-cleanup"></a>

应用程序使用完毕时，您可以终止您的环境。Elastic Beanstalk AWS 会终止与您的环境关联的所有资源。

要使用 EB CLI 终止您的 Elastic Beanstalk 环境，请运行以下命令。

```
~/eb-java$ eb terminate
```

## AWS 您的应用程序的资源
<a name="java-quickstart-eb-resources"></a>

您刚刚创建了一个单实例应用程序。它可用作带有单个 EC2 实例的简单示例应用程序，因此不需要负载平衡或自动扩缩。对于单实例应用程序，Elastic Beanstalk 会创建以下资源： AWS 
+ **EC2 实例** - 配置来在您选择的平台上运行 Web 应用程序的 Amazon EC2 虚拟机。

  各平台运行一组不同的软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为在 Web 应用程序前处理 Web 流量的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** - 配置为允许端口 80 上的传入流量的 Amazon EC2 安全组。通过此资源，HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+  **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*

Elastic Beanstalk 管理所有这些资源。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。

## 后续步骤
<a name="java-quickstart-next-steps"></a>

有了运行应用程序的环境以后，您随时可以部署新的应用程序版本或不同的应用程序。部署新应用程序版本非常快，因为不需要配置或重新启动 EC2 实例。您还可以使用 Elastic Beanstalk 控制台探索新环境。有关详细步骤，请参阅本指南*入门*一章中的[探索您的环境](GettingStarted.md#GettingStarted.Explore)。

**尝试更多教程**  
如果您想尝试包含不同示例应用程序的其他教程，请参阅 [示例应用程序和教程](java-getstarted.md)。

部署一到两个示例应用程序并准备好开始在本地开发和运行 Java 应用程序后，请参阅 [设置 Java 开发环境](java-development-environment.md)。

## 使用 Elastic Beanstalk 控制台进行部署
<a name="java-quickstart-console"></a>

您还可以使用 Elastic Beanstalk 控制台来启动示例应用程序。有关详细步骤，请参阅本指南*入门*一章中的[创建示例应用程序](GettingStarted.md#GettingStarted.CreateApp)。