

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

# 使用 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。

遵循 [QuickStart for Go](go-quickstart.md)的逐步說明，使用 EB CLI 建立和部署 *Hello World* Go Web 應用程式。 step-by-step 

**Topics**
+ [QuickStart：將 Go 應用程式部署到 Elastic Beanstalk](go-quickstart.md)
+ [設定 Elastic Beanstalk 的 Go 開發環境](go-devenv.md)
+ [使用 Elastic Beanstalk Go 平台](go-environment.md)

# QuickStart：將 Go 應用程式部署到 Elastic Beanstalk
<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/signup](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和建立 管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 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 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 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 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](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 Web 服務。

此範例會列印自訂問候語，該問候語依用於存取該服務的路徑而異。

於此目錄建立名為 `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 執行個體的直接範例應用程式，因此不需要負載平衡或自動擴展。對於單一執行個體應用程式，Elastic Beanstalk 會建立下列 AWS 資源：
+ **EC2 執行個體** – 設定在您所選平台上執行 Web 應用程式的 Amazon EC2 虛擬機器。

  每個平台會執行不同一套軟體、設定檔和指令碼，來支援特定的語言版本、架構、Web 容器或其組合。大多數的平台會使用 Apache 或 nginx 做為反向代理，處理您 Web 應用程式前端的網路流量、向它轉送請求、提供靜態資產，並產生存取和錯誤日誌。
+ **執行個體安全群組** – 設定允許從連接埠 80 傳入流量的 Amazon EC2 安全群組。此資源可讓負載平衡器傳來的 HTTP 傳輸資料，到達執行您 Web 應用程式的 EC2 執行個體。在預設情況下，不允許傳輸資料從其他通訊埠傳送。
+ **Amazon S3 儲存貯體** - 儲存位置，用來儲存當您使用 Elastic Beanstalk 時所建立的原始程式碼、日誌和其他成品。
+ **Amazon CloudWatch 警示** – 兩種 CloudWatch 警示，用來監控您環境中執行個體上的負載，會在負載過高或過低時觸發。當警示觸發時，您的 Auto Scaling 群組會擴展或縮減以進行回應。
+ **CloudFormation 堆疊** – Elastic Beanstalk 使用 CloudFormation 啟動環境中的資源並傳播組態變更。資源定義於範本中，您可在 [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.org/doc/install](https://golang.org/doc/install) 下載 Go。

## 安裝適用於 Go 的 AWS SDK
<a name="go-devenv-awssdk"></a>

如果您需要從應用程式中管理 AWS 資源，請使用下列命令安裝 AWS SDK for Go。

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

如需詳細資訊，請參閱[適用於 Go 的AWS 開發套件](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 環境的 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;
```