

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

# 使用 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 環境的 Amazon EC2 執行個體組態。

使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換，和設定您的應用程式可以從環境讀取的變數。

**在 Elastic Beanstalk 主控台中設定 Go 環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

### 日誌選項
<a name="go-options-logs"></a>

Log Options (日誌選項) 區段有兩個設定：
+ **執行個體設定檔** – 指定有權存取與您應用程式相關的 Amazon S3 儲存貯體的執行個體設定檔。
+ **Enable log file rotation to 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>

**Environment Properties (環境屬性)** 的部分可讓您針對執行您應用程式的 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 前身)，請閱讀本節中的其他資訊。

**備註**  
本主題中的資訊僅適用於以 Amazon 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 會根據 Amazon Linux AMI (AL1) 將所有平台分支的狀態設定為**已淘汰**。如需有關遷移至完全支援的目前 Amazon Linux 2023 平台分支的詳細資訊，請參閱 [將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### Go 組態命名空間 — Amazon Linux AMI (AL1)
<a name="go.alami.namespaces"></a>

您可以使用[組態檔案](ebextensions.md)來設定組態選項，並在部署期間執行其他的執行個體設定工作。組態選項可以是[平台特定](command-options-specific.md)選項，也可以套用至 Elastic Beanstalk 服務整體中的所有[平台](command-options-general.md)。組態選項會組織成*命名空間*。

**注意**  
本主題中的資訊僅適用於以 Amazon Linux AMI (AL1) 為基礎的平台分支。AL2023/AL2 平台分支與舊版 Amazon Linux AMI (AL1) 平台版本不相容，*需要不同的組態設定*。

除了所有平台皆支援的命名空間外，Amazon Linux AMI Go 平台亦支援一個[平台特定的組態命名空間](command-options-general.md)。`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 會將主要 `web` 應用程式公開於環境的根 URL，例如，`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 前身)，請閱讀本節中的其他資訊。

**備註**  
本主題中的資訊僅適用於以 Amazon 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 會根據 Amazon Linux AMI (AL1) 將所有平台分支的狀態設定為**已淘汰**。如需有關遷移至完全支援的目前 Amazon Linux 2023 平台分支的詳細資訊，請參閱 [將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### 連接埠傳遞 — Amazon Linux AMI (AL1)
<a name="go-procfile.alami.ports"></a>

**注意**  
本主題中的資訊僅適用於以 Amazon 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 伺服器為接收來自負載平衡器的請求所接聽的連接埠。

**在您的平台版本上設定代理伺服器**  
所有 AL2023/AL2 平台皆支援統一的代理組態功能。如需在執行 AL2023/AL2 的平台版本上設定代理伺服器的詳細資訊，請參閱 [反向代理組態](platforms-linux-extend.proxy.md)。

## 在 Amazon Linux AMI (之前的 Amazon Linux 2) 上設定代理
<a name="go-nginx.alami"></a>

**備註**  
本主題中的資訊僅適用於以 Amazon 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 會根據 Amazon 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 組態，您可以將 `.ebextensions/nginx/nginx.conf` 檔案納入原始碼套件，藉此覆寫 Elastic Beanstalk 提供的預設組態。只要此檔案存在，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;
```