从 Amazon Linux AMI(AL1)迁移到 AL2 或 AL2023 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

从 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 FAQs

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 平台,而不管平台采用何种特定的编程语言或应用程序服务器。

领域 更改和信息

配置文件

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

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

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

  • .ebextensions/nginx 目录中提供的代理配置文件应移动到 .platform/nginx 平台挂钩目录。有关详细信息,请在 扩展 Elastic Beanstalk Linux 平台 中展开反向代理配置部分。

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

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

平台挂钩

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

支持的代理服务器

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 平台上的代理配置的信息,请展开反向代理配置部分于 扩展 Elastic Beanstalk Linux 平台 中。

代理配置更改

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

实例配置文件

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

增强型运行状况

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

自定义 AMI

如果您的环境使用自定义 AMI,请根据 AL2023/AL2 为使用 Elastic Beanstalk 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 平台分支的更多信息,请参阅 将在 Amazon Linux 上运行的多容器 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 的迁移信息。

领域 更改和信息

存储

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 平台版本支持新格式。有关详细信息,请参阅 使用私有存储库中的映像

代理服务器

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

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

领域 更改和信息

端口传递

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

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

领域 更改和信息

Corretto 与 OpenJDK

为了实现标准版(Java SE)Java 平台,AL2023/AL2 平台分支使用 Amazon Corretto,它是开放式 Java 开发工具包(OpenJDK)的 Amazon 分发版。早期 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 等)传递给进程,则应当修改您的实现。有关详细信息,请展开 扩展 Elastic Beanstalk Linux 平台 中的反向代理配置部分。

Java 7

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

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

领域 更改和信息

配置选项

在 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。

AL2023/AL2 平台版本不支持 aws:elasticbeanstalk:container:tomcat:jvmoptions 命名空间中的 XX:MaxPermSize 选项。用于修改永久代大小的 JVM 设置仅适用于 Java 7 及更早版本,因此不适用于 AL2023/AL2 平台版本。

应用程序路径。

在 AL2023/AL2 平台上,您的环境的 Amazon EC2 实例上的应用程序目录路径为 /var/app/current。在 Amazon Linux AMI 平台上,该路径为 /var/lib/tomcat8/webapps

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

领域 更改和信息

已安装的 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 平台版本的迁移信息。

领域 更改和信息

PHP 文件处理

在 AL2023/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

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

领域 更改和信息

WSGI 服务器

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

此外,您可以使用 Procfile 指定和配置 WSGI 服务器。有关详细信息,请参阅 使用 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 平台版本的迁移信息。

领域 更改和信息

已安装 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 平台