从亚马逊 Linux AMI (AL1) 迁移到AL2或 AL2 023 - AWS Elastic Beanstalk

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

从亚马逊 Linux AMI (AL1) 迁移到AL2或 AL2 023

如果您的 Elastic Beanstalk 应用程序基于AMI亚马逊 Linux 平台分支,请使用本节学习如何将应用程序的环境迁移到亚马逊 Linux 2 或亚马逊 Linux 2023。基于亚马逊 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 需要蓝/绿部署才能执行升级。以下是建议使用蓝/绿部署程序进行迁移的一般最佳实践步骤。

准备对您的迁移进行测试

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

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

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

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

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

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

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

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

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

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

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

所有 Linux 平台的注意事项

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

领域 更改和信息

配置文件

在 AL2 023/ AL2 平台上,您可以像以前一样使用配置文件,并且所有部分的工作方式都相同。但是,特定设置可能无法像以前的 Amazon Linux AMI 平台上那样起作用。例如:

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

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

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

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

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

平台挂钩

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

支持的代理服务器

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

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

  • 命名空间一致 — 所有 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 平台上的代理配置的信息,请展开中的 “反向代理配置” 部分。扩展 Elastic Beanstalk Linux 平台

代理配置更改

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

实例配置文件

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

增强型运行状况

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

自定义 AMI

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

自定义平台

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

平台特定注意事项

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

领域 更改和信息

存储

Elastic Beanstalk 将 Docker 配置为使用存储驱动程序来存储 Docker 映像和容器数据。在亚马逊 Linux 上AMI,Elastic Beanstalk 使用了设备映射器存储驱动程序。为了提高性能,Elastic Beanstalk 预配置了额外的亚马逊卷。EBS在 AL2 023/ AL2 Docker 平台版本上,Elastic Beanstalk 使用 OverlayFS 存储驱动程序,在不再需要单独卷的情况下实现更好的性能。

在 Amazon Linux 中AMI,如果您使用aws:autoscaling:launchconfiguration命名空间BlockDeviceMappings选项向 Docker 环境添加自定义存储卷,我们建议您同时添加 Elastic Beanstalk 配置的/dev/xvdcz亚马逊EBS卷。Elastic Beanstalk 不再预配置此卷,因此您应从配置文件中将其删除。有关详细信息,请参阅亚马逊 Linux 上的 Docker 配置AMI(之前的亚马逊 Linux 2)

私有存储库身份验证

当您提供 Docker 生成的身份验证文件以连接到私有存储库时,您无需再将其转换为 Amazon Linux AMI Docker 平台版本所需的旧格式。AL2023/ AL2 Docker 平台版本支持新格式。有关详细信息,请参阅在 Elastic Beanstalk 中使用来自私有存储库的图像

代理服务器

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 等)传递给进程,则应当修改您的实现。有关详细信息,请展开 扩展 Elastic Beanstalk Linux 平台 中的反向代理配置部分。

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

领域 更改和信息

Corretto vs Open JDK

要实现 Java 平台、标准版 (Java SE)、AL2 023/ AL2 平台分支,请使用 Amazon Corrett o,这是开放式 Java 开发套件(开放)的 AWS 发行版。JDK之前的 Elastic Beanstalk Java SE 平台分支使用亚马逊 Linux 附带的 Ope JDK n 软件包。AMI

构建工具

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

JAR文件处理

在 AL2 023/ AL2 平台上,如果您的源包(ZIP文件)包含单个文件而不包含其他文件,则 E JAR lastic Beanstalk 将不再将该文件重命名为。JAR application.jar只有在您自己提交JAR文件时才会进行重命名,而不是在ZIP文件中提交。

端口传递

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

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 2.4 版本的代理服务器。HTTPD但是,不支持 Apache 版本 2.2。

在亚马逊 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它在亚马逊 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); });

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

领域 更改和信息

PHP文件处理

在 AL2 023/ AL2 平台上,使用 PHP-FPM(CGI进程管理器)处理PHP文件。在亚马逊 Linux AMI 平台上,我们使用了 mod_php(一个 Apache 模块)。

代理服务器

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

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

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

领域 更改和信息

WSGI服务器

在 AL2 023/ AL2 平台上,Gunicorn 是默认服务器。WSGI默认情况下,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它在亚马逊 Linux AMI 平台/opt/python/current/app上。

代理服务器

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

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

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