從 Amazon LinuxAMI(AL1)遷移到AL2或 AL2 023 - AWS Elastic Beanstalk

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

從 Amazon LinuxAMI(AL1)遷移到AL2或 AL2 023

如果您的 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

差異和相容性

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

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

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

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

一般遷移程序

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

準備進行遷移測試

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

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

  2. 將您的應用程式部署到目標 AL2 023/ AL2 環境。

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

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

  4. 當您CNAMEs的目的地 AL2 023/ AL2 環境已準備好進入生產環境時,請交換兩個環境以將流量重新導向至新環境。

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

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

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

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

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

所有 Linux 平台的考量事項

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

Area 變更和資訊

組態檔案

在 AL2 023/ AL2 平台上,您可以像以前一樣使用配置文件,並且所有部分都以相同的方式工作。但是,特定設定的運作方式可能與先前 Amazon Linux AMI 平台上的運作方式不同。例如:

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

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

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

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

您仍然需要為任何需要引用的腳本使用.ebextensions配置文件 AWS CloudFormation 資源。

平台勾點

AL2平台推出了一種擴展環境平台的新方法,方法是將可執行文件添加到環境實例上的鉤子目錄。在舊版 Linux 平台中,您可能已使用自訂平台勾點。這些勾點不是專為受管平台設計且不受支援,但在某些情況下能以實用的方式運作。使用 AL2 023/ AL2 平台版本,自定義平台掛鉤不起作用。您應將所有勾點遷移至新的平台勾點。如需詳細資訊,請參閱 平台勾點

支援的代理伺服器

AL2023/ AL2 平台版本支援與其 Amazon Linux AMI 平台版本支援的每個平台相同的反向代理伺服器。所有 AL2 023/AL2; 平台版本都使用 nginx 作為其默認的反向代理服務器,除了和 Docker 平台。ECS該湯姆貓,PHPNode.js 和 Python 平台也支持阿帕奇HTTPD作為一種替代方案。所有平台都會以統一的方式啟用代理伺服器設定,如本節所述。但是,配置代理服務器與 Amazon Linux 上的服務器略有不同AMI。以下是所有平台的差異:

  • 預設值為 nginx — 所有 AL2 023/ AL2 平台版本上的預設代理伺服器都是 nginx。在 Amazon Linux AMI 平台版本的 Tomcat 和 Python 上PHP,默認代理服務器是阿帕奇HTTPD。

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

  • 配置檔案位置 — 您應該將代理配置檔案放置在所有 AL2 023/ AL2 平台版本的.platform/nginx.platform/httpd目錄中。在 Amazon Linux AMI 平台版本上.ebextensions/httpd,這些位置分別是.ebextensions/nginx和。

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

代理組態變更

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

執行個體設定檔

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

增強型運作狀態

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

自訂 AMI

如果您的環境使用自訂 AMI,請使用 Elastic Beanstalk AL2 AL2 023/ 平台AL2為您的新環境建立一個以 023 為AMI基礎的新環境。AL2

自訂平台

AL2023/ AL2 平台版本AMIs的託管不支持自定義平台。

平台特定考量事項

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

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

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

Amazon 在 Amazon Linux AMI 上ECS運行的多容器泊塢窗()AL1

ECS基於泊塢窗 AL2 023AL2/平台分支

ECS基於 Docker AL2 023/ 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 平台分支上ECS執行的 Amazon 的詳細資訊,請參閱。在 Amazon 2023 上將您的 Elastic Beanstalk 應用程式從ECS託管多容器泊塢視窗遷移AL1到 ECS

碼頭工人在 Amazon Linux 上運行 AMI () AL1

運行 Amazon Linux 的預配置碼頭(玻璃魚 5.0)()AMIAL1

碼頭工人在 AL2 023AL2/平台分支上運行

我們建議您將以預先設定的泊塢視窗 (Glassfish 5.0) 或在 Amazon Linux 上執行的泊塢視窗 () 為基礎的環境中執行的應用程式移轉到以 Amazon Linux AMI 2 上執行的泊塢視窗或在 023 平台分支上執行的泊塢為基礎的環境。AL1 AL2

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

下表列出在 AL2 0 AL2 23/ 上執行之平台分支 Docker 的特定移轉資訊。

Area 變更和資訊

儲存空間

Elastic Beanstalk 將 Docker 設定為使用儲存體驅動程式來儲存 Docker 影像和容器資料。在 Amazon Linux 上AMI,Elastic Beanstalk 使用了設備映射器存儲驅動程序。為了提高性能,Elastic Beanstalk 佈建了一個額外的 Amazon EBS 卷。在 AL2 023/ AL2 碼頭平台版本上,Elastic Beanstalk 使用 OverlayFS 存儲驅動程序,實現更好的性能,同時不再需要單獨的卷。

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

私有儲存庫身分驗證

當您提供 Docker 產生的身份驗證檔案以連接到私有存放庫時,您不再需要將其轉換為 Amazon Linux AMI Docker 平台版本所需的舊版格式。AL2023/ AL2 碼頭平台版本支持新格式。如需詳細資訊,請參閱 在 Elastic Beanstalk 中使用來自私人存儲庫的圖像

代理伺服器

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

下表列出 Go 平台中 AL2 023/ AL2 平台版本的移轉資訊。

Area 變更和資訊

連接埠傳遞

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

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

Area 變更和資訊

Corretto vs. 開放 JDK

為了實現 Java 平台,標準版(Java SE),AL2023/ AL2 平台分支機構使用 Amazon Cor retto, AWS 開放 Java 開發工具包(開放JDK)的分佈。以前的 Elastic Beanstalk Java SE 平台分支使用 Amazon Linux 隨附的打開JDK軟件包。AMI

建置工具

AL2023/ AL2 平台具有較新版本的構建工具:gradlemaven,和。ant

JAR檔案處理

在 AL2 023/ AL2 平台上,如果您的源代碼包(文ZIP件)包含單個文件而沒有其他文件,則 Elastic Beanstalk 不再將該文件重命JAR名為。JAR application.jar重新命名只有在您自己提交JAR檔案時才會發生,而不是在ZIP檔案中提交。

連接埠傳遞

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

Java 7

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

下表列出 Tomcat 平台中 AL2 023/ AL2 平台版本的移轉資訊。

Area 變更和資訊

組態選項

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

選項 遷移資訊

GzipCompression

不支援 AL2 023/ AL2 平台版本。

ProxyServer

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

在 Amazon Linux AMI 平台版本上,默認代理是阿帕奇 2.4。如果您使用預設代理伺服器設定並新增了自訂代理伺服器組態檔案,則您的代理伺服器組態仍應在 AL2 023AL2/上運作。但是,如果您使用了 apache/2.2 選項值,您現在必須將代理組態移轉到 Apache 2.4 版。

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

應用程式路徑

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

下表列出 Node.js 平台中 AL2 023/ AL2 平台版本的移轉資訊。

Area 變更和資訊

已安裝的 Node.js 版本

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

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

阿帕奇HTTPD記錄檔名稱

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

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

組態選項

在 AL2 023/ 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 版本。如需詳細資訊,請參閱 指定 Node.js 具有 package.json 檔案的相依性

GzipCompression

不支援 AL2 023/ AL2 平台版本。

ProxyServer

在 AL2 023/ 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); });

下表列出平台中 AL2 023/ AL2 平台版本的移轉資訊。PHP

Area 變更和資訊

PHP檔案處理

在 AL2 023/ AL2 平台上,PHP檔案會使用 PHP-FPM (程序管理員) 來CGI處理。在 Amazon Linux AMI 平台上,我們使用了 mod_php(一個阿帕奇模塊)。

代理伺服器

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

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

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

Area 變更和資訊

WSGI伺服器

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

或者,您可以使用 a Procfile 來指定和配置WSGI伺服器。如需詳細資訊,請參閱 使用 Elastic Beanstalk 上的處理文件配置WSGI服務器

應用程式路徑

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

代理伺服器

AL2023/ AL2 Python 平台版本支持 nginx 和阿帕奇代理服務器。HTTPD預設值是 nginx。

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

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

Area 變更和資訊

已安裝的 Ruby 版本

在 AL2 023/ 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 版本平台分支。

應用程式伺服器

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

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

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