

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

# 使用 Elastic Beanstalk 部署 Go 应用程序
<a name="create_deploy_go"></a>

本章提供有关配置 Go Web 应用程序并将其部署到 AWS Elastic Beanstalk的说明。Elastic Beanstalk 让您能够使用 Amazon Web Services 轻松部署、管理和扩展您的 Go Web 应用程序。

您可以使用 Elastic Beanstalk 命令行界面（EB CLI）或 Elastic Beanstalk 控制台在几分钟内部署您的应用程序。部署 Elastic Beanstalk 应用程序后，您可以继续使用 EB CLI 来管理您的应用程序和环境，也可以使用 Elastic Beanstalk 控制台或。 AWS CLI APIs

按照 step-by-step说明[QuickStart for Go](go-quickstart.md)使用 EB CLI 创建和部署 *Hello World* Go Web 应用程序。

**Topics**
+ [QuickStart: 在 Elastic Beanstalk 上部署 Go 应用程序](go-quickstart.md)
+ [为 Elastic Beanstalk 设置 Go 开发环境](go-devenv.md)
+ [使用 Elastic Beanstalk Go 平台](go-environment.md)

# QuickStart: 在 Elastic Beanstalk 上部署 Go 应用程序
<a name="go-quickstart"></a>

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

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

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

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

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

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

### 创建一个 AWS 账户
<a name="go-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="go-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="go-quickstart-prereq.ebcli"></a>

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

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

创建项目目录。

```
~$ mkdir eb-go
~$ cd eb-go
```

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

本示例输出根据访问服务所使用的路径而变化的自定义问候语。

在此目录中创建名为 `application.go` 的文本文件，包含以下内容：

**Example `~/eb-go/application.go`**  

```
package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	if r.URL.Path == "/" {
		fmt.Fprintf(w, "Hello World! Append a name to the URL to say hello. For example, use %s/Mary to say hello to Mary.", r.Host)
	} else {
		fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
	}
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":5000", nil)
}
```

## 步骤 2：使用 EB CLI 部署 Go 应用程序
<a name="go-quickstart-deploy"></a>

下一步，您将创建应用程序环境并使用 Elastic Beanstalk 部署已配置的应用程序。

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

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

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

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

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

   ```
   ~/eb-go$ 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-go$ eb create go-env
   ```

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

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

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

```
~/eb-go$ eb open
```

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

## 步骤 4：清除
<a name="go-tutorial-cleanup"></a>

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

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

```
~/eb-go$ eb terminate
```

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

您刚刚创建了一个单实例应用程序。它是一个简单的示例应用程序，只有一个 EC2 实例，因此不需要负载平衡或 auto Scaling。对于单实例应用程序，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="go-quickstart-next-steps"></a>

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

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

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

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

# 为 Elastic Beanstalk 设置 Go 开发环境
<a name="go-devenv"></a>

本主题提供了设置 Go 开发环境以便在将应用程序部署到 AWS Elastic Beanstalk之前在本地对其进行测试的说明。它还引用了提供有用工具安装说明的网站。

## 安装 Go
<a name="go-devenv-go"></a>

要在本地运行 Go 应用程序，请装 Go。如果您不需要特定版本，请获取 Elastic Beanstalk 支持的最新版本。有关受支持版本的列表，请参阅 *AWS Elastic Beanstalk 平台*文档中的 [Go](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)。

[通过 https://golang 下载 Go。 org/doc/install](https://golang.org/doc/install)。

## 安装适用于 Go 的 S AWS DK
<a name="go-devenv-awssdk"></a>

如果您需要从应用程序内部管理 AWS 资源，请使用以下命令安装 AWS SDK for Go。

```
$ go get github.com/aws/aws-sdk-go
```

有关更多信息，请参阅 [AWS SDK for Go](https://aws.amazon.com/sdk-for-go/)。

# 使用 Elastic Beanstalk Go 平台
<a name="go-environment"></a>

本主题介绍如何在 Elastic Beanstalk 上配置、构建和运行 Go 应用程序。

AWS Elastic Beanstalk 支持不同版本的 Go 编程语言的许多平台分支。有关完整列表，请参阅 *AWS Elastic Beanstalk 平台*文档中的 [Go](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)。

对于简单的 Go 应用程序，有两种部署方式：
+ 通过根目录中名为 `application.go` 的源文件提供源包，该文件包含应用程序的主程序包。Elastic Beanstalk 使用以下命令生成二进制文件：

  ```
  go build -o bin/application application.go
  ```

  应用程序生成后，Elastic Beanstalk 在端口 5000 上启动它。
+ 通过名为 `application` 的二进制文件提供源包。此二进制文件可位于源包的根目录或源包的 `bin/` 目录中。如果您将 `application` 二进制文件同时放在这两个位置，Elastic Beanstalk 将使用 `bin/` 目录中的文件。

  Elastic Beanstalk 在端口 5000 上启动此应用程序。

在这两种情况下，通过我们支持的 Go 平台分支，您还可以在名为 `go.mod` 的文件中提供模块要求。有关更多信息，请参阅 Go 博客中的[迁移到 Go 模块](https://blog.golang.org/migrating-to-go-modules)。

对于更复杂的 Go 应用程序，有两种部署方式：
+ 提供包含应用程序源文件的源包，同时提供 [Buildfile](go-buildfile.md) 和 [Procfile](go-procfile.md)。Buildfile 包含用于生成应用程序的命令，Procfile 包含用于运行应用程序的指令。
+ 提供包含应用程序二进制文件的源包，同时提供 Procfile。Procfile 包含用于运行应用程序的指令。

Go 平台包括一个代理服务器，用于提供静态资产并将流量转发到您的应用程序。您可以[扩展或覆盖默认代理配置](go-nginx.md)，以适应高级方案。

有关扩展 Elastic Beanstalk 基于 Linux 的平台的各种方法的详细信息，请参阅 [扩展 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

## 配置 Go 环境
<a name="go-options"></a>

Go 平台设置允许您微调 Amazon EC2 实例的行为。您可以使用 Elastic Beanstalk 控制台编辑 Elastic Beanstalk 环境 EC2 的亚马逊实例配置。

使用 Elastic Beanstalk 控制台启用到 Amazon S3 的日志轮换，并配置应用程序可从环境中读取的变量。

**在 Elastic Beanstalk 控制台中配置 Go 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

### 日志选项
<a name="go-options-logs"></a>

“日志选项”部分有两个设置：
+ **Instance profile**（实例配置文件）– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。
+ **启用向 Amazon S3 的日志文件轮换-指定是否将**应用程序的 Amazon EC2 实例的日志文件复制到与您的应用程序关联的 Amazon S3 存储桶中。

### 静态文件
<a name="go-options-staticfiles"></a>

为了提高性能，您可以使用 **Static files**（静态文件）部分配置代理服务器，以便从 Web 应用程序内的一组目录提供静态文件（例如 HTML 或图像）。对于每个目录，您都将虚拟路径设置为目录映射。当代理服务器收到对指定路径下的某个文件的请求时，它将直接提供此文件，而不是将请求路由至您的应用程序。

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息，请参阅 [提供静态文件](environment-cfg-staticfiles.md)。

### 环境属性
<a name="go-options-properties"></a>

**环境属性**部分允许您在运行您的应用程序的 Amazon EC2 实例上指定环境配置设置。环境属性会以密钥值对的形式传递到应用程序。

在运行于 Elastic Beanstalk 中的 Go 环境内，可通过使用 `os.Getenv` 函数访问环境变量。例如，您可以使用以下代码将名为 `API_ENDPOINT` 的属性读取到某个变量：

```
endpoint := os.Getenv("API_ENDPOINT")
```

参阅 [环境变量和其他软件设置](environments-cfg-softwaresettings.md) 了解更多信息。

## Go 配置命名空间
<a name="go-namespaces"></a>

您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

Go 平台不定义任何特定于平台的命名空间。您可以使用 `aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空间将代理配置为提供静态文件。有关详细信息和示例，请参阅[提供静态文件](environment-cfg-staticfiles.md)。

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。

## Amazon Linux AMI（在 Amazon Linux 2 之前）的 Go 平台
<a name="go.alami"></a>

如果您的 Elastic Beanstalk Go 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请阅读本节中的其他信息。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### Go 配置命名空间 — 亚马逊 Linux AMI () AL1
<a name="go.alami.namespaces"></a>

您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。

除了[所有平台支持的命名空间](command-options-general.md)外，Amazon Linux AMI Go 平台还支持一个特定于平台的配置命名空间。使用 `aws:elasticbeanstalk:container:golang:staticfiles` 命名空间可以定义一些选项，通过它们将您的 Web 应用程序路径映射到应用程序源包中包含静态内容的文件夹。

例如，该[配置文件](ebextensions.md)告诉代理服务器在路径 `/images` 上的 `staticimages` 文件夹中提供文件：

**Example .ebextensions/go-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:golang:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。

# 在 Elastic Beanstalk 上使用 Procfile 配置自定义启动命令
<a name="go-procfile"></a>

要指定用于启动 Go 应用程序的自定义命令，请在源包根目录中包含一个名为 `Procfile` 的文件。

有关编写和使用 `Procfile` 的详细信息，请参阅 [Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)。

**Example Procfile**  

```
web: bin/server
queue_process: bin/queue_processor
foo: bin/fooapp
```

您必须调用主应用程序 `web`，并在 `Procfile` 中将其列为第一个命令。Elastic Beanstalk 在环境的根 URL 上公开主 `web` 应用程序；例如，`http://my-go-env.elasticbeanstalk.com`。

Elastic Beanstalk 还会运行名称没有 `web_` 前缀的任何应用程序，但这些应用程序在您的实例外部不可用。

Elastic Beanstalk 希望从 `Procfile` 运行的进程一直运行。Elastic Beanstalk 会监控这些应用程序并重启所有终止的进程。对于短期运行的进程，请使用 [Buildfile](go-buildfile.md) 命令。

## 在 Amazon Linux AMI（在 Amazon Linux 2 之前）上使用 Procfile
<a name="go-procfile.alami"></a>

如果您的 Elastic Beanstalk Go 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请阅读本节中的其他信息。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### 端口传递 — 亚马逊 Linux AMI (AL1)
<a name="go-procfile.alami.ports"></a>

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。

Elastic Beanstalk 配置 nginx 代理，使其在应用程序的 `PORT` [环境属性](go-environment.md#go-options)中指定的端口号上转发对应用程序的请求。您的应用程序应始终侦听该端口。您可以通过在应用程序中调用 `os.Getenv("PORT")` 方法访问此变量。

Elastic Beanstalk 使用 `PORT` 环境属性中指定的端口号作为 `Procfile` 中第一个应用程序的端口，然后对 `Procfile` 中的每个后续应用程序的端口号递增 100。如果未设置 `PORT` 环境属性，则 Elastic Beanstalk 使用 5000 作为初始端口。

在前面的示例中，`web` 应用程序的 `PORT` 环境属性为 5000，`queue_process` 应用程序使用 5100，`foo` 应用程序使用 5200。

您可以通过 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) 命名空间设置 `PORT` 选项从而指定初始端口，如下例所示。

```
option_settings:
  - namespace:  aws:elasticbeanstalk:application:environment
    option_name:  PORT
    value:  <first_port_number>
```

有关为应用程序设置环境属性的更多信息，请参阅 [选项设置](ebextensions-optionsettings.md)。

# 在 Elastic Beanstalk 上使用 Buildfile 进行自定义构建和配置
<a name="go-buildfile"></a>

要为您的 Go 应用程序指定自定义的生成和配置命令，请在源包根目录中包含一个名为 `Buildfile` 的文件。文件名区分大小写。`Buildfile` 应采用以下格式：

```
<process_name>: <command>
```

`Buildfile` 中的命令必须符合以下正则表达式：`^[A-Za-z0-9_]+:\s*.+$`。

Elastic Beanstalk 不会监控通过 `Buildfile` 运行的应用程序。对于短期运行并在完成任务后终止的命令，请使用 `Buildfile`。对于长期运行、不应退出的应用程序进程，请使用 [Procfile](go-procfile.md)。

在下面的 `Buildfile` 示例中，`build.sh` 是位于源包根目录的 Shell 脚本：

```
make: ./build.sh
```

`Buildfile` 中的所有路径都是源包根目录的相对路径。如果您事先知道这些文件在实例上的位置，则可以在 `Buildfile` 中使用绝对路径。

# 配置代理服务器
<a name="go-nginx"></a>

Elastic Beanstalk 使用 nginx 作为反向代理，将应用程序映射到端口 80 上的 Elastic Load Balancing 负载均衡器。Elastic Beanstalk 提供一个默认 nginx 配置，您可以扩展该配置，也可以使用您自己的配置完全覆盖该配置。

默认情况下，Elastic Beanstalk 将 nginx 代理配置为通过端口 5000 向您的应用程序转发请求。您可以覆盖默认端口，方法是将 `PORT` [环境属性](go-environment.md#go-options)设置为主应用程序侦听的端口。

**注意**  
应用程序侦听的端口不会影响 nginx 服务器为了从负载均衡器接收请求而侦听的端口。

**在平台版本上配置代理服务器**  
所有 AL2 023/ AL2 平台都支持统一的代理配置功能。有关在运行 AL2 023/ 的平台版本上配置代理服务器的更多信息AL2，请参阅。[反向代理配置](platforms-linux-extend.proxy.md)

## 在 Amazon Linux AMI（在 Amazon Linux 2 之前）上配置代理
<a name="go-nginx.alami"></a>

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

如果您的 Elastic Beanstalk Go 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请阅读本节中的信息。

### 扩展和覆盖默认代理配置 — Amazon Linux AMI () AL1
<a name="go-nginx.alami.extending"></a>

Elastic Beanstalk 使用 nginx 作为反向代理，将应用程序映射到端口 80 上的负载均衡器。如果您想提供自己的 nginx 配置，可以覆盖 Elastic Beanstalk 提供的默认配置，方法是在源包中包含 `.ebextensions/nginx/nginx.conf` 文件。如果此文件存在，Elastic Beanstalk 会使用它来替代默认的 nginx 配置文件。

如果除 `nginx.conf` `http` 块中的指令外，您还想包含其他指令，可以在源包的 `.ebextensions/nginx/conf.d/` 目录中提供其他配置文件。此目录中的所有文件都必须采用 `.conf` 扩展名。

要利用 Elastic Beanstalk 提供的功能（例如[Elastic Beanstalk 中的增强型运行状况报告和监控](health-enhanced.md)、自动应用程序映射和静态文件），您必须在 nginx 配置文件的 `server` 块中包含下面一行：

```
include conf.d/elasticbeanstalk/*.conf;
```