View a markdown version of this page

从 Amazon Linux AMI (AL1) 迁移到 o AL2 r AL2 023 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 Amazon Linux AMI (AL1) 迁移到 o AL2 r 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版本、编译器工具链和各种软件包。有关更多信息,请参阅亚马逊 Linux 2 FAQs

Elastic Beanstalk 服务还更新了特定于平台的运行时版本、构建工具和其他依赖项。

因此,我们建议您花些时间在开发环境中彻底测试您的应用程序,并进行任何必要的调整。

一般迁移流程

当你准备好进入生产环境时,Elastic Beanstalk blue/green 需要部署才能执行升级。以下是我们建议使用 blue/green 部署过程进行迁移的一般最佳实践步骤。

准备对您的迁移进行测试

在部署应用程序并开始测试之前,请查看 所有 Linux 平台的注意事项 中的信息,本主题后面将介绍这些信息。此外,请在以下 平台特定注意事项 部分中查看适用于您的平台的信息。记下此内容中应用于或可能应用于您的应用程序和配置设置的特定信息。

高级迁移步骤
  1. 创建基于 AL2 或 AL2 023 平台分支的新环境。我们建议您迁移到 AL2 023 平台分支。

  2. 将您的应用程序部署到目标 AL2 023/ 环境AL2 。

    在您通过测试和调整新环境进行迭代时,您的现有生产环境将保持活动状态且不受影响。

  3. 在新环境中全面测试您的应用程序。

  4. 当您的目标 AL2 023/ AL2 环境准备好进入生产环境时,交换两个环境中的 CNAMEs 一个,将流量重定向到新环境。

更详细的迁移步骤和最佳实践

有关更详细的 blue/green 部署过程,请参阅使用 Elastic Beanstalk 进行蓝/绿部署

有关更具体的指导和详细的最佳实践步骤,请参阅蓝/绿方法

可帮助您规划迁移的更多参考

以下参考可以为规划迁移提供更多信息。

所有 Linux 平台的注意事项

下表讨论了在计划将应用程序迁移到 AL2 023AL2/时应注意的注意事项。这些注意事项适用于任何 Elastic Beanstalk Linux 平台,而不管平台采用何种特定的编程语言或应用程序服务器。

领域 更改和信息

配置文件

在 AL2 023/ AL2 平台上,你可以像以前一样使用配置文件,所有部分的工作方式都是一样的。但是,某些特定设置的工作方式可能与早期 Amazon Linux AMI 平台上的工作方式不同。例如:

  • 使用配置文件安装的某些软件包可能在 AL2 023/ 上不可用AL2,或者它们的名称可能已更改。

  • 某些特定于平台的配置选项已从其平台特定的命名空间移动到与平台无关的不同命名空间。

  • .ebextensions/nginx 目录中提供的代理配置文件应移动到 .platform/nginx 平台挂钩目录。有关更多信息,请参阅 反向代理配置

我们建议使用平台挂钩在环境实例上运行自定义代码。您仍可以在 .ebextensions 配置文件中使用命令和容器命令,但这并不简单。例如,在 YAML 文件中编写命令脚本可能非常繁琐且很难测试。

对于需要引用 AWS CloudFormation 资源的任何脚本,您仍需要使用 .ebextensions 配置文件。

平台挂钩

AL2 platforms 引入了一种扩展环境平台的新方法,方法是将可执行文件添加到环境实例上的挂钩目录中。对于以前的 Linux 平台版本,您可能使用了自定义平台挂钩。这些挂钩不是为托管平台设计的,因此不受支持,但在某些情况下使用可能会有效。在 AL2 023/ AL2 平台版本中,自定义平台挂钩不起作用。应当将所有挂钩迁移到新的平台挂钩。有关详细信息,请参阅 平台挂钩

支持的代理服务器

AL2023/ AL2 平台版本支持的反向代理服务器与其 Amazon Linux AMI 平台版本所支持的每个平台相同。除了 ECS 和 Docker 平台之外,所有 AL2 023/AL2; 平台版本都使用 nginx 作为其默认反向代理服务器。Tomcat、Node.js、PHP 和 Python 平台也支持将 Apache HTTPD 作为替代方案。所有平台都以一致的方式启用代理服务器配置,如本节所述。但是,配置代理服务器与其在 Amazon Linux AMI 上时略有不同。以下是所有平台的区别:

  • 默认为 nginx — AL2 所有 AL2 023/ 平台版本上的默认代理服务器都是 nginx。在 Tomcat、PHP 和 Python 的 Amazon Linux AMI 平台版本上,默认代理服务器是 Apache HTTPD。

  • 命名空间一致 — 所有 AL2 023/ AL2 平台版本都使用该aws:elasticbeanstalk:environment:proxy命名空间来配置代理服务器。在 Amazon Linux AMI 平台版本上,这是针对每个平台的决定,而 Node.js 使用了不同的命名空间。

  • 配置文件位置-应将代理配置文件放在所有 AL2 023/ AL2 平台版本的.platform/nginx.platform/httpd目录中。在 Amazon Linux AMI 平台版本上,这些位置分别为 .ebextensions/nginx.ebextensions/httpd

有关特定于平台的代理配置更改,请参阅平台特定注意事项。有关 AL2 023/ AL2 平台上的代理配置的信息,请参见。反向代理配置

代理配置更改

除了特定于每个平台的代理配置更改外,还有一些代理配置更改统一适用于所有平台。为了准确配置您的环境,请务必参考两者。

实例配置文件

AL2023/ AL2 平台需要配置实例配置文件。如果没有该配置文件,环境创建可能会暂时成功,但是当需要实例配置文件的操作开始失败时,该环境可能会在创建后很快出现错误。有关更多信息,请参阅 管理 Elastic Beanstalk 实例配置文件

增强型运行状况

AL2023/ AL2 平台版本默认启用增强生命值。如果您未使用 Elastic Beanstalk 控制台创建环境,则该功能是一种更改。无论平台版本如何,默认情况下,该控制台尽可能启用增强型运行状况。有关更多信息,请参阅 Elastic Beanstalk 中的增强型运行状况报告和监控

自定义 AMI

如果您的环境使用自定义 AMI,请使用 Elastic Beanstalk AL2 023/ 平台AL2为您的新环境创建一个基于 023/ 的新 AMI。 AL2 AL2

自定义平台

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

平台特定注意事项

本节讨论特定 Elastic Beanstalk Linux 平台特有的迁移注意事项。

基于亚马逊 Linux AMI (AL1) 的 Docker 平台分支系列包括三个平台分支。我们建议为每个平台分支制定一条不同的迁移路径。

AL1 平台分支 迁移到 AL2 023/ 的路径 AL2

由在亚马逊 Linux 上运行的亚马逊 ECS 管理的多容器 Docker AMI () AL1

基于 ECS 的 Docker AL2 023/ 平台AL2 分支

基于 ECS 的 Docker AL2 023/ AL2 平台分支为在多容器 Docker 平台分支上运行的环境提供了直接的迁移路径。 AL1

  • 与之前的多容器 Docker AL1 分支一样, AL2023/ 平台分AL2 支使用 Amazon ECS 在 Elastic Beanstalk 环境中协调将多个 Docker 容器部署到亚马逊 ECS 集群。

  • AL2023/ AL2 平台分支支持之前的多容器 Docker 分支中的所有功能。 AL1

  • AL2023/ AL2 平台分支也支持相同的 Dockerrun.aws.json v2 文件。

有关将多容器 Docker Amazon Linux 平台分支上运行的应用程序迁移到在 AL2023/ AL2 平台分支上运行的 Amazon ECS 的更多信息,请参阅。将您的 Elastic Beanstalk 应用程序从 AL1 上的 ECS 托管 Multi-container Docker 迁移到亚马逊 Linux 上的 ECS 2023

在亚马逊 Linux 上运行的 Docker AMI () AL1

运行亚马逊 Linux AMI 的预配置 Docker (Glassfish 5.0) () AL1

Docker 在 AL2 023/ 平台分支AL2 上运行

我们建议您将运行在基于预配置的 Docker(Glassfish 5.0)或在亚马逊 Linux AMI () 上运行的 Docker 环境中的应用程序迁移到基于在亚马逊 Linux 2 上运行的 Docker 或在 023 平台分支上运行的 Docker 的环境。AL1 AL2

如果您的环境基于预配置 Docker (Glassfish 5.0) 平台分支,请参阅 将 GlassFish 应用程序部署到 Docker 平台:2023 年亚马逊 Linux 的迁移之路

下表列出了特定于平台分支 Docker 在 AL2 0 AL2 23/ 上运行的迁移信息。

领域 更改和信息

存储

Elastic Beanstalk 将 Docker 配置为使用存储驱动程序来存储 Docker 映像和容器数据。在 Amazon Linux AMI 上,Elastic Beanstalk 使用设备映射器存储驱动程序。为了提高性能,Elastic Beanstalk 预置了额外的 Amazon EBS 卷。在 AL2 023/ 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 平台版本支持新格式。有关更多信息,请参阅 映像存储库的身份验证

代理服务器

AL2023/ AL2 Docker 平台版本不支持不在代理服务器后面运行的独立容器。在 Amazon Linux AMI Docker 平台版本上,这一点过去可以通过 aws:elasticbeanstalk:environment:proxy 命名空间中 ProxyServer 选项的 none 值来实现。

下表列出了 Go 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

端口传递

在 AL2 023/ AL2 平台上,Elastic Beanstalk 不会通过环境变量将端口值传递给您的应用程序进程。PORT您可以通过亲自配置 PORT 环境属性来模拟进程的此类行为。但是,如果您具有多个进程,并且您依赖于 Elastic Beanstalk 将增量端口值(5000、5100、5200 等)传递给进程,则应当修改您的实现。有关详细信息,请参阅 反向代理配置

下表列出了 Java SE 平台中的 Corretto 平台分支的迁移信息。

领域 更改和信息

Corretto 与 OpenJDK

要实现 Java 平台、标准版 (Java SE)、 AL2 023/ AL2 平台分支,请使用 Amazon Corrett o,这是开放式 Java 开发套件 (OpenJDK) 的 AWS 发行版。早期 Elastic Beanstalk Java SE 平台分支使用 Amazon Linux AMI 随附的 OpenJDK 软件包。

构建工具

AL2023/ AL2 平台有较新版本的构建工具:gradlemaven、和。ant

JAR 文件处理

在 AL2 023/ AL2 平台上,如果您的源包(ZIP 文件)包含单个 JAR 文件而不包含其他文件,则 Elastic Beanstalk 将不再将 JAR 文件重命名为。application.jar仅当提交 JAR 文件自身(而不是包含在 ZIP 文件中)时,才会重命名。

端口传递

在 AL2 023/ AL2 平台上,Elastic Beanstalk 不会通过环境变量将端口值传递给您的应用程序进程。PORT您可以通过亲自配置 PORT 环境属性来模拟进程的此类行为。但是,如果您具有多个进程,并且您依赖于 Elastic Beanstalk 将增量端口值(5000、5100、5200 等)传递给进程,则应当修改您的实现。有关详细信息,请参阅 反向代理配置

Java 7

Elastic Beanstalk 不 AL2支持 023/ Java 7 平台分AL2 支。如果您有 Java 7 应用程序,请将其迁移到 Corretto 8 或 Corretto 11。

下表列出了 Tomc at 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

配置选项

在 AL2 023/ 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。如果您使用默认代理设置并添加了自定义代理配置文件,则您的代理配置仍应在 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在 Amazon Linux AMI 平台上,该路径为 /var/lib/tomcat8/webapps

下表列出了 Node.js 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

已安装的 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 平台分支。

Apache 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 版本。有关更多信息,请参阅 使用 package.json 文件指定 Node.js 依赖项

GzipCompression

AL2023/ 平台版本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); });

下表列出了 PHP 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

PHP 文件处理

在 AL2 023/ AL2 平台上,使用 PHP-FPM(CGI 进程管理器)处理 PHP 文件。在 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

下表列出了 Pyth on 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

WSGI 服务器

在 AL2 023/ AL2 平台上,Gunicorn 是默认的 WSG I 服务器。默认情况下,Gunicorn 侦听端口 8000。该端口可能与您的应用程序在 Amazon Linux AMI 平台上使用的端口不同。如果您正在设置 aws:elasticbeanstalk:container:python 命名空间的 WSGIPath 选项,请将该值替换为 Gunicorn 语法。有关更多信息,请参阅 Python 配置命名空间

此外,您可以使用 Procfile 指定和配置 WSGI 服务器。有关更多信息,请参阅 在 Elastic Beanstalk 上使用 Procfile 配置 WSGI 服务器

应用程序路径

在 AL2 023/ AL2 平台上,您的环境的 Amazon EC2 实例上应用程序目录的路径是。/var/app/current在 Amazon Linux AMI 平台上,该路径为 /opt/python/current/app

代理服务器

AL2023/ Pyt AL2 hon 平台版本同时支持 nginx 和 Apache HTTPD 代理服务器。默认为 nginx。

Amazon Linux AMI Python 平台版本仅支持 Apache HTTPD。如果您添加了自定义 Apache 配置文件,则可以将 aws:elasticbeanstalk:environment:proxy 命名空间中的 ProxyServer 选项设置为 apache

下表列出了 Ruby 平台中 AL2 023/ AL2 平台版本的迁移信息。

领域 更改和信息

已安装 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 应用服务器。如果您的应用程序使用 Passenger,则可以将 Ruby 环境配置为安装和使用 Passenger。

有关更多信息以及示例,请参阅 使用 Elastic Beanstalk Ruby 平台