

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

# Elastic Beanstalk 平台
<a name="concepts-all-platforms"></a>

AWS Elastic Beanstalk 提供各種平台，您可以在這些平台上建置您的應用程式。您針對這些平台來設計 Web 應用程式，而 Elastic Beanstalk 會將您的程式碼部署到您選擇來建立作用中應用程式環境的平台版本。

Elastic Beanstalk 為各種程式設計語言 、應用程式伺服器及 Docker 容器提供平台。部分平台有多個並行支援的版本。

**Topics**
+ [Elastic Beanstalk 平台詞彙表](platforms-glossary.md)
+ [Elastic Beanstalk 平台維護的共同責任模型](platforms-shared-responsibility.md)
+ [Elastic Beanstalk 平台支援政策](platforms-support-policy.md)
+ [Elastic Beanstalk 平台發行排程](platforms-schedule.md)
+ [支援 Elastic Beanstalk 的平台](concepts.platforms.md)
+ [Elastic Beanstalk Linux 平台](platforms-linux.md)
+ [擴充 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)

# Elastic Beanstalk 平台詞彙表
<a name="platforms-glossary"></a>

以下是與 AWS Elastic Beanstalk 平台及其生命週期相關的重要術語。

**執行時期**  
執行您應用程式碼所需之程式設計語言特定的執行時間軟體 (架構、程式庫、解譯器、vm 等等)。

**Elastic Beanstalk 元件**  
Elastic Beanstalk 在平台上新增的軟體元件可啟用 Elastic Beanstalk 功能。例如，收集和報告運作狀態資訊需要使用增強型運作狀態代理程式。

**平台**  
作業系統 (OS)、執行時間、Web 伺服器、應用程式伺服器和 Elastic Beanstalk 元件的組合。平台提供可用於執行應用程式的元件。

**平台版本**  
特定作業系統 (OS) 版本、執行時間、Web 伺服器、應用程式伺服器和 Elastic Beanstalk 元件的組合。您根據平台版本建立 Elastic Beanstalk 環境，並在此環境中部署應用程式。  
平台版本的語意版本編號格式為 *X.Y.Z*，*X* 表示主要版本、*Y* 表示次要版本，*Z* 則是修補程式版本。  
平台版本可以是以下其中一個狀態：  
+ *建議* – 支援平台分支中的最新平台版本。此版本包含up-to-date元件，建議用於生產環境。當 Elastic Beanstalk 發行新的平台版本時，新版本會取代先前的版本，並成為對應平台分支的建議平台版本。
+ *不建議* – 不是其平台分支中最新版本的任何平台版本。雖然這些版本可能仍然有效，但我們強烈建議更新至最新的平台版本。您可以使用[受管平台更新](environment-platform-update-managed.md)來協助自動保持up-to-date。
您可以使用 AWS CLI 命令**[describe-platform-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-platform-version.html)**並檢查 `PlatformLifecycleState` 欄位，驗證是否建議使用平台版本。

**平台分支**  
一系列平台版本，會共用某些元件的特定 (通常是主要) 版本，例如作業系統 (OS)、執行時間或 Elastic Beanstalk 元件。例如：*在 64 位元 Amazon Linux 2023 上執行的 Python 3.13*；在 *64 位元 Windows Server 2025 上執行的 IIS 10*.0。平台分支會以新平台版本的形式接收更新。分支中的每個連續平台版本都是先前版本的更新。  
您可以無條件使用每個支援平台分支中的建議版本來建立環境。在新版本取代之前，具有作用中或終止環境的帳戶仍可存取先前的平台版本。先前的平台版本缺少up-to-date元件，不建議使用。  
如果您需要存取上述標準可用性以外的先前平台版本，您可以聯絡 [AWS 支援中心](https://console.aws.amazon.com/support/home#/)尋求協助。
平台分支可以是以下其中一個狀態：  
+ *支援的* – 目前的平台分支。它完全由*支援的元件*組成。支援的元件尚未達到供應商指定的生命週期結束 (EOL)。它會持續接收平台更新，建議用於生產環境。如需支援的平台分支清單，請參閱《平台指南》中的 [Elastic Beanstalk 支援的](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html)*AWS Elastic Beanstalk 平台*。
+ *Beta* – 預覽版，發行前平台分支。這本質上是實驗性的。它可能會持續收到平台更新一段時間，但沒有長期支援。不建議在生產環境中使用 beta 平台分支。僅用於評估。如需 Beta 平台分支的清單，請參閱《 [平台指南》中的公有 Beta 版中的 Elastic Beanstalk 平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-beta.html)。 *AWS Elastic Beanstalk *
+ *已棄用* – 平台分支，其中一或多個元件 （例如執行時間或作業系統） 正在接近生命週期結束 (EOL) 或已達到 EOL，如其供應商所指定。雖然已取代的平台分支會持續接收新的平台版本，直到其淘汰日期為止，但已達到 EOL 的元件不會接收更新。例如，如果執行時間版本達到 EOL，平台分支會標記為已棄用，但會繼續接收作業系統更新，直到平台分支淘汰日期為止。平台分支不會繼續接收 EOL 執行期版本的更新。不建議使用已棄用的平台分支。
+ *已淘汰* – 不再接收任何更新的平台分支。淘汰的平台分支無法使用 Elastic Beanstalk 主控台建立新的 Elastic Beanstalk 環境。如果您的環境使用已淘汰的平台分支，您必須更新到支援的平台分支，才能繼續接收更新。不建議使用已淘汰的平台分支。如需已淘汰平台分支的詳細資訊，請參閱 [Elastic Beanstalk 平台支援政策](platforms-support-policy.md)。如需排定淘汰的平台分支清單，請參閱[淘汰平台分支排程](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-schedule.html#platforms-support-policy.depracation)。若要查看過去淘汰的平台分支，請參閱[淘汰的平台分支歷史記錄](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-schedule.html#platforms-support-policy.retired)。
如果您的環境使用已棄用或已淘汰的平台分支，建議您將其更新為支援的平台分支中的平台版本。如需詳細資訊，請參閱[更新您 Elastic Beanstalk 環境的平台版本](using-features.platform.upgrade.md)。  
您可以使用 AWS CLI 命令來驗證平台分支的狀態，**[describe-platform-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-platform-version.html)**並檢查 `PlatformBranchLifecycleState` 欄位。

**平台更新**  
新平台版本的版本，其中包含平台某些元件的更新：OS、執行時間、Web 伺服器、應用程式伺服器和 Elastic Beanstalk 元件。當 Elastic Beanstalk 發行新的平台版本時，新版本會取代先前的版本，並成為對應平台分支的建議平台版本。平台更新遵循語意版本分類，並且可以有三個層級：  
+ *重大更新* – 變更內容與現有平台版本不相容的更新。您可能需要修改應用程式，才能在新的主要版本上正確執行。重大更新有新的主要平台版本編號。
+ *次要更新* – 在大多數情況下，具有與現有平台版本回溯相容的變更的更新。根據您的應用程式，您可能需要修改應用程式，才能在新的次要版本上正確執行。次要更新有新的次要平台版本編號。
+ *修補程式更新* – 包含之維護版本 (錯誤修正、安全更新和效能改善) 與現有平台版本回溯相容的更新。修補程式更新有新的修補程式平台版本編號。

**受管更新**  
自動套用 Elastic Beanstalk 支援平台版本之作業系統 (OS)、執行時間、web 伺服器、應用程式伺服器和 Elastic Beanstalk 元件修補程式和次要更新的 Elastic Beanstalk 功能。受管更新會將相同平台分支中的較新平台版本套用至您的環境。您可以設定受管更新只套用修補程式更新，或同時套用次要與修補程式更新。您也可以完全停用受管更新。  
如需詳細資訊，請參閱[受管平台更新](environment-platform-update-managed.md)。

# Elastic Beanstalk 平台維護的共同責任模型
<a name="platforms-shared-responsibility"></a>

AWS 和我們的客戶共同承擔實現高階軟體元件安全性和合規性的責任。此共同模型可降低您的作業負擔。

如需詳細資訊，請參閱 AWS [共同的責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。

AWS Elastic Beanstalk 透過提供*受管更新*功能，協助您執行共同責任模型。此功能會自動套用 Elastic Beanstalk 支援平台版本的修補程式和次要更新。如果受管更新失敗，Elastic Beanstalk 會通知您以確保您知悉此失敗，從而可立即採取行動。

如需詳細資訊，請參閱[受管平台更新](environment-platform-update-managed.md)。

此外，Elastic Beanstalk 可以執行以下操作：
+ 發佈其[平台支援政策](platforms-support-policy.md)以及接下來 12 個月的淘汰排程。
+ 發行作業系統 (OS)、執行時間、應用程式伺服器和 web 伺服器元件的修補程式、次要和重大更新，可用性一般為 30 天。Elastic Beanstalk 負責建立出現在其支援平台版本之 Elastic Beanstalk 元件的更新。所有其他更新直接來自其供應商 (擁有者或社群)。

*我們會在AWS Elastic Beanstalk  版本備註*指南的[版本備註](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/relnotes.html)中公佈支援平台的所有更新。我們也會在 *AWS Elastic Beanstalk  平台*指南中提供所有支援平台及其元件的清單，以及平台歷史記錄。如需更多資訊，請參閱[支援的平台和元件歷史記錄](concepts.platforms.md#concepts.platforms.list)。

您負責下列作業：
+ 更新您控制的所有元件 （在 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)中識別為**客戶**)。這包括確保您應用程式、資料，以及您應用程式所需和您已下載之所有元件的安全性。
+ 確保您的 Elastic Beanstalk 環境在支援的平台版本中執行，並將所有在淘汰平台版本中執行的環境遷移至受支援的版本。
+ 如果您為 Elastic Beanstalk 環境使用自訂 Amazon Machine Image (AMI)，請修補、維護和測試您的自訂 AMI，使其保持最新狀態並與支援的 Elastic Beanstalk 平台版本相容。如需使用自訂 AMI 管理環境的詳細資訊，請參閱 [在 Elastic Beanstalk 環境中使用自訂 Amazon Machine Image (AMI)](using-features.customenv.md)。
+ 解決所有因受管更新嘗試所引起的問題，重試更新。
+ 如果選擇不使用 Elastic Beanstalk 受管更新，則要自行修補作業系統、執行時間、應用程式伺服器和 web 伺服器。您可[手動套用平台更新](using-features.platform.upgrade.md)執行此作業，或直接修補所有相關環境資源中的元件。
+ 根據 AWS [共同的責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，管理您在 Elastic Beanstalk 之外使用的任何 AWS 服務的安全性和合規性。

# Elastic Beanstalk 平台支援政策
<a name="platforms-support-policy"></a>

Elastic Beanstalk 支援的平台分支仍會繼續收到其供應商 (擁有者或社群) 提供的次要和修補程式更新。如需相關辭彙的完整定義，請參閱[Elastic Beanstalk 平台詞彙表](platforms-glossary.md)。

## 已淘汰的平台分支
<a name="platforms-support-policy.retired-platforms"></a>

當支援的平台分支元件由其供應商標示為生命週期結束 (EOL) 時，Elastic Beanstalk 會將平台分支標示為已淘汰。平台分支的元件包括下列項目：作業系統 (OS)、執行階段語言版本、應用程式伺服器或 Web 伺服器。

平台分支標示為已淘汰後，適用下列政策：
+ Elastic Beanstalk 停止提供維護更新，包括安全性更新。
+ Elastic Beanstalk 不再為已淘汰的平台分支提供技術支援。
+ Elastic Beanstalk 不再將平台分支提供給新的 Elastic Beanstalk 客戶，以部署到新的環境。對於具有在已淘汰平台分支上執行的作用中環境的現有客戶，自發佈的淘汰日期起，有 90 天寬限期。

**注意**  
淘汰的平台分支將無法在 Elastic Beanstalk 主控台中使用。不過，如果客戶根據已淘汰的平台分支擁有現有環境，則可透過 AWS CLI、EB CLI 和 EB API 取得。現有客戶也可以使用[複製環境](using-features.managing.clone.md)和[重建環境](environment-management-rebuild.md)主控台。

如需排定淘汰的平台分支清單，請參閱下列 *Elastic Beanstalk 平台排程*主題[正在淘汰的平台分支排程](platforms-schedule.md#platforms-support-policy.depracation)中的 。

如需環境平台分支淘汰時預期情況的詳細資訊，請參閱 [平台淘汰常見問答集](using-features.migration-al.FAQ.md)。

## 超過 90 天寬限期
<a name="platforms-support-policy.beyond-grace"></a>

我們的已淘汰平台分支政策不會移除環境的存取權，也不會刪除資源。不過，在已淘汰的平台分支上執行 Elastic Beanstalk 環境的現有客戶應該注意這樣做的風險。由於供應商標記其元件 EOL，此類環境最終可能會遇到無法預測的情況，因為 Elastic Beanstalk 無法提供已淘汰平台分支的安全更新、技術支援或修正程式。

例如，在淘汰的平台分支上執行的環境中可能會出現有害且嚴重的安全漏洞。或者，如果 EB API 動作隨著時間的推移變得與 Elastic Beanstalk 服務不相容，則可能會停止在此環境中工作。已淘汰平台分支上的環境保持作用中狀態的時間越長，這些類型的風險的機會就越大。我們強烈建議您將所有 Elastic Beanstalk 環境更新為受支援的平台版本，以便繼續享有元件供應商透過最新版本提供的重要安全性、效能和功能增強好處。

如果您的應用程式在淘汰的平台分支上執行時遇到問題，而且您無法將其遷移到支援的平台，則需要考慮其他替代方案。解決方法包括將應用程式封裝到 Docker 映像檔以將其作為 Docker 容器執行。這可讓客戶使用任何 Docker 解決方案，例如我們的 Elastic Beanstalk AL2023/AL2 Docker 平台，或其他以 Docker 為基礎的服務，例如 Amazon ECS 或 Amazon EKS。非 Docker 替代方案包括 AWS CodeDeploy 我們的服務，這可讓您完全自訂所需的執行時間。

# Elastic Beanstalk 平台發行排程
<a name="platforms-schedule"></a>

除了每月定期發行新平台分支版本之外，我們的發行維護也包含下列程序：
+  *新平台分支的發行* – 這些分支通常會引入執行時間語言、作業系統或應用程式伺服器的新主要版本。
+  *淘汰平台分支* – 當其中一個元件達到生命週期結束 (EOL) 時，我們必須淘汰平台分支。如需已淘汰分支政策的詳細資訊，請參閱 [Elastic Beanstalk 平台支援政策](platforms-support-policy.md)

**Topics**
+ [規劃資源](#platforms-support-policy.resources)
+ [即將發佈的平台分支版本](#platforms-support-policy.upcoming-releases)
+ [正在淘汰的平台分支排程](#platforms-support-policy.depracation)
+ [淘汰的平台分支歷史記錄](#platforms-support-policy.retired)
+ [已淘汰的伺服器和作業系統歷史記錄](#platforms-support-policy.retired.components)

## 規劃資源
<a name="platforms-support-policy.resources"></a>

下列資源可協助您規劃在 Elastic Beanstalk 平台上執行之應用程式的維護和支援。
+ [AWS Elastic Beanstalk 平台指南](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/welcome.html) — 本指南提供我們每個平台分支的詳細元件清單。它也會依發行日期提供具有相同詳細資訊的平台歷史記錄。本指南可以在平台分支的特定元件變更時通知您。如果您的應用程式開始有不同的行為，您也可以在平台指南中交叉參考發生的日期，以查看是否有任何平台變更可能會影響您的應用程式。
+ [AWS Elastic Beanstalk 版本備註](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/relnotes.html) - 我們的版本備註宣布所有平台版本，包括次要版本和主要版本。這包括我們的每月平台更新、安全性版本、修正程式和淘汰公告。您可以從版本備註文件訂閱我們的 RSS 摘要。

## 即將發佈的平台分支版本
<a name="platforms-support-policy.upcoming-releases"></a>

下表列出即將推出的 Elastic Beanstalk 平台分支及其目標發行日期。這些日期是暫時性的，可能會有所變更。


|  執行時間版本/平台分支  |  作業系統  |  目標發行日期  | 
| --- | --- | --- | 
|   Python 3.15   |  Amazon Linux 2023  |  2026 年 11 月  | 
|   Node.js 26   |  Amazon Linux 2023  |  2026 年 11 月  | 
|   .NET 11   |  Amazon Linux 2023  |  2026 年 12 月  | 
|   PHP 8.6   |  Amazon Linux 2023  |  2027 年 1 月  | 
|   Ruby 4.1   |  Amazon Linux 2023  |  2027 年 2 月  | 

## 正在淘汰的平台分支排程
<a name="platforms-support-policy.depracation"></a>

下表列出排定淘汰的 Elastic Beanstalk 平台分支，因為其部分元件已達到其生命週期結束 (EOL)。當 Amazon Linux AL2-based平台分支的淘汰日期不晚於 2026 年 6 月 30 日。如需 Amazon Linux 2 的詳細資訊，請參閱 [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/)。

如需包含其特定元件的淘汰平台分支的詳細清單，請參閱 [平台指南中的淘汰平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-retiring.html)。 *AWS Elastic Beanstalk *


|  執行時間版本/平台分支  |  目標淘汰日期  | 
| --- | --- | 
| PHP 8.1 AL2023 | 2026 年 3 月 31 日 | 
| PHP 8.1 AL2 | 2026 年 3 月 31 日 | 
| Docker AL2 | 2026 年 6 月 30 日 | 
| ECS AL2 | 2026 年 6 月 30 日 | 
| Go 1 AL2 | 2026 年 6 月 30 日 | 
| Corretto 8 AL2 | 2026 年 6 月 30 日 | 
| Corretto 11 AL2 | 2026 年 6 月 30 日 | 
| Corretto 17 AL2 | 2026 年 6 月 30 日 | 
| Corretto 8 with Tomcat 9 AL2 | 2026 年 6 月 30 日 | 
| Corretto 11 with Tomcat 9 AL2 | 2026 年 6 月 30 日 | 
| .NET Core AL2 | 2026 年 6 月 30 日 | 
| Python 3.9 AL2023 | 2026 年 7 月 31 日 | 
| Ruby 3.2 AL2023 | 2026 年 7 月 31 日 | 
| Node.js 20 AL2023 | 2026 年 7 月 31 日 | 
| IIS 10.0 on Windows Server 2016 (& Core) | 2026 年 9 月 30 日 | 
| PHP 8.2 AL2023 | 2027 年 3 月 31 日 | 
| .NET 9 AL2023 | 2027 年 3 月 31 日 | 
| .NET 8 AL2023 | 2027 年 3 月 31 日 | 

## 淘汰的平台分支歷史記錄
<a name="platforms-support-policy.retired"></a>

下表列出已處於淘汰狀態的 Elastic Beanstalk 平台分支。您可以在平台指南的平台歷史記錄中[，查看這些平台分支及其元件的詳細歷史記錄](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history.html)。 *AWS Elastic Beanstalk *


**Amazon Linux 2023 (AL2023)**  

|  執行時間版本/平台分支  |  淘汰日期  | 
| --- | --- | 
|   .NET 6 AL2023  |  2025 年 4 月 8 日  | 
|   Node.js 18 AL2023  |  2025 年 8 月 11 日  | 


**Amazon Linux 2 (AL2)**  

|  執行時間版本/平台分支  |  淘汰日期  | 
| --- | --- | 
|   Corretto 11 with Tomcat 8.5 AL2  |  2024 年 10 月 10 日  | 
|   Corretto 8 with Tomcat 8.5 AL2   |  2024 年 10 月 10 日  | 
|   Corretto 11 with Tomcat 7 AL2  |  2022 年 6 月 29 日  | 
|   Corretto 8 with Tomcat 7 AL2   |  2022 年 6 月 29 日  | 
|   Node.js 18 AL2   | 2025 年 8 月 11 日 | 
|   Node.js 16 AL2   | 2024 年 10 月 10 日 | 
|   Node.js 14 AL2   |  2024 年 10 月 10 日  | 
|   Node.js 12 AL2   |  2022 年 12 月 23 日  | 
|   Node.js 10 AL2   |  2022 年 6 月 29 日  | 
|   PHP 8.0 AL2  |  2024 年 10 月 10 日  | 
|   PHP 7.4 AL2  |  2023 年 6 月 9 日  | 
|   PHP 7.3 AL2  |  2022 年 6 月 29 日  | 
|   PHP 7.2 AL2  |  2022 年 6 月 29 日  | 
|   Python 3.8 AL2  |  2025 年 4 月 8 日  | 
|   Python 3.7 AL2  |  2024 年 10 月 10 日  | 
|   Ruby 3.0 AL2  |  2024 年 10 月 10 日  | 
|   Ruby 2.7 AL2  |  2024 年 10 月 10 日  | 
|   Ruby 2.6 AL2  |  2022 年 12 月 23 日  | 
|   Ruby 2.5 AL2  |  2022 年 6 月 29 日  | 


**Amazon Linux AMI (AL1)**  

|  執行時間版本/平台分支  |  淘汰日期  | 
| --- | --- | 
|   Single Container Docker   | 2022 年 7 月 18 日 | 
|   Multicontainer Docker   |  2022 年 7 月 18 日  | 
|   Preconfigured Docker - GlassFish 5.0 with Java 8   |  2022 年 7 月 18 日  | 
|   Go 1   |  2022 年 7 月 18 日  | 
|   Java 8   |  2022 年 7 月 18 日  | 
|   Java 7   |  2022 年 7 月 18 日  | 
|   Java 8 with Tomcat 8.5   |  2022 年 7 月 18 日  | 
|   Java 7 with Tomcat 7   |  2022 年 7 月 18 日  | 
|   Node.js   |  2022 年 7 月 18 日  | 
|   PHP 7.2 - 7.3   |  2022 年 7 月 18 日  | 
|   Python 3.6   |  2022 年 7 月 18 日  | 
|  Ruby 2,4, 2.5, 2.6 with Passenger   |  2022 年 7 月 18 日  | 
|   Ruby 2.4, 2.5, 2.6 with Puma  |  2022 年 7 月 18 日  | 
| Go 1.3–1.10 | 2020 年 10 月 31 日 | 
| Java 6 | 2020 年 10 月 31 日 | 
| Node.js 4.x–8.x | 2020 年 10 月 31 日 | 
| PHP 5.4–5.6 | 2020 年 10 月 31 日 | 
| PHP 7.0–7.1 | 2020 年 10 月 31 日 | 
| Python 2.6、2.7、3.4 | 2020 年 10 月 31 日 | 
| Ruby 1.9.3 | 2020 年 10 月 31 日 | 
| Ruby 2.0–2.3 | 2020 年 10 月 31 日 | 

**注意**  
 [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) 將所有平台分支的狀態設定為**已淘汰**。如需詳細資訊，請參閱[平台淘汰常見問答集](using-features.migration-al.FAQ.md)。


**Windows Server**  

| 執行時間版本/平台分支 |  淘汰日期  | 
| --- | --- | 
| 在 64 位元 Windows Server (& Core) 2012 R2 上執行的 IIS 8.5 | 2023 年 12 月 4 日 | 
| 在 64 位元 Windows Server (和 Core) 2012 R2 0.1.0 版上執行的 IIS 8.5 |  2022 年 6 月 29 日  | 
| 在 64 位元 Windows Server (和 Core) 2012 R2 1.2.0 版上執行的 IIS 8.5 |  2022 年 6 月 29 日 | 
| 在 64 位元 Windows Server 2016 (和 Core) 1.2.0 版上執行的 IIS 10.0 |  2022 年 6 月 29 日 | 
| 在 64 位元 Windows Server 2012 R1 平台分支上執行的 IIS 8 | 2022 年 6 月 22 日 | 
| 在 64 位元 Windows Server 2012 R1 0.1.0 版上執行的 IIS 8  | 2022 年 6 月 22 日 | 
| 在 64 位元 Windows Server 2012 R1 1.2.0 版上執行的 IIS 8 | 2022 年 6 月 22 日 | 

**注意**  
如需有關 *Windows 2012 R2* 平台分支機構[淘汰的詳細資訊，請參閱*AWS Elastic Beanstalk 版本*說明中退休的 Windows Server 2012 年 R2 平台分支](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-12-04-windows-2012-retire.html)。

## 已淘汰的伺服器和作業系統歷史記錄
<a name="platforms-support-policy.retired.components"></a>

下表提供 Elastic Beanstalk 平台不再支援的作業系統、應用程式伺服器和 Web 伺服器歷史記錄。所有使用這些元件的平台分支現在都已淘汰。日期反映包含元件之最後一個 Elastic Beanstalk 平台分支的淘汰日期。


**作業系統**  

|  作業系統版本  |  平台淘汰日期  | 
| --- | --- | 
|   Windows Server 2012 R2 running IIS 8.5  |  2023 年 12 月 4 日  | 
|   Windows Server Core 2012 R2 running IIS 8.5  |  2023 年 12 月 4 日  | 
|  Amazon Linux AMI (AL1)  |  2022 年 7 月 18 日  | 
| Windows Server 2012 R1 | 2022 年 6 月 22 日 | 
| Windows Server 2008 R2 | 2019 年 10 月 28 日 | 


**應用程式伺服器**  

|  應用程式伺服器版本  |  平台淘汰日期  | 
| --- | --- | 
| Tomcat 7 |  2022 年 6 月 29 日針對 Amazon Linux 2 (AL2) 平台 2022 年 7 月 18 日針對 Amazon Linux AMI (AL1) 平台  | 
| Tomcat 8 | 2020 年 10 月 31 日 | 
| Tomcat 6 | 2020 年 10 月 31 日 | 


**Web 伺服器**  

|  Web 伺服器版本  |  平台淘汰日期  | 
| --- | --- | 
| 在 64 位元 Windows Server 上執行的 IIS 8 | 2022 年 6 月 22 日 | 
| Apache HTTP 伺服器 2.2 | 2020 年 10 月 31 日 | 
| Nginx 1.12.2 | 2020 年 10 月 31 日 | 

# 支援 Elastic Beanstalk 的平台
<a name="concepts.platforms"></a>

AWS Elastic Beanstalk 提供各種平台，您可以在這些平台上建置您的應用程式。您針對這些平台來設計 Web 應用程式，而 Elastic Beanstalk 會將您的程式碼部署到您選擇來建立作用中應用程式環境的平台版本。

Elastic Beanstalk 會佈建所需的資源 (包括一或多個 Amazon EC2 執行個體)，來執行您的應用程式。Amazon EC2 執行個體上執行的軟體堆疊取決於您為環境選取的特定平台版本。

**平台分支的解決方案堆疊名稱**  
您可以使用指定平台分支版本*的解決方案堆疊名稱*，透過 [EB CLI](eb-cli3.md)、[Elastic Beanstalk API](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/) 或 [AWS CLI](https://aws.amazon.com/cli/) 啟動環境。*AWS Elastic Beanstalk 平台*指南會在 [Elastic Beanstalk 支援的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html)和[平台歷史記錄](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history.html)區段中，列出平台分支版本下*的解決方案堆疊名稱*。

若要擷取可用於建立環境的所有解決方案堆疊名稱，請使用 [ListAvailableSolutionStacks](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_ListAvailableSolutionStacks.html) API 或 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-available-solution-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-available-solution-stacks.html)中的 。

您可以自訂和設定您應用程式在平台中依賴的軟體。在[在 Linux 伺服器上自訂軟體](customize-containers-ec2.md)和[在 Windows Server 上自訂軟體](customize-containers-windows-ec2.md)中進一步了解。詳細的版本備註近期已發行，位於 [AWS Elastic Beanstalk 版本備註](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/)。

## 支援的平台和元件歷史記錄
<a name="concepts.platforms.list"></a>

*AWS Elastic Beanstalk 平台*指南會在 [Elastic Beanstalk 支援的平台區段中列出所有目前的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html)分支版本。*平台*指南也會列出每個平台的平台*歷史記錄*，其中包含先前的分支平台版本清單。若要檢視每個平台的平台*歷史記錄*，請選取下列其中一個連結。
+ [Docker](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-docker.html)
+ [Go](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-go.html)
+ [Java SE](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-javase.html)
+ [Tomcat (執行 Java SE)](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-java.html)
+ [Linux 上的 .NET Core](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnetlinux.html)
+ [Windows Server 上的 .NET](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnet.html)
+ [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-nodejs.html)
+ [PHP](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-php.html)
+ [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-python.html)
+ [Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-ruby.html)

# Elastic Beanstalk Linux 平台
<a name="platforms-linux"></a>

Elastic Beanstalk Linux 平台提供大量立即可用的功能。您可以透過多種方式擴充平台以支援您的應用程式。如需詳細資訊，請參閱[擴充 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

Elastic Beanstalk 支援的大多數平台均以 Linux 作業系統為基礎。具體而言，這些平台是以 提供的 Linux 發行版本 Amazon Linux 為基礎 AWS。Elastic Beanstalk Linux 平台使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體，而這些執行個體執行 Amazon Linux。

**Topics**
+ [支援的 Amazon Linux 版本](#platforms-linux.versions)
+ [Elastic Beanstalk Linux 平台的清單](#platforms-linux.list)
+ [執行個體部署工作流程](platforms-linux-extend.workflow.md)
+ [執行於 Amazon Linux 2 和更新版本的 ECS 的執行個體部署工作流程](platforms-linux-extend.workflow.ecs-al2.md)
+ [適用於 Elastic Beanstalk 環境的平台指令碼工具](custom-platforms-scripts.md)

## 支援的 Amazon Linux 版本
<a name="platforms-linux.versions"></a>

AWS Elastic Beanstalk 支援以 Amazon Linux 2 和 Amazon Linux 2023 為基礎的平台。

如需 Amazon Linux 2 和 Amazon Linux 2023 的詳細資訊，請參閱下列內容：
+ **Amazon EC2 ***使用者指南中的 Amazon Linux Amazon EC2 * [Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html)。
+ **Amazon Linux 2023** –《*Amazon Linux 2023 使用者指南*》中的[什麼是 Amazon Linux 2023？](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html)

如需支援平台版本的詳細資訊，請參閱[支援 Elastic Beanstalk 的平台](concepts.platforms.md)。

**注意**  
您可以將應用程式從 Elastic Beanstalk AL1 或 AL2 平台分支遷移到同等的 AL2023 平台分支。如需詳細資訊，請參閱[將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### Amazon Linux 2023
<a name="platforms-linux.versions.al2023"></a>

AWS 於 2023 年 3 月宣布 Amazon Linux 2023 [正式上市](https://aws.amazon.com//blogs/aws/amazon-linux-2023-a-cloud-optimized-linux-distribution-with-long-term-support/)。《*Amazon Linux 2023 使用者指南*》總結說明了 Amazon Linux 2 與 Amazon Linux 2023 間的主要差異。如需詳細資訊，請參閱《使用者指南》中的[比較 Amazon Linux 2 及 Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html)。

Elastic Beanstalk Amazon Linux 2 和 Amazon Linux 2023 平台之間具有高度相容性。雖然有部分差異需要注意：
+ **執行個體中繼資料服務版本 1 (IMDSv1)** – AL2023 平台上的 [DisableIMDSv1](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 選項設定預設為 `true`。AL2 平台上的預設值為 `false`。
+ **pkg-repo 執行個體工具** — [pkg-repo](custom-platforms-scripts.md#custom-platforms-scripts.pkg-repo) 工具不適用於在 AL2023 平台上執行的環境。不過，您仍可手動將套件和作業系統更新套用至 AL2023 執行個體。如需詳細資訊，請參閱《*Amazon Linux 2023 使用者指南*》中的[管理套件和作業系統更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。
+ **Apache HTTPd 組態** — AL2023 平台的 Apache `httpd.conf` 檔案具有部分與 AL2 不同的組態設定：
  + 在預設情況下，拒絕存取伺服器的整個檔案系統。Apache 網站[安全性提示](https://httpd.apache.org/docs/2.4/misc/security_tips.html)頁面上的*依預設保護伺服器檔案*，提供了對此類設定的說明。
  + 拒絕在所有目錄中設定 `.htaccess`的存取權，特別啟用的目錄除外。Apache 網站[安全性提示](https://httpd.apache.org/docs/2.4/misc/security_tips.html)頁面上的*保護系統設定*，提供了對此設定的說明。[Apache HTTP 伺服器教學課程：.htaccess 檔案](https://httpd.apache.org/docs/2.4/howto/htaccess.html)頁面指出，這項設定可能有助於改善效能。
  + 拒絕存取具有名稱模式 `.ht*` 的檔案。此設定可防止 Web 用戶端檢視 `.htaccess` 和 `.htpasswd` 檔案。

  您可以針對您的環境變更上述任何組態設定。如需詳細資訊，請參閱[設定 Apache HTTPD](platforms-linux-extend.proxy.md#platforms-linux-extend.proxy.httpd)。
+ **多行環境變數支援** – AL2023 平台支援系統化服務組態中環境變數和秘密的多行值。Amazon Linux 2 平台不支援多行環境變數值。此增強功能可讓您在 AL2023 平台上使用多行秘密和組態值。如需使用環境變數和秘密的詳細資訊，請參閱 [Amazon Linux 2 環境變數中的多行值](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.multiline)。
+ **CloudWatch 自訂日誌轉送** – 已取代的 CloudWatch Logs 代理程式 (`awslogs` 套件） 不適用於 AL2023 平台。如果您有安裝和使用已棄用`awslogs`代理程式的自訂日誌轉送組態，則必須更新您的組態檔案，以便在從 Amazon Linux 2 遷移至 AL2023 時使用統一的 CloudWatch 代理程式。如需詳細資訊，請參閱[自訂日誌檔串流](AWSHowTo.cloudwatchlogs.md#AWSHowTo.cloudwatchlogs.streaming.custom)。

**平台特定差異**

除了基本作業系統差異之外，Amazon Linux 2 和 AL2023 執行期平台之間也有平台特定的差異：
+ **.NET 平台分支** – Amazon Linux 2 和 AL2023 之間的 .NET 平台分支策略不同。在 Amazon Linux 2 上，.NET Core 平台會在單一平台分支中維護 .NET 主要版本的輪換時段。在 AL2023 上，每個平台分支會固定到特定的 .NET 主要版本 （例如 .NET 9、.NET 10)。

  如果您部署與架構相關的應用程式 （依賴平台安裝的 .NET 執行期的應用程式），您必須選取符合您應用程式目標 .NET 版本的平台分支。如果您部署獨立應用程式 （綁定自己的 .NET 執行期的應用程式），無論應用程式的 .NET 版本為何，您都可以使用任何 AL2023 .NET 平台分支，因為您的應用程式不依賴於平台安裝的執行期。如需詳細資訊，請參閱[Linux Elastic Beanstalk 平台上 .NET Core 的綁定應用程式](dotnet-linux-platform-bundle-app.md)。
+ **Node.js 版本選擇** – Amazon Linux 2 上的 Node.js 平台支援在您的應用程式`package.json`檔案中指定 Node.js 版本。AL2023 上的 Node.js 平台不支援此功能。您必須使用平台分支提供的預設 Node.js 版本。如需 Node.js 版本管理的詳細資訊，請參閱[在 Elastic Beanstalk 上設定應用程式的相依性](nodejs-platform-dependencies.md)。
+ **Ruby Puma 伺服器版本** – Amazon Linux 2 上的 Ruby 平台會忽略應用程式`Gemfile.lock`檔案中指定的 Puma 版本，並使用平台預設的 Puma 版本。AL2023 上的 Ruby 平台會遵守 中指定的 Puma 版本，`Gemfile.lock`如果有的話。如果未指定版本，平台會安裝平台預設的 Puma 版本。
+ **PHP 套件可用性** – Amazon Linux 2 PHP 平台上提供的某些套件不適用於 AL2023 PHP 平台：
  + *MySQL 用戶端套件* – `mysql`和`mysql-devel`命令列用戶端套件未安裝在 AL2023 PHP 平台上。如果您的應用程式需要 MySQL 資料庫連線，請使用 PHP `mysqli`或 `pdo_mysql`擴充功能，這兩個平台皆可使用。
  + *Compass 和 Ruby 工具* – Compass CSS 架構支援的 `ruby-devel`和 `rubygems`套件不會安裝在 AL2023 PHP 平台上。Compass 已棄用。請考慮使用現代 CSS 預先處理工具做為替代方案。
+ **Go 版本控制工具** – Bazaar 版本控制系統 (`bzr`) 不適用於 AL2023 Go 平台。Bazaar 已棄用，不包含在 AL2023 套件儲存庫中。請改用 Git、Mercurial 或 Subversion 進行版本控制，所有這些都可以在 AL2023 Go 平台上使用。

## Elastic Beanstalk Linux 平台的清單
<a name="platforms-linux.list"></a>

以下清單列出 Elastic Beanstalk 針對不同程式設計語言和 Docker 容器支援的 Linux 平台。Elastic Beanstalk 為以 Amazon Linux 2 和 Amazon Linux 2023 為基礎的平台提供所有以下支援。如需有關平台的詳細資訊，請選取相應的連結。
+ [Docker (和 ECS Docker)](create_deploy_docker.md) 
+ [Go](create_deploy_go.md)
+ [Tomcat (執行 Java SE)](create_deploy_Java.md)
+ [Java SE](create_deploy_Java.md)
+ [Linux 上的 .NET Core](create-deploy-dotnet-core-linux.md)
+ [Node.js](create_deploy_nodejs.md)
+ [PHP](create_deploy_PHP_eb.md)
+ [Python](create-deploy-python-apps.md)
+ [Ruby](create_deploy_Ruby.md)

# 執行個體部署工作流程
<a name="platforms-linux-extend.workflow"></a>

**注意**  
本節中的資訊不適用於*執行於 Amazon Linux 2 和 Amazon Linux 2023 的 ECS* 平台分支。如需詳細資訊，請參閱下一節 [執行於 Amazon Linux 2 和更新版本的 ECS 的執行個體部署工作流程AL2 和更新版本上 ECS 的執行個體部署工作流程](platforms-linux-extend.workflow.ecs-al2.md)。

由於可透過多種方式擴充環境的平台，因此隨時了解 Elastic Beanstalk 佈建執行個體或對執行個體執行部署時所發生的情況會很有幫助。下圖顯示這整個部署流程。它描述了部署作業中的各個不同階段，以及 Elastic Beanstalk 在各個階段中採取的步驟。

**備註**  
此圖不代表部署期間 Elastic Beanstalk 在環境執行個體上進行的完整步驟集。此圖表僅供示意，為您提供執行自訂的順序和內容。
為了簡單起見，圖表僅提及 `.platform/hooks/*` 勾點子目錄 (適用於應用程式部署)，而不提及 `.platform/confighooks/*` 勾點子目錄 (適用於組態部署)。後面子目錄中的勾點與圖中對應子目錄中的勾點執行步驟完全相同。

![\[在以 Amazon Linux 為基礎的平台上執行的環境執行個體上延伸項目執行順序的工作流程。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/platforms-linux-extend-order.png)


下列清單詳細說明部署階段和步驟。

1. **初始步驟**

   Elastic Beanstalk 會下載並擷取您的應用程式。在完成這些步驟中的每個步驟後，Elastic Beanstalk 會執行其中一個擴充步驟。

   1. 執行任何組態檔案的 [commands:](customize-containers-ec2.md#linux-commands) 區段中所發現的命令。

   1. 執行原始碼套件 `.platform/hooks/prebuild` 目錄中找到的任何可執行檔案 (`.platform/confighooks/prebuild` 適用於組態部署)。

1. **設定**

   Elastic Beanstalk 會設定應用程式和代理伺服器。

   1. 執行原始碼套件的 `Buildfile` 中所發現的命令。

   1. 如果原始碼套件的 `.platform/nginx` 目錄中有任何自訂代理組態檔案，則會將其複製到其執行時間位置。

   1. 執行任何組態檔案的 [container\$1commands:](customize-containers-ec2.md#linux-container-commands) 區段中所發現的命令。

   1. 執行原始碼套件 `.platform/hooks/predeploy` 目錄中找到的任何可執行檔案 (`.platform/confighooks/predeploy` 適用於組態部署)。

1. **部署**

   Elastic Beanstalk 會部署並執行應用程式和代理伺服器。

   1. 執行原始碼套件的 `Procfile` 檔案中所發現的命令。

   1. 使用自訂代理組態檔案 (如果有的話)，執行或重新執行代理伺服器。

   1. 執行原始碼套件 `.platform/hooks/postdeploy` 目錄中找到的任何可執行檔案 (`.platform/confighooks/postdeploy` 適用於組態部署)。

# 執行於 Amazon Linux 2 和更新版本的 ECS 的執行個體部署工作流程
<a name="platforms-linux-extend.workflow.ecs-al2"></a>

上一節介紹了在應用程式部署工作流程整個階段支援的可擴展性功能。[*執行於 Amazon Linux 2 和更新版本的 ECS*](create_deploy_docker_ecs.md) 平台分支的 Docker 具有某些差異。本節介紹這些概念如何運用於此特定平台分支。

由於可透過多種方式擴充環境的平台，因此隨時了解 Elastic Beanstalk 佈建執行個體或對執行個體執行部署時所發生的情況會很有幫助。下圖顯示了以*執行於 Amazon Linux 2 的 ECS* 和*執行於 Amazon Linux 2023 的 ECS* 平台分支為基礎的環境的整個部署工作流程。它描述了部署作業中的各個不同階段，以及 Elastic Beanstalk 在各個階段中採取的步驟。

與上一節中描述的工作流程不同，部署組態設定階段不支援以下可擴展性功能：`Buildfile` 命令、`Procfile` 命令、反向代理組態。

**備註**  
此圖不代表部署期間 Elastic Beanstalk 在環境執行個體上進行的完整步驟集。此圖表僅供示意，為您提供執行自訂的順序和內容。
為了簡單起見，圖表僅提及 `.platform/hooks/*` 勾點子目錄 (適用於應用程式部署)，而不提及 `.platform/confighooks/*` 勾點子目錄 (適用於組態部署)。後面子目錄中的勾點與圖中對應子目錄中的勾點執行步驟完全相同。

![\[ECS 型 Docker 平台上環境執行個體上延伸項目執行順序的工作流程。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/platform-ecs-al2-extended-order.png)


下列清單詳細說明了部署工作流程步驟。

1. `EBhooksDir` 下 `appdeploy/pre` 目錄中所發現的任何可執行檔。

1. 執行原始碼套件 `.platform/hooks/prebuild` 目錄中找到的任何可執行檔案 (`.platform/confighooks/prebuild` 適用於組態部署)。

1. 執行原始碼套件 `.platform/hooks/predeploy` 目錄中找到的任何可執行檔案 (`.platform/confighooks/predeploy` 適用於組態部署)。

1. `EBhooksDir` 下 `appdeploy/enact` 目錄中所發現的任何可執行檔。

1. `EBhooksDir` 下 `appdeploy/post` 目錄中所發現的任何可執行檔。

1. 執行原始碼套件 `.platform/hooks/postdeploy` 目錄中找到的任何可執行檔案 (`.platform/confighooks/postdeploy` 適用於組態部署)。

參考 `EBhooksDir` 表示平台勾點目錄的路徑。若要擷取目錄路徑名稱，請使用環境執行個體命令列上的 [get-config](custom-platforms-scripts.md#custom-platforms-scripts.get-config) 指令碼工具，如下所示：

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig -k EBhooksDir
```

# 適用於 Elastic Beanstalk 環境的平台指令碼工具
<a name="custom-platforms-scripts"></a>

本主題說明 為使用 Amazon Linux 平台的環境 AWS Elastic Beanstalk 提供的工具。這些工具位於 Elastic Beanstalk 環境的 Amazon EC2 執行個體上。

## get-config
<a name="custom-platforms-scripts.get-config"></a>

使用 `get-config`工具擷取純文字環境變數值，以及其他平台和執行個體資訊。此工具可於 `/opt/elasticbeanstalk/bin/get-config` 取得。

### get-config 命令
<a name="custom-platforms-scripts.get-config.commands"></a>

每個 `get-config` 工具命令都會傳回特定類型的資訊。使用下列語法可執行任一工具的命令。

```
$ /opt/elasticbeanstalk/bin/get-config command [ options ]
```

以下範例執行 `environment` 命令。

```
$ /opt/elasticbeanstalk/bin/get-config environment -k PORT
```

視您選擇的命令和選項而定，工具會傳回含鍵值對或單一值的物件 (JSON 或 YAML)。

您可以使用 SSH 連線至 Elastic Beanstalk 環境中的 EC2 執行個體，測試 `get-config`。

**注意**  
當您執行 `get-config` 測試時，某些命令可能需要根使用者權限才能存取基礎資訊。如果您收到存取許可錯誤，請在 `sudo` 下重新執行命令。  
在部署到環境的指令碼中使用工具時，不需要新增 `sudo`。Elastic Beanstalk 會以根使用者的身分執行所有指令碼。

以下幾節會說明工具的命令。

#### optionsettings – 組態選項
<a name="custom-platforms-scripts.get-config.commands.optionsettings"></a>

`get-config optionsettings` 命令會傳回一個物件，其中列出針對環境所設定並由環境執行個體平台使用的組態選項。這些選項會依命名空間加以組織。

```
$ /opt/elasticbeanstalk/bin/get-config optionsettings
{"aws:elasticbeanstalk:application:environment":{"JDBC_CONNECTION_STRING":""},"aws:elasticbeanstalk:container:tomcat:jvmoptions":{"JVM Options":"","Xms":"256m","Xmx":"256m"},"aws:elasticbeanstalk:environment:proxy":{"ProxyServer":"nginx","StaticFiles":[""]},"aws:elasticbeanstalk:healthreporting:system":{"SystemType":"enhanced"},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"}}
```

若要傳回特定的組態選項，請使用 `--namespace` (`-n`) 選項來指定命名空間，並使用 `--option-name` (`-o`) 選項指定選項名稱。

```
$ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini -o memory_limit
256M
```

#### environment – 環境屬性
<a name="custom-platforms-scripts.get-config.commands.environment"></a>

`get-config environment` 命令會傳回包含環境屬性清單的物件，包括使用者設定和由 Elastic Beanstalk 提供。使用者設定的屬性在[主控台](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)中定義為*純文字*，或使用組態選項命名空間 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)。

```
$ /opt/elasticbeanstalk/bin/get-config environment
{"JDBC_CONNECTION_STRING":"","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}
```

例如，Elastic Beanstalk 會提供環境屬性，以連線至整合式 Amazon RDS 資料庫執行個體 (例如 `RDS_HOSTNAME`)。這些 RDS 連線屬性會顯示於 `get-config environment` 的輸出內容，但不會出現在 `get-config optionsettings` 的輸出內容。這是因為您並未在組態選項中加以設定。

若要傳回特定環境屬性，請使用 `--key` (`-k`) 選項來指定屬性的鍵。

```
$ /opt/elasticbeanstalk/bin/get-config environment -k TESTPROPERTY
testvalue
```

**注意**  
`get-config` 工具無法擷取[存放秘密的環境變數](AWSHowTo.secrets.env-vars.md)。如需如何以程式設計方式從秘密或參數存放區擷取值的詳細資訊，請參閱 [使用 Secrets Manager](AWSHowTo.secrets.Secrets-Manager-and-Parameter-Store.md#AWSHowTo.secrets.Secrets-Manager)或 [使用 Systems Manager 參數存放區](AWSHowTo.secrets.Secrets-Manager-and-Parameter-Store.md#AWSHowTo.secrets.SSM-parmameter-store)。

#### container – 執行個體組態值
<a name="custom-platforms-scripts.get-config.commands.container"></a>

`get-config container` 命令會傳回一個物件，列出環境執行個體的平台和環境組態值。

下列範例會在 Amazon Linux 2 Tomcat 環境中顯示命令的輸出內容。

```
$ /opt/elasticbeanstalk/bin/get-config container
{"common_log_list":["/var/log/eb-engine.log","/var/log/eb-hooks.log"],"default_log_list":["/var/log/nginx/access.log","/var/log/nginx/error.log"],"environment_name":"myenv-1da84946","instance_port":"80","log_group_name_prefix":"/aws/elasticbeanstalk","proxy_server":"nginx","static_files":[""],"xray_enabled":"false"}
```

要返回特定鍵的值，請使用 `--key` (`-k`) 選項來指定鍵。

```
$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
myenv-1da84946
```

#### addons – 附加元件組態值
<a name="custom-platforms-scripts.get-config.commands.addons"></a>

`get-config addons` 命令會傳回內含環境附加元件組態資訊的物件。您可使用此物件來擷取與環境相關聯的 Amazon RDS 資料庫組態。

```
$ /opt/elasticbeanstalk/bin/get-config addons
{"rds":{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}}
```

您可以使用兩種方式限制結果。若要擷取特定附加元件的值，請使用 `--add-on` (`-a`) 選項來指定附加元件名稱。

```
$ /opt/elasticbeanstalk/bin/get-config addons -a rds
{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}
```

若要傳回附加元件內特定鍵的值，請新增 `--key` (`-k`) 選項以指定鍵。

```
$ /opt/elasticbeanstalk/bin/get-config addons -a rds -k RDS_DB_NAME
ebdb
```

#### platformconfig – 常數組態值
<a name="custom-platforms-scripts.get-config.commands.platformconfig"></a>

`get-config platformconfig` 命令會傳回內含平台組態資訊的物件，該資訊不會因為平台版本而有所改變。在執行相同平台版本的所有環境中，輸出內容相同。命令的輸出物件具有兩個內嵌物件：
+ `GeneralConfig` – 包含所有 Amazon Linux 2 和 Amazon Linux 2023 平台分支最新版本中維持不變的資訊。
+ `PlatformSpecificConfig` – 包含平台版本中維持不變且專屬於該平台版本的資訊。

下列範例顯示針對使用 *Tomcat 8.5 執行 Corretto 11* 平台分支的環境，執行命令會產生哪些輸出內容。

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig
{"GeneralConfig":{"AppUser":"webapp","AppDeployDir":"/var/app/current/","AppStagingDir":"/var/app/staging/","ProxyServer":"nginx","DefaultInstancePort":"80"},"PlatformSpecificConfig":{"ApplicationPort":"8080","JavaVersion":"11","TomcatVersion":"8.5"}}
```

要返回特定鍵的值，請使用 `--key` (`-k`) 選項來指定鍵。這些鍵在兩個嵌入物件中是唯一的鍵。您不需要指定包含鍵的對象。

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir
/var/app/staging/
```

### get-config 輸出選項
<a name="custom-platforms-scripts.get-config.global"></a>

使用 `--output` 選項來指定輸出物件格式。有效值為 `JSON` (預設) 和 `YAML`。這是全域選項。您必須在命令名稱之前加以指定。

以下範例會傳回 YAML 格式的組態選項值。

```
$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings
aws:elasticbeanstalk:application:environment:
  JDBC_CONNECTION_STRING: ""
aws:elasticbeanstalk:container:tomcat:jvmoptions:
  JVM Options: ""
  Xms: 256m
  Xmx: 256m
aws:elasticbeanstalk:environment:proxy:
  ProxyServer: nginx
  StaticFiles:
        - ""
aws:elasticbeanstalk:healthreporting:system:
  SystemType: enhanced
aws:elasticbeanstalk:hostmanager:
  LogPublicationControl: "false"
```

## pkg-repo
<a name="custom-platforms-scripts.pkg-repo"></a>

**注意**  
`pkg-repo` 工具不適用於以 Amazon Linux 2023 平台為基礎的環境。但您可以手動將套件和作業系統更新套用至 AL2023 執行個體。如需詳細資訊，請參閱《*Amazon Linux 2023 使用者指南*》中的[管理套件和作業系統更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)

在某些緊急情況下，您可能需要使用必要 Elastic Beanstalk 平台版本尚未推出的 Amazon Linux 2 安全修補程式來更新 Amazon EC2 執行個體。預設情形下，您無法在 Elastic Beanstalk 環境中執行手動更新。原因在於，平台版本僅能搭配特定版本的 Amazon Linux 2 儲存庫一起使用。藉由這樣的版本鎖定設計，系統能確保執行個體執行的是受支援且一致的軟體版本。發生緊急情況時，如果您需要在環境中安裝 yum 套件，但新版 Elastic Beanstalk 平台尚未發佈該套件時，`pkg-repo` 工具可允許您在 Amazon Linux 2 上手動更新 yum 套件。

Amazon Linux 2 平台上的 `pkg-repo` 工具可提供解鎖 `yum` 套件儲存庫的功能。接著，您就可以手動執行 **yum update**，取得安全性修補程式。相反地，您也可以使用此工具鎖定 yum 套件儲存庫，以防止系統執行其他更新作業，隨著既定的更新時程更新。透過 Elastic Beanstalk 環境中所有 EC2 執行個體的 `/opt/elasticbeanstalk/bin/pkg-repo` 目錄，即可取用 `pkg-repo` 工具。

使用 `pkg-repo` 工具所做的變更只會在您使用該工具的 EC2 執行個體上生效，不會影響其他執行個體，也不會影響環境日後的更新作業。本主題稍後提供的範例會說明如何透過指令碼和組態檔案呼叫 `pkg-repo` 命令，一次變更所有執行個體。

**警告**  
大部分使用者皆不建議使用這項工具。系統會將您套用至解鎖平台版本的任何手動變更項目視為頻外行為。唯有當使用者在緊急情況下可以接受下列風險時，才可使用此選項：  
無法保證套件版本在環境中的所有執行個體之間都能保持一致。
使用 `pkg-repo` 工具修改過的環境不保證能正常運作。這類環境尚未在 Elastic Beanstalk 支援的平台上完成測試和驗證。
我們強烈建議您採取最佳實務，包括執行測試及退出計畫。為協助採取最佳實務，您可使用 Elastic Beanstalk 主控台和 EB CLI 來複製環境及交換環境 URL。如需執行這些作業的詳細資訊，請參閱本指南中*管理環境*章節的[藍/綠部署](using-features.CNAMESwap.md)一節。

如果您打算手動編輯 yum 儲存庫組態檔案，請先執行 `pkg-repo` 工具。yum 儲存庫組態檔案經過手動編輯後，`pkg-repo` 工具可能無法在 Amazon Linux 2 環境中正常運作。這是因為工具可能無法辨識組態的變更項目。

如需 Amazon Linux 套件儲存庫的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[套件儲存庫](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html#package-repository)主題。

### pkg-repo 命令
<a name="custom-platforms-scripts.pkg-repo.commands"></a>

使用下列語法執行 `pkg-repo` 工具的命令。

```
$ /opt/elasticbeanstalk/bin/pkg-repo command [options]
```

該 `pkg-repo` 命令如下：
+ **lock** — 將 `yum` 套件儲存庫鎖定至特定版本
+ **unlock** — 將 `yum` 套件儲存庫與特定版本解除鎖定
+ **status** — 列出所有 `yum` 套件儲存庫及其目前的鎖定狀態
+ **help** — 顯示命令的一般說明或說明內容

這些選項對命令的適用情形如下：
+ `lock`、`unlock` 和 `status ` — 選項：`-h`、`--help` 或無 (預設)。
+ `help` — 選項：`lock`、`unlock`、`status` 或無 (預設)。



以下範例執行 **unlock** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo unlock
Amazon Linux 2 core package repo successfully unlocked
Amazon Linux 2 extras package repo successfully unlocked
```

以下範例執行 **lock** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo lock
Amazon Linux 2 core package repo successfully locked
Amazon Linux 2 extras package repo successfully locked
```

以下範例執行 **status** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo status
Amazon Linux 2 core package repo is currently UNLOCKED
Amazon Linux 2 extras package repo is currently UNLOCKED
```

下列範例針對 **lock** 命令執行 **help** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help lock
```

下列範例針對 `pkg-repo` 工具執行 **help** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help
```

您可以使用 SSH 連線到 Elastic Beanstalk 環境中的執行個體來測試 `pkg-repo`。一種 SSH 選項是 EB CLI [**eb ssh**](eb3-ssh.md) 命令。

**注意**  
這項 `pkg-repo` 工具需有根使用者的權限才能執行。如果您收到存取許可錯誤，請在 `sudo` 下重新執行命令。  
在部署到環境的指令碼或組態檔案中使用工具時，不需要新增 `sudo`。Elastic Beanstalk 會以根使用者的身分執行所有指令碼。

### pkg-repo 範例
<a name="custom-platforms-scripts.pkg-repo.examples"></a>

上一節提供在 Elastic Beanstalk 環境個別 EC2 執行個體上進行測試的命令列範例。就測試作業而言，這種方法相當實用。不過，這種方法一次只能更新一個執行個體，因此不適合將變更項目套用至環境中的所有執行個體。

更務實的方法是使用[平台勾點](platforms-linux-extend.hooks.md)指令碼或 [`.ebextensions`](ebextensions.md) 組態檔案，以一致的方式將變更項目套用至所有執行個體。

下列範例呼叫 [`.ebextensions`](ebextensions.md) 資料夾中組態檔案的 `pkg-repo`。Elastic Beanstalk 會在您部署應用程式原始碼套件時，執行檔案中的 `update_package.config`。

```
.ebextensions
└── update_package.config
```

若要接收最新版本的 *docker* 套件，此組態會在 **yum update** 命令中指定 *docker* 套件。

```
### update_package.config ###

commands:
  update_package:
    command: |
      /opt/elasticbeanstalk/bin/pkg-repo unlock
      yum update docker -y
      /opt/elasticbeanstalk/bin/pkg-repo lock
      yum clean all -y
      rm -rf /var/cache/yum
```

此組態不會在 **yum update** 命令中指定任何套件，因此所有可用的更新都會一併套用。

```
### update_package.config ###

commands:
  update_package:
    command: |
      /opt/elasticbeanstalk/bin/pkg-repo unlock
      yum update -y
      /opt/elasticbeanstalk/bin/pkg-repo lock
      yum clean all -y
      rm -rf /var/cache/yum
```

下列範例以[平台勾點](platforms-linux-extend.hooks.md)的形式呼叫 bash 指令碼的 `pkg-repo`。Elastic Beanstalk 執行 `prebuild` 子目錄中的 `update_package.sh` 指令碼檔案。

```
.platform
└── hooks
    └── prebuild
        └── update_package.sh
```

若要接收最新版本的 *docker* 套件，此指令碼會在 **yum update** 命令中指定 *docker* 套件。如果省略套件名稱，則套用所有可用的更新。前一個組態檔案範例會示範這項操作。

```
### update_package.sh ###

#!/bin/bash

/opt/elasticbeanstalk/bin/pkg-repo unlock
yum update docker -y
/opt/elasticbeanstalk/bin/pkg-repo lock
yum clean all -y
rm -rf /var/cache/yum
```

## download-source-bundle (僅限 Amazon Linux AMI)
<a name="custom-platforms-scripts.download"></a>

Elastic Beanstalk 在 Amazon Linux AMI 平台分支 (前述的 Amazon Linux 2) 上提供一項額外工具：`download-source-bundle`。部署平台時，您可使用這項工具下載應用程式原始碼。此工具可於 `/opt/elasticbeanstalk/bin/download-source-bundle` 取得。

範例指令碼 `00-unzip.sh` 位於環境執行個體的 `appdeploy/pre` 資料夾中。這會示範如何在部署期間使用 `download-source-bundle` 將應用程式原始碼下載至 `/opt/elasticbeanstalk/deploy/appsource` 資料夾。

# 擴充 Elastic Beanstalk Linux 平台
<a name="platforms-linux-extend"></a>

本主題說明如何使用您自己的命令、指令碼、軟體和組態來擴展 Linux 平台。您可能需要擴展平台，才能變更預設代理伺服器和組態。或者，您可能需要自訂平台建置或啟動應用程式的方式。

**Topics**
+ [Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)
+ [平台勾點](platforms-linux-extend.hooks.md)
+ [組態檔案](platforms-linux-extend.config-files.md)
+ [反向代理組態](platforms-linux-extend.proxy.md)
+ [具有擴充功能的應用程式範例](platforms-linux-extend.example.md)

# Buildfile 和 Procfile
<a name="platforms-linux-extend.build-proc"></a>

某些平台可讓您自訂建置或準備應用程式的方式，以及指定執行應用程式的程序。每個單獨的平台主題都特別提到 *Buildfile* 和/或 *Procfile*，如果平台支援它們。在 [Elastic Beanstalk 平台](concepts-all-platforms.md) 下查詢您的特定平台。

對於所有支援的平台，語法和語意都是相同的，如本頁所述。個別的平台主題提到這些檔案的特定用法，以建置和執行各自語言的應用程式。

## Buildfile
<a name="platforms-linux-extend.build"></a>

若要為應用程式指定自訂建置和組態命令，請將名為 `Buildfile` 的檔案放在應用程式原始碼的根目錄中。檔案名稱區分大小寫。請將以下語法用於 `Buildfile`。

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

`Buildfile` 中的命令必須符合下列規則表達式：`^[A-Za-z0-9_-]+:\s*[^\s].*$`。

Elastic Beanstalk 不會監控透過 `Buildfile` 執行的應用程式。針對短期執行且須在任務完成後終止的命令，請使用 `Buildfile`。針對長期執行且不應退出的應用程式程序，請使用 [Procfile](#platforms-linux-extend.proc)。

`Buildfile` 內的所有路徑均相對於原始碼套件的根目錄。在下列 `Buildfile` 的範例中，`build.sh` 為位於原始碼套件根目錄的 Shell 指令碼。

**Example Buildfile**  

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

若要提供自訂建置步驟，建議您將 `predeploy` 平台勾點用於除了最簡單的命令以外的任何項目，而不是使用 `Buildfile`。平台勾點允許使用更豐富的指令碼和更完善的錯誤處理方式。下節將說明平台勾點。

## Procfile
<a name="platforms-linux-extend.proc"></a>

若要指定可啟動和執行應用程式的自訂命令，請將名為 `Procfile` 的檔案放在應用程式原始碼的根目錄中。檔案名稱區分大小寫。請將以下語法用於 `Procfile`。您可以指定一或多個命令。

```
<process_name1>: <command1>
<process_name2>: <command2>
...
```

`Procfile` 中的每一行必須符合下列規則表達式：`^[A-Za-z0-9_-]+:\s*[^\s].*$`

針對長期執行且不應退出的應用程式程序，使用 `Procfile`。Elastic Beanstalk 預期 `Procfile` 執行的程序會持續執行。Elastic Beanstalk 會監控這些程序，並重新啟動終止的任何程序。若是短期執行的程序，請使用 [Buildfile](#platforms-linux-extend.build)。

`Procfile` 內的所有路徑均相對於原始碼套件的根目錄。以下範例 `Procfile` 定義了三個程序。第一個程序 (在此範例中稱為 `web`) 是*主要 Web 應用程式*。

**Example Procfile**  

```
web: bin/myserver
cache: bin/mycache
foo: bin/fooapp
```

Elastic Beanstalk 會將代理伺服器設定為將要求轉送至連接埠 5000 上的主要 Web 應用程式，而且您可以設定此連接埠號碼。`Procfile` 的常見用途是將此連接埠號碼作為命令引數傳遞給您的應用程式。如需代理組態的詳細資訊，請參閱 [反向代理組態](platforms-linux-extend.proxy.md)。

Elastic Beanstalk 會從日誌檔案中的 `Procfile` 程序擷取標準輸出和錯誤串流。Elastic Beanstalk 會在執行程序後，命名日誌檔案，並將其存放至 `/var/log`。例如，前述範例的 `web` 程序，會分別為 `web-1.log` 和 `web-1.error.log` 產生名為 `stdout` 和 `stderr` 的日誌。

# 平台勾點
<a name="platforms-linux-extend.hooks"></a>

平台勾點經過專門設計，可擴充環境的平台。這些是您部署為應用程式原始碼一部分的自訂指令碼與其他可執行檔，而 Elastic Beanstalk 會在各個執行個體佈建階段期間執行。

**注意**  
Amazon Linux AMI 平台版本 (前述的 Amazon Linux 2) 不支援平台勾點。

## 應用程式部署平台勾點
<a name="platforms-linux-extend.hooks.appdeploy"></a>

當您提供用於應用程式部署的新原始碼套件，或是當您進行需要終止和重新建立所有環境執行個體的組態變更時，就會發生*應用程式部署*。

若要提供在應用程式部署期間執行的平台勾點，請將檔案放在原始碼套件中的 `.platform/hooks` 目錄下，位於下列其中一個子目錄中。
+ `prebuild` – 此處的檔案會在 Elastic Beanstalk 平台引擎下載並擷取應用程式原始碼套件後執行，以及在完成本身設定並設定應用程式和 Web 伺服器前執行。

  `prebuild` 檔案會在執行任何組態檔案的 [commands](customize-containers-ec2.md#linux-commands) 區段中所發現的命令後執行，以及在執行 `Buildfile` 命令前執行。
+ `predeploy` – 此處的檔案會在 Elastic Beanstalk 平台引擎設定並設定應用程式和 Web 伺服器後執行，以及在將其部署至其最終執行時間位置前執行。

  `predeploy` 檔案會在執行任何組態檔案的 [container\$1commands](customize-containers-ec2.md#linux-container-commands) 區段中所發現的命令後執行，以及在執行 `Procfile` 命令前執行。
+ `postdeploy` – 此處的檔案會在 Elastic Beanstalk 平台引擎部署應用程式和代理伺服器後執行。

  這是最後一個部署工作流程步驟。

## 組態部署平台勾點
<a name="platforms-linux-extend.hooks.configdeploy"></a>

當您進行只更新環境執行個體而不重新建立組態變更時，就會發生*組態部署*。下列選項更新會造成組態更新。
+ [環境屬性和平台特定設定](environments-cfg-softwaresettings.md)
+ [靜態檔案](environment-cfg-staticfiles.md)
+ [AWS X-Ray 協助程式](environment-configuration-debugging.md)
+ [日誌儲存與串流](environments-cfg-logging.md)
+ 應用程式連接埠 （如需詳細資訊，請參閱 [反向代理組態](platforms-linux-extend.proxy.md))

要提供在組態部署期間執行的勾點，請將它們放置在原始碼套件中的 `.platform/confighooks` 目錄下。與應用程式部署勾點相同的三個子目錄也適用。

## 更多關於平台勾點
<a name="platforms-linux-extend.hooks.more"></a>

可執行檔可以是二進位檔案，或開頭為 `#!` 行且包含其解譯器路徑 (例如 `#!/bin/bash`) 的指令碼檔案。所有檔案都必須有執行許可。使用 `chmod +x` 在勾點檔案上設定執行權限。對於在 2022 年 4 月 29 日或之後發佈的所有以 Amazon Linux 2023 和 Amazon Linux 2 為基礎的平台版本，Elastic Beanstalk 會自動授予執行許可給所有平台勾點指令碼。在此情況下，您不需要手動授予執行許可。如需這些平台版本的清單，請參閱 *AWS Elastic Beanstalk 版本備註指南*中的 [2022 年 4 月 29 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-04-29-linux.html#release-2022-04-29-linux.platforms) Linux 平台版本備註。

Elastic Beanstalk 會依照檔案名稱的辭典編纂方式排序，在這些目錄中逐一執行檔案。所有檔案都會以 `root` 使用者身分執行。平台勾點的目前工作目錄 (cwd) 為應用程式的根目錄。若是 `prebuild` 和 `predeploy` 檔案，這是應用程式暫存目錄，而若是 `postdeploy` 檔案，則是目前的應用程式目錄。如果其中一個檔案失敗 (以非零結束代碼結束)，部署則會中止及失敗。

如果平台勾點文字指令碼含有 Windows *回車/換行* (CRLF) 換行符字元，則可能會失敗。如果檔案儲存在 Windows 主機中，然後傳輸到 Linux 伺服器，就可能包含 Windows CRLF 換行符。對於在 [2022 年 12 月 29 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-12-29-linux.html)或之後發佈的平台，Elastic Beanstalk 會自動將平台勾點文字檔案中的 Windows CRLF 字元轉換為 Linux *換行* (LF) 換行符字元。如果您的應用程式在此日期之前發佈的任何 Amazon Linux 2 平台上執行，則您需要將 Windows CRLF 字元轉換為 Linux LF 字元。完成此操作的一種方法是在 Linux 主機上建立並保存程式碼檔案。也可以在網際網路上找到轉換這些字元的工具。

執行的檔案可存取您已在應用程式選項中定義的所有環境屬性，並可存取 `HOME`、`PATH` 和 `PORT` 這些系統環境變數。

若要將環境變數和其他組態選項的值擷取至您的平台勾點指令碼中，您可以使用在環境執行個體上 Elastic Beanstalk 提供的 `get-config` 公用程式。如需詳細資訊，請參閱 [適用於 Elastic Beanstalk 環境的平台指令碼工具](custom-platforms-scripts.md)。

# 組態檔案
<a name="platforms-linux-extend.config-files"></a>

您可以將[組態檔案](ebextensions.md)新增至應用程式原始碼的 `.ebextensions` 目錄，以設定您 Elastic Beanstalk 環境的各個層面。此外，組態檔案可讓您自訂軟體和您環境的執行個體上的其他檔案，並在執行個體上執行初始化命令。如需詳細資訊，請參閱[在 Linux 伺服器上自訂軟體](customize-containers-ec2.md)。

您也可以使用組態檔案來設定[組態選項](command-options.md)。許多選項可控制平台行為，而其中某些選項為[平台專用](command-options-specific.md)。

對於以 Amazon Linux 2 和 Amazon Linux 2023 為基礎的平台，我們建議您在執行個體佈建期間使用 *Buildfile*、*Procfile* 和 *platform hooks* (平台勾點)，在環境執行個體上設定和執行自訂程式碼。這些機制會在此頁面的先前區段中說明。您仍可在 `.ebextensions` 組態檔案中使用命令和容器命令，但它們並不容易使用。例如，從語法的角度來看，在 YAML 檔案內寫入命令指令碼可能相當困難。對於需要參考 AWS CloudFormation 資源的任何指令碼，您仍然需要使用`.ebextensions`組態檔案。

# 反向代理組態
<a name="platforms-linux-extend.proxy"></a>

所有 Amazon Linux 2 和 Amazon Linux 2023 平台版本都使用 nginx 作為預設反向代理伺服器。Tomcat、Node.js、PHP 和 Python 平台也支援 Apache HTTPD 作為替代方案。若要在這些平台上選取 Apache，請將 `aws:elasticbeanstalk:environment:proxy` 命名空間中的 `ProxyServer` 選項設定為 `apache`。所有平台都會以統一的方式啟用代理伺服器設定，如本節所述。

**注意**  
在 Amazon Linux AMI 平台版本 (前述的 Amazon Linux 2) 上，您可能需要以不同的方式設定代理伺服器。您可以在本指南中[各自的平台主題](concepts-all-platforms.md)下找到這些舊式詳細資訊。

Elastic Beanstalk 會設定您環境執行個體上的代理伺服器，以將環境的根 URL 上的 Web 流量轉送至主要 Web 應用程式；例如 `http://my-env.elasticbeanstalk.com`。

根據預設，Elastic Beanstalk 會設定代理，以將 80 連接埠的傳入請求轉送至連接埠 5000 上的主要 Web 應用程式。您可以在組態檔案中使用 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) 命名空間來設定 `PORT` 環境屬性 (如以下範例所示)，藉此設定此連接埠號碼。

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

如需有關應用程式設定環境變數的詳細資訊，請參閱 [選項設定](ebextensions-optionsettings.md)。

您的應用程式應該會在已於代理中設定的連接埠上進行接聽。如果您使用 `PORT` 環境屬性變更預設連接埠，程式碼可讀取 `PORT` 環境變數的值，藉此存取該連接埠。例如，在 Go 中呼叫 `os.Getenv("PORT")`，或在 Java 中呼叫 `System.getenv("PORT")`。如果您設定代理以將流量傳送至多個應用程式程序，您可以設定多個環境屬性，然後同時在代理組態和應用程式程式碼中使用其值。另一個選項是在 `Procfile` 中以命令引數的形式，將連接埠值傳送至程序。如需更多資訊，請參閱[Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)。

## 設定 nginx
<a name="platforms-linux-extend.proxy.nginx"></a>

Elastic Beanstalk 使用 nginx 做為預設的反向代理伺服器，將您的應用程式映射到 Elastic Load Balancing 負載平衡器。Elastic Beanstalk 提供了預設的 nginx 組態，您可以加以擴展，或使用自己的組態將其完全覆寫。

**注意**  
當您新增或編輯 nginx `.conf` 組態檔案時，請務必將其編碼為 UTF-8 格式。

若要擴充 Elastic Beanstalk 預設 nginx 組態，請將 `.conf` 組態檔案加入您應用程式原始碼套件中名為 `.platform/nginx/conf.d/` 的資料夾。Elastic Beanstalk nginx 組態會自動在此資料夾中加入 `.conf` 檔案。

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- other source files
```

中的組態檔案`.platform/nginx/conf.d/`包含在 nginx 組態的 `http`區塊中。將此位置用於全域套用的組態。

若要擴展預設 nginx `server`區塊組態，請將`.conf`組態檔案新增至應用程式原始碼套件`.platform/nginx/conf.d/elasticbeanstalk/`中名為 的資料夾。Elastic Beanstalk nginx 組態包含 `server`區塊內此資料夾中`.conf`的檔案。

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- conf.d
|           `-- elasticbeanstalk
|               `-- server.conf
`-- other source files
```

使用此位置新增伺服器特定的組態，例如其他位置區塊、自訂錯誤頁面或伺服器層級指令。下列範例會新增自訂位置區塊。

**Example .platform/nginx/conf.d/elasticbeanstalk/server.conf**  

```
location /test {
    return 200 "Hello World!";
    add_header Content-Type text/plain;
}
```

若要完全覆寫 Elastic Beanstalk 預設 nginx 組態，請在 `.platform/nginx/nginx.conf` 的原始碼套件中加入組態：

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- nginx.conf
`-- other source files
```

如果您覆寫了 Elastic Beanstalk nginx 組態，請在 `nginx.conf` 中新增下列的行，以納入適用於 [Elastic Beanstalk 中的增強型運作狀態報告和監控](health-enhanced.md)、自動應用程式映射和靜態檔案的 Elastic Beanstalk 組態。

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

## 設定 Apache HTTPD
<a name="platforms-linux-extend.proxy.httpd"></a>

Tomcat，Node.js，PHP 和 Python 平台允許您選擇 Apache HTTPD 代理服務器作為連至 nginx 的替代方案。這不是預設值。下列範例設定 Elastic Beanstalk 使用 Apache HTTPD。

**Example .ebextensions/httpd-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```
您可以擴展 Elastic Beanstalk 預設 Apache 組態與您的其他組態檔案。或者，您可以完全覆寫 Elastic Beanstalk 預設 Apache 組態。  
若要擴展 Elastic Beanstalk 預設 Apache 組態，請將 `.conf` 組態檔案加入您應用程式原始碼套件中名為 `.platform/httpd/conf.d` 的資料夾。Elastic Beanstalk Apache 組態會自動在此資料夾中加入 `.conf` 檔案。  

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd-proxy.config
|-- .platform
|   -- httpd
|      -- conf.d
|         -- port5000.conf
|         -- ssl.conf
-- index.jsp
```
例如，下列 Apache 2.4 組態會在 5000 埠上新增接聽程式。  

**Example .platform/httpd/conf.d/port5000.conf**  

```
listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
```
若要完全覆寫 Elastic Beanstalk 預設 Apache 組態，請在 `.platform/httpd/conf/httpd.conf` 的原始碼套件中加入組態。  

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd-proxy.config
|-- .platform
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.jsp
```
如果您覆寫了 Elastic Beanstalk Apache 組態，請在 `httpd.conf` 中新增下列的行，以納入適用於 [Elastic Beanstalk 中的增強型運作狀態報告和監控](health-enhanced.md)、自動應用程式映射和靜態檔案的 Elastic Beanstalk 組態。  

```
IncludeOptional conf.d/elasticbeanstalk/*.conf
```

# 具有擴充功能的應用程式範例
<a name="platforms-linux-extend.example"></a>

以下範例示範具有 Elastic Beanstalk Amazon Linux 2 和 Amazon Linux 2023 平台支援之多項擴充功能的應用程式原始碼套件：`Procfile`、`.ebextensions` 組態檔案、自訂勾點和代理組態檔案。

```
~/my-app/
|-- web.jar
|-- Procfile
|-- readme.md
|-- .ebextensions/
|   |-- options.config        # Option settings
|   `-- cloudwatch.config     # Other .ebextensions sections, for example files and container commands
`-- .platform/
    |-- nginx/                # Proxy configuration
    |   |-- nginx.conf
    |   `-- conf.d/
    |       |-- custom.conf
    |       `-- elasticbeanstalk/
    |           `-- server.conf
    |-- hooks/                # Application deployment hooks
    |   |-- prebuild/
    |   |   |-- 01_set_secrets.sh
    |   |   `-- 12_update_permissions.sh
    |   |-- predeploy/
    |   |   `-- 01_some_service_stop.sh
    |   `-- postdeploy/
    |       |-- 01_set_tmp_file_permissions.sh
    |       |-- 50_run_something_after_app_deployment.sh
    |       `-- 99_some_service_start.sh
    `-- confighooks/          # Configuration deployment hooks
        |-- prebuild/
        |   `-- 01_set_secrets.sh
        |-- predeploy/
        |   `-- 01_some_service_stop.sh
        `-- postdeploy/
            |-- 01_run_something_after_config_deployment.sh
            `-- 99_some_service_start.sh
```

**注意**  
Amazon Linux AMI 平台版本 (前述的 Amazon Linux 2) 不支援某些擴充功能。