從 Amazon Linux AMI (AL1) 遷移到 AL2 或 AL2023 - AWS Elastic Beanstalk

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

從 Amazon Linux AMI (AL1) 遷移到 AL2 或 AL2023

如果您的 Elastic Beanstalk 應用程式是以 Amazon Linux AMI 平台分支為基礎,請參閱本節了解如何將應用程式的環境遷移至 Amazon Linux 2 或 Amazon Linux 2023。以 Amazon Linux AMI 為基礎的上一代平台分支現在已淘汰。

我們強烈建議您遷移到 Amazon Linux 2023,因為它比 Amazon Linux 2 更新。Amazon Linux 2 作業系統將在 Amazon Linux 2023 之前終止支援,因此,如果您遷移到 Amazon Linux 2023,可以獲得更長的支援時間。

值得注意的是,Elastic Beanstalk Amazon Linux 2 和 Amazon Linux 2023 平台之間具有高度相容性。雖然有些方面確實有所不同:執行個體中繼資料服務第 1 版 (IMDSv1) 選項預設值、對 pkg-repo 執行個體工具的支援,以及部分 Apache HTTPD 組態。如需詳細資訊,請參閱Amazon Linux 2023

差異和相容性

以 AL2023/AL2 為基礎的平台分支並不保證能與您現有的應用程式回溯相容。同樣需要注意的是,即使應用程式的程式碼成功部署到新平台版本,仍可能會因作業系統和執行時間差異而有不同的運作或執行方式。

雖然 Amazon Linux AMI 和 AL2023/AL2 具有相同的 Linux 核心,它們在以下方面仍有所不同:初始化系統、libc 版本、編譯器工具鏈及各種套件。如需詳細資訊,請參閱 Amazon Linux 2 常見問答集

Elastic Beanstalk 服務也已更新執行時間的平台專用版本、建置工具及其他依存項目。

因此,建議您慢慢地在開發環境中徹底測試應用程式,然後進行任何必要的調整。

一般遷移程序

如果準備用於生產環境,Elastic Beanstalk 需要進行藍/綠部署才能執行升級。使用藍/綠部署程序進行遷移時,我們建議遵循以下一般最佳實務步驟。

準備進行遷移測試

在您部署應用程式並開始測試之前,請檢閱查看本主題後文 所有 Linux 平台的考量事項 中的資訊。另外,請參閱後文 平台特定考量事項 章節中適用於您平台的資訊。記下此內容中適用或可能適用您的應用程式和組態設定的特定資訊。

高階遷移步驟
  1. 建立以 AL2 或 AL2023 平台分支為基礎的新環境。我們建議您遷移至 AL2023 平台分支。

  2. 將應用程式部署至目標 AL2023/AL2 環境。

    您現有的生產環境將保持作用中狀態且不受影響,同時您可以測試和調整新環境,進行反覆。

  3. 在新環境中全面測試應用程式。

  4. 目標 AL2023/AL2 環境準備好用於生產後,交換兩個環境的 CNAME 以將流量重新導向至新環境。

更詳細的遷移步驟和最佳實務

如需更詳細的藍/綠部署程序,請參閱 透過 Elastic Beanstalk 進行藍/綠部署

如需更具體的指南和詳細的最佳實務步驟,請參閱藍/綠方法

更多有助於規劃遷移的參考資料

下列參考資料可提供有關遷移規劃的其他資訊。

所有 Linux 平台的考量事項

下表說明了在規劃將應用程式遷移至 AL2023/AL2 時應注意的考量事項。無論使用何種特定程式設計語言或應用程式伺服器,這些考量事項皆適用於任何 Elastic Beanstalk Linux 平台。

Area 變更和資訊

組態檔案

在 AL2023/AL2 平台上,您可以如往常使用組態檔案,且所有區段的運作方式都一樣。不過,特定設定的運作方式可能與舊版 Amazon Linux AMI 平台上的運作方式不同。例如:

  • 您使用組態檔案安裝的某些軟體套件可能無法在 AL2023/AL2 上使用,或其名稱可能已經變更。

  • 某些平台專用組態選項已從其平台專用命名空間移至不同的平台無關命名空間。

  • .ebextensions/nginx 目錄中提供的代理組態檔案應移至 .platform/nginx 平台勾點目錄。如需詳細資訊,請參閱反向代理組態

建議使用平台勾點,以在環境執行個體上執行自訂程式碼。您仍可在 .ebextensions 組態檔案中使用命令和容器命令,但它們並不容易使用。例如,在 YAML 檔案內寫入命令指令碼可能很麻煩,且難以測試。

您仍須將 .ebextensions 組態檔案用於需要參考 AWS CloudFormation 資源的任何指令碼。

平台勾點

AL2 平台將可執行的檔案新增到環境執行個體上的勾點目錄,提供了擴展環境平台的新方式。在舊版 Linux 平台中,您可能已使用自訂平台勾點。這些勾點不是專為受管平台設計且不受支援,但在某些情況下能以實用的方式運作。在 AL2023/AL2 平台版本中,自訂平台勾點無法運作。您應將所有勾點遷移至新的平台勾點。如需詳細資訊,請參閱 平台勾點

支援的代理伺服器

AL2023/AL2 平台版本支援與 Amazon Linux AMI 平台版本支援的每個平台相同的反向代理伺服器。全部 AL2023/AL2 平台版本均使用 nginx 作為預設反向代理伺服器,ECS 和 Docker 平台除外。Tomcat、Node.js、PHP 和 Python 平台也支援 Apache HTTPD 作為替代方案。所有平台都會以統一的方式啟用代理伺服器設定,如本節所述。但是,設定代理伺服器與 Amazon Linux AMI 上的伺服器略有不同。以下是所有平台的差異:

  • 預設為 nginx – 所有 AL2023/AL2 平台版本上的預設代理伺服器都是 nginx。在 Tomcat、PHP 和 Python 的 Amazon Linux AMI 平台版本,預設的代理伺服器是 Apache HTTPD。

  • 一致的命名空間 – 所有 AL2023/AL2 平台版本都使用 aws:elasticbeanstalk:environment:proxy 命名空間來設定代理伺服器。在 Amazon Linux AMI 平台版本中,這是每個平台的決定,Node.js 使用了不同的命名空間。

  • 組態檔案位置 – 所有 AL2023/AL2 平台版本的代理組態檔案都應放置在 .platform/nginx.platform/httpd 目錄中。在 Amazon Linux AMI 平台版本上,這些位置分別是 .ebextensions/nginx.ebextensions/httpd

若要平台特定的代理組態變更的詳細資訊,請參閱平台特定考量事項。如需 AL2023/AL2 平台上代理組態的資訊,請參閱 反向代理組態

代理組態變更

除了特定於每個平台的代理組態變更外,還有一致地套用至所有平台的代理組態變更。參考兩者以準確設定您的環境,這一點非常重要。

執行個體設定檔

AL2023/AL2 平台需要執行個體設定檔才能進行設定。若無此描述檔,環境建立可能會暫時成功,但在建立完成後,當需要執行個體描述檔的動作開始失敗時,環境可能很快會出現錯誤。如需詳細資訊,請參閱管理 Elastic Beanstalk 執行個體描述檔

增強型運作狀態

AL2023/AL2 平台版本會預設啟用增強型運作狀態。如果您不使用 Elastic Beanstalk 主控台來建立環境,這就會是一項變更。無論使用的平台版本為何,主控台都會根據預設盡可能啟用增強型運作狀態。如需詳細資訊,請參閱Elastic Beanstalk 中的增強型運作狀態報告和監控

自訂 AMI

如果環境使用自訂 AMI,請透過 Elastic Beanstalk AL2023/AL2 平台為新環境建立以 AL2023/AL2 為基礎的新 AMI。

自訂平台

AL2023/AL2 平台版本的受管 AMI 不支援自訂平台。

平台特定考量事項

本節討論特定 Elastic Beanstalk Linux 平台的特定遷移考量事項。

以 Amazon Linux AMI (AL1) 為基礎的 Docker 平台分支系列包括三個平台分支。我們會為每個平台分支提供不同的遷移路徑建議。

AL1 平台分支 遷移至 AL2023/AL2 的路徑

由在 Amazon Linux AMI (AL1) 上執行的 Amazon ECS 管理的多容器 Docker

以 ECS 為基礎的 Docker AL2023/AL2 平台分支

以 ECS 為基礎的 Docker AL2023/AL2 平台分支為執行於多容器 Docker AL1 平台分支的環境提供了直接的遷移路徑。

  • 類似於舊版多容器 Docker AL1 分支,AL2023/AL2 平台分支使用 Amazon ECS 來協調將多個 Docker 容器部署至 Elastic Beanstalk 環境內的 Amazon ECS 叢集。

  • AL2023/AL2 平台分支支援舊版多容器 Docker AL1 平台分支中的所有功能。

  • AL2023/AL2 平台分支也支援相同的 Dockerrun.aws.json v2 檔案。

如需詳細信息,了解如何將執行於多容器 Docker Amazon Linux 平台分支的應用程式遷移至執行於 AL2023/AL2 的 Amazon ECS 平台分支,請參閱 將您的 Elastic Beanstalk 應用程式從 AL1 上的 ECS 受管多容器 Docker 遷移至 Amazon Linux 2023 上的 ECS

在 Amazon Linux AMI (AL1) 上執行的 Docker

執行 Amazon Linux AMI (AL1) 的預先設定的 Docker (Glassfish 5.0)

執行於 AL2023/AL2 平台分支的 Docker

我們建議您將在基於預先設定的 Docker (Glassfish 5.0)執行於 Amazon Linux AMI (AL1) 的 Docker 的環境中執行的應用程式遷移至基於執行於 Amazon Linux 2 的 Docker執行於 AL2023 的 Docker 平台分支的環境。

如果您的環境基於預先設定的 Docker (Glassfish 5.0)平台分支,請參閱 將 GlassFish 應用程式部署到 Docker 平台:Amazon Linux 2023 的遷移路徑

下表列出了執行於 AL2023/AL2 的 Docker 平台分支的遷移資訊。

Area 變更和資訊

儲存空間

Elastic Beanstalk 將 Docker 設定為使用儲存體驅動程式來儲存 Docker 影像和容器資料。在 Amazon Linux AMI,Elastic Beanstalk 使用 裝置映射器儲存驅動程式。為了提高效能,Elastic Beanstalk 佈建了一個額外的 Amazon EBS 磁碟區。在 AL2023/AL2 Docker 平台版本上,Elastic Beanstalk 使用 OverlayFS 儲存驅動程式,以達到更佳的效能,並且不再需要單獨的磁碟區。

使用 Amazon Linux AMI 時,如果您使用 BlockDeviceMappings 命名空間的 aws:autoscaling:launchconfiguration 選項將自訂儲存磁碟區新增至 Docker 環境,我們建議您同時新增 Elastic Beanstalk 佈建的 /dev/xvdcz Amazon EBS 磁碟區。Elastic Beanstalk 不再佈建此磁碟區,因此您應該將其從組態檔案中刪除。如需詳細資訊,請參閱Amazon Linux AMI (Amazon Linux 2 之前的版本) 上的 Docker 組態

私有儲存庫身分驗證

當您提供 Docker 產生的身分驗證檔案以連線至私有儲存庫時,您不再需要將其轉換為 Amazon Linux AMI Docker 平台版本所需的舊格式。AL2023/AL2 Docker 平台版本支援新格式。如需詳細資訊,請參閱在 Elastic Beanstalk 中使用私有儲存庫中的映像

代理伺服器

AL2023/AL2 Docker 平台版本不支援不在代理伺服器後面執行的獨立容器。在 Amazon Linux AMI Docker 平台版本中,這曾經可以透過 aws:elasticbeanstalk:environment:proxy 命名空間中的 ProxyServer 選項的 none 值來實現。

下表列出了 Go 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

連接埠傳遞

在 AL2023/AL2 平台上,Elastic Beanstalk 不會透過 PORT 環境變數將連接埠值傳遞到應用程式程序。您可以自行設定 PORT 環境屬性,藉此模擬此程序的運作方式。不過,如果您有多個程序,並將 Elastic Beanstalk 傳遞增量連接埠值計算至程序 (5000、5100、5200 等),則應修改您的實作。如需詳細資訊,請參閱 反向代理組態

下表列出 Java SE 平台中 Corretto 平台分支的遷移資訊。

Area 變更和資訊

Corretto 相較於 OpenJDK

若要實作 Java 平台、Standard Edition (Java SE)、AL2023/AL2 平台分支使用 Amazon Corretto,這是 Open Java Development Kit (OpenJDK) 的 AWS 分佈。先前的 Elastic Beanstalk Java SE 平台分支會使用 Amazon Linux AMI 隨附的 OpenJDK 套件。

建置工具

AL2023/AL2 平台有新版建置工具:gradlemavenant

JAR 檔案處理

在 AL2023/AL2 平台上,如果來源套件 (ZIP 檔案) 包含單一 JAR 檔案且不包含任何其他檔案,Elastic Beanstalk 不會再將 JAR 檔案重新命名為 application.jar。唯有在單獨提交 JAR 檔案本身 (而不是在 ZIP 檔案內) 時,才會進行重新命名。

連接埠傳遞

在 AL2023/AL2 平台上,Elastic Beanstalk 不會透過 PORT 環境變數將連接埠值傳遞到應用程式程序。您可以自行設定 PORT 環境屬性,藉此模擬此程序的運作方式。不過,如果您有多個程序,並將 Elastic Beanstalk 傳遞增量連接埠值計算至程序 (5000、5100、5200 等),則應修改您的實作。如需詳細資訊,請參閱 反向代理組態

Java 7

Elastic Beanstalk 不支援 AL2023/AL2 Java 7 平台分支。如果您有 Java 7 應用程式,請將其遷移至 Corretto 8 或 Corretto 11。

下表列出了 Tomcat 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

組態選項

在 AL2023/AL2 平台版本上,Elastic Beanstalk 僅支援 aws:elasticbeanstalk:environment:proxy 命名空間中組態選項和選項值的子集。以下是每個選項的遷移資訊。

選項 遷移資訊

GzipCompression

在 AL2023/AL2 平台版本上不受支援。

ProxyServer

AL2023/AL2 Tomcat 平台版本同時支援 nginx 和 Apache HTTPD 2.4 版代理伺服器。不過,不支援 Apache 版本 2.2。

在 Amazon Linux AMI 平台版本中,預設代理是 Apache 2.4。如果使用預設代理伺服器設定並新增自訂代理伺服器組態檔案,代理伺服器組態應該仍然可以使用 AL2023/AL2。但是,如果您使用了 apache/2.2 選項值,您現在必須將代理組態移轉到 Apache 2.4 版。

aws:elasticbeanstalk:container:tomcat:jvmoptions 命名空間中的 XX:MaxPermSize 選項不支援 AL2023/AL2 平台版本。修改永久生成大小的 JVM 設定僅適用於 Java 7 和更早版本,因此不適用於 AL2023/AL2 平台版本。

應用程式路徑

在 AL2023/AL2 平台上,環境中 Amazon EC2 執行個體上應用程式目錄的路徑為 /var/app/current。在 Amazon Linux AMI 平台,路徑是 /var/lib/tomcat8/webapps

下表列出了 Node.js 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

已安裝的 Node.js 版本

在 AL2023/AL2 平台上,Elastic Beanstalk 維護了多個 Node.js 平台分支,並且只在每個平台版本上,安裝與平台分支對應的最新版本 Node.js 主要版本。例如,Node.js 12 平台分支中的每個平台版本,預設只會安裝 Node.js 12.x.y。在 Amazon Linux AMI 平台版本上,我們在每個平台版本上安裝了多個 Node.js 版本的多個版本,並且只維護一個平台分支。

選擇與您應用程式所需的 Node.js 主要版本對應的 Node.js 平台分支。

Apache HTTPD 日誌檔案名稱

在 AL2023/AL2 平台上,如果您使用 Apache HTTPD 代理伺服器,HTTPD 日誌檔案名稱會為 access_logerror_log,這與支援 Apache HTTPD 的所有其他平台一致。在 Amazon Linux AMI 平台版本中,這些日誌檔案分別命名為 access.logerror.log

如需所有平台之日誌檔案名稱和位置的詳細資訊,請參閱 Elastic Beanstalk 如何設定 CloudWatch Logs

組態選項

在 AL2023/AL2 平台上,Elastic Beanstalk 不支援 aws:elasticbeanstalk:container:nodejs 命名空間中的組態選項。部分選項擁有替代方案。以下是每個選項的遷移資訊。

選項 遷移資訊

NodeCommand

package.json 檔案中使用 Procfilescripts 關鍵字來指定啟動指令碼。

NodeVersion

package.json 檔案中使用 engines 關鍵字來指定 Node.js 版本。請注意,您只能指定與您平台分支對應的 Node.js 版本。例如,如果您使用的是 Node.js 12 平台分支,則只能指定 12.x.y Node.js 版本。如需詳細資訊,請參閱使用 package.json 檔案指定 Node.js 相依性

GzipCompression

在 AL2023/AL2 平台版本上不受支援。

ProxyServer

在 AL2023/AL2 Node.js 平台版本上,此選項會移至 aws:elasticbeanstalk:environment:proxy 命名空間。您可以在 nginx (預設值) 和 apache 之間進行選擇。

AL2023/AL2 Node.js 平台版本不支援不在代理伺服器後執行的獨立應用程式。在 Amazon Linux AMI Node.js 平台版本中,這曾經可以透過 aws:elasticbeanstalk:container:nodejs 命名空間中的 ProxyServer 選項的 none 值來實現。如果您的環境執行獨立應用程式,請更新您的程式碼以接聽代理伺服器 (nginx 或 Apache) 轉送流量的連接埠。

var port = process.env.PORT || 5000; app.listen(port, function() { console.log('Server running at http://127.0.0.1:%s', port); });

下表列出了 PHP 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

PHP 檔案處理

在 AL2023/AL2 平台上,PHP 檔案係使用 PHP-FPM (CGI 程序管理器) 進行處理。在 Amazon Linux AMI 平台上,我們使用 mod_php (一種 Apache 模組)。

代理伺服器

AL2023/AL2 PHP 平台版本同時支援 nginx 和 Apache HTTPD 代理伺服器。預設值是 nginx。

Amazon Linux AMI PHP 平台版本只支援 Apache HTTPD。如果新增自訂 Apache 組態檔案,可以將 aws:elasticbeanstalk:environment:proxy 命名空間中的 ProxyServer 選項設為 apache

下表列出了 Python 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

WSGI 伺服器

在 AL2023/AL2 平台上,Gunicorn 是預設 WSGI 伺服器。根據預設,Gunicorn 會在連接埠 8000 上接聽。此連接埠可能與應用程式在 Amazon Linux AMI 平台上使用的不同。如果您正在設定 aws:elasticbeanstalk:container:python 命名空間的 WSGIPath 選項,請用 Gunicorn 的語法替換該數值。如需詳細資訊,請參閱Python 組態命名空間

或者,您也可以使用 Procfile 來指定和設定 WSGI 伺服器。如需詳細資訊,請參閱在 Elastic Beanstalk 上使用 Procfile 設定 WSGI 伺服器

應用程式路徑

在 AL2023/AL2 平台上,環境中 Amazon EC2 執行個體上應用程式目錄的路徑為 /var/app/current。在 Amazon Linux AMI 平台,路徑是 /opt/python/current/app

代理伺服器

AL2023/AL2 Python 平台版本同時支援 nginx 和 Apache HTTPD 代理伺服器。預設值是 nginx。

Amazon Linux AMI Python 平台版本只支援 Apache HTTPD。如果新增自訂 Apache 組態檔案,可以將 aws:elasticbeanstalk:environment:proxy 命名空間中的 ProxyServer 選項設為 apache

下表列出了 Ruby 平台中 AL2023/AL2 平台版本的遷移資訊。

Area 變更和資訊

已安裝的 Ruby 版本

在 AL2023/AL2 平台上,Elastic Beanstalk 只會在每個平台版本上安裝與平台分支對應的最新單一 Ruby 版本。例如,Ruby 2.6 平台分支中的每個平台版本只安裝 Ruby 2.6.x。在 Amazon Linux AMI 平台版本上,我們安裝了多個 Ruby 版本的最新版本,例如 2.4.x、2.5.x 和 2.6.x。

如果您應用程式使用的 Ruby 版本無法對應您所使用的平台分支,我們建議切換至適用於您應用程式的正確 Ruby 版本平台分支。

應用程式伺服器

在 AL2023/AL2 平台上,Elastic Beanstalk 只會在所有 Ruby 平台版本上安裝 Puma 應用程式伺服器。您可以使用 Procfile 來啟動不同的應用程式伺服器,並使用 Gemfile 來進行安裝。

在 Amazon Linux AMI 平台上,我們支援每個 Ruby 版本兩種平台分支 — 一種支援 Puma 應用程式伺服器,另一種支援 Passenger 應用程式伺服器。如果您的應用程式使用 Passenger,您可以設定您的 Ruby 環境來安裝並使用 Passenger。

如需詳細資訊和範例,請參閱 使用 Elastic Beanstalk Ruby 平台