

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

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

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

Amazon Elastic Beanstalk 支持不同版本的 Go 编程语言的许多平台分支。有关完整列表，请参阅 *Amazon Elastic Beanstalk 平台*文档中的 [Go](https://docs.amazonaws.cn/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.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

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 或 Amazon 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.amazonaws.cn/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 或 Amazon CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。