适用于 Elastic Beanstalk 环境的平台脚本工具 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

适用于 Elastic Beanstalk 环境的平台脚本工具

本主题介绍 Amazon Elastic Beanstalk 为使用 Amazon Linux 平台的环境提供的工具。这些工具位于 Elastic Beanstalk 环境的 Amazon EC2 实例上。

get-config

使用 get-config 工具检索环境变量值以及其他平台和实例信息。可在 /opt/elasticbeanstalk/bin/get-config 中获得此工具。

get-config 命令

每个 get-config 工具命令都返回特定类型的信息。使用以下语法运行任何工具的命令。

$ /opt/elasticbeanstalk/bin/get-config command [ options ]

以下示例运行 environment 命令。

$ /opt/elasticbeanstalk/bin/get-config environment -k PORT

根据您选择的命令和选项,工具返回具有键值对或单个值的对象(JSON 或 YAML)。

您可以通过使用 SSH 连接到 Elastic Beanstalk 环境中的 EC2 实例来测试 get-config

注意

运行 get-config 以进行测试时,某些命令可能需要 root 用户权限才能访问基础信息。如果您收到访问权限错误,请在 sudo 下再次运行命令。

在部署到环境的脚本中使用该工具时,无需添加 sudo。Elastic Beanstalk 以 root 用户身份运行所有脚本。

以下各节介绍这些工具的命令。

get-config optionsettings 命令返回一个对象,其中列出在环境上设置并由平台在环境实例上使用的配置选项。它们按命名空间排列。

$ /opt/elasticbeanstalk/bin/get-config optionsettings {"aws:elasticbeanstalk:application:environment":{"JDBC_CONNECTION_STRING":""},"aws:elasticbeanstalk:container:tomcat:jvmoptions":{"JVM Options":"","Xms":"256m","Xmx":"256m"},"aws:elasticbeanstalk:environment:proxy":{"ProxyServer":"nginx","StaticFiles":[""]},"aws:elasticbeanstalk:healthreporting:system":{"SystemType":"enhanced"},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"}}

要返回特定配置选项值,请使用 --namespace (-n) 选项来指定命名空间,并使用 --option-name (-o) 选项来指定选项名称。

$ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini -o memory_limit 256M

get-config environment 命令返回一个包含环境属性列表的对象。这些属性包括用户配置的属性和由 Elastic Beanstalk 提供的属性。

$ /opt/elasticbeanstalk/bin/get-config environment {"JDBC_CONNECTION_STRING":"","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}

例如,Elastic Beanstalk 提供用于连接到集成 Amazon RDS 数据库实例的环境属性(例如,RDS_HOSTNAME)。这些 RDS 连接属性在 get-config environment 的输出中显示。但是,它们不会在 get-config optionsettings 的输出中显示。这是因为没有在配置选项中设置这些属性。

要返回特定环境属性,请使用 --key (-k) 选项来指定属性键。

$ /opt/elasticbeanstalk/bin/get-config environment -k TESTPROPERTY testvalue

get-config container 命令返回一个对象,其中列出环境实例的平台和环境配置值。

以下示例显示此命令在 Amazon Linux 2 Tomcat 环境上的输出。

$ /opt/elasticbeanstalk/bin/get-config container {"common_log_list":["/var/log/eb-engine.log","/var/log/eb-hooks.log"],"default_log_list":["/var/log/nginx/access.log","/var/log/nginx/error.log"],"environment_name":"myenv-1da84946","instance_port":"80","log_group_name_prefix":"/aws/elasticbeanstalk","proxy_server":"nginx","static_files":[""],"xray_enabled":"false"}

要返回特定键的值,请使用 --key (-k) 选项指定键。

$ /opt/elasticbeanstalk/bin/get-config container -k environment_name myenv-1da84946

get-config addons 命令返回一个包含环境附加项配置信息的对象。使用它检索与环境关联的 Amazon RDS 数据库的配置。

$ /opt/elasticbeanstalk/bin/get-config addons {"rds":{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}}

您可以通过两种方式限制结果。要检索特定附加项的值,请使用 --add-on (-a) 选项指定附加项名称。

$ /opt/elasticbeanstalk/bin/get-config addons -a rds {"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}

要返回附加项中特定密钥的值,请添加 --key (-k) 选项以指定密钥。

$ /opt/elasticbeanstalk/bin/get-config addons -a rds -k RDS_DB_NAME ebdb

get-config platformconfig 命令返回一个对象,其中包含对平台版本恒定不变的平台配置信息。在运行相同平台版本的所有环境中,输出是相同的。命令的输出对象有两个嵌入式对象:

  • GeneralConfig – 包含在所有 Amazon Linux 2 和 Amazon Linux 2023 平台分支的最新版本中恒定不变的信息。

  • PlatformSpecificConfig – 包含对于平台版本而言恒定不变且特定于该版本的信息。

以下示例显示此命令在使用运行 Corretto 11 平台分支的 Tomcat 8.5 的环境上的输出。

$ /opt/elasticbeanstalk/bin/get-config platformconfig {"GeneralConfig":{"AppUser":"webapp","AppDeployDir":"/var/app/current/","AppStagingDir":"/var/app/staging/","ProxyServer":"nginx","DefaultInstancePort":"80"},"PlatformSpecificConfig":{"ApplicationPort":"8080","JavaVersion":"11","TomcatVersion":"8.5"}}

要返回特定键的值,请使用 --key (-k) 选项指定键。这些键在两个嵌入式对象间是唯一的。您不需要指定包含密钥的对象。

$ /opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir /var/app/staging/

get-config 输出选项

使用 --output 选项指定输出对象格式。有效值为 JSON(默认值)和 YAML。这是一个全局选项。您必须在命令名称之前指定该选项。

以下示例以 YAML 格式返回配置选项值。

$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings aws:elasticbeanstalk:application:environment: JDBC_CONNECTION_STRING: "" aws:elasticbeanstalk:container:tomcat:jvmoptions: JVM Options: "" Xms: 256m Xmx: 256m aws:elasticbeanstalk:environment:proxy: ProxyServer: nginx StaticFiles: - "" aws:elasticbeanstalk:healthreporting:system: SystemType: enhanced aws:elasticbeanstalk:hostmanager: LogPublicationControl: "false"

pkg-repo

注意

pkg-repo 工具不适用于基于 Amazon Linux 2023 平台的环境。但是,您可以手动将软件包和操作系统更新应用于 AL2023 实例。有关更多信息,请参阅 Amazon Linux 2023 用户指南中的管理软件包和操作系统更新

在某些紧急情况下,您可能需要使用尚未与所需的 Elastic Beanstalk 平台版本一起发布的 Amazon Linux 2 安全补丁来更新您的 Amazon EC2 实例。默认情况下,您无法对 Elastic Beanstalk 环境执行手动更新。这是因为平台版本被锁定到特定版本的 Amazon Linux 2 存储库。此锁定可确保实例运行受支持且一致的软件版本。对于紧急情况,如果您需要在新的 Elastic Beanstalk 平台版本中发布之前在环境中安装该程序包,则 pkg-repo 工具允许在 Amazon Linux 2 上手动更新 yum 程序包作为解决方法。

Amazon Linux 2 平台上的 pkg-repo 工具提供解锁 yum 程序包存储库的功能。然后,您可以对安全补丁手动执行 yum update。相反,您可以通过使用该工具锁定 yum 程序包存储库来跟踪更新,以防止进一步更新。Elastic Beanstalk 环境中所有 EC2 实例的 /opt/elasticbeanstalk/bin/pkg-repo 目录中均提供 pkg-repo 工具。

使用 pkg-repo 工具的更改只能在使用该工具的 EC2 实例上进行。这些更改不会影响其他实例,也不会阻止将来对环境进行更新。本主题后面提供的示例说明如何通过从脚本和配置文件调用 pkg-repo 命令来跨所有实例应用更改。

警告

我们不建议大多数用户使用此工具。应用于已解锁平台版本的任何手动更改都将被视为带外更改。此选项仅适用于在紧急情况下可接受以下风险的用户:

  • 无法保证程序包版本在您的环境中的所有实例之间保持一致。

  • 使用 pkg-repo 工具修改的环境无法保证正常运行,因为这些环境尚未在 Elastic Beanstalk 支持的平台上进行测试和验证。

我们强烈建议应用包括测试和撤销计划的最佳实践。为帮助促进最佳实践,您可以使用 Elastic Beanstalk 控制台和 EB CLI 克隆环境并交换环境 URL。有关使用这些操作的更多信息,请参阅本指南管理环境一章中的蓝绿部署

如果您计划手动编辑 yum 存储库配置文件,请首先运行 pkg-repo 工具。采用手动编辑的 yum 存储库配置文件的 pkg-repo 工具在 Amazon Linux 2 环境中可能无法按预期工作。这是因为该工具可能无法识别配置更改。

有关 Amazon Linux 程序包存储库的更多信息,请参阅《Amazon EC2 用户指南》中的 Package repository 主题。

pkg-repo 命令

使用以下语法运行 pkg-repo 工具命令。

$ /opt/elasticbeanstalk/bin/pkg-repo command [options]

pkg-repo 命令如下:

  • lock – 将 yum 程序包存储库锁定到特定版本

  • unlock – 从特定版本解锁 yum 程序包存储库

  • status – 列出所有 yum 程序包存储库及其当前锁定状态

  • help – 显示通用帮助或一条命令的帮助

这些选项适用于以下命令:

  • lockunlockstatus –选项:-h--help 或无(默认值)。

  • help – 选项:lockunlockstatus 或无(默认值)。

以下示例运行 unlock 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo unlock Amazon Linux 2 core package repo successfully unlocked Amazon Linux 2 extras package repo successfully unlocked

以下示例运行 lock 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo lock Amazon Linux 2 core package repo successfully locked Amazon Linux 2 extras package repo successfully locked

以下示例运行 status 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo status Amazon Linux 2 core package repo is currently UNLOCKED Amazon Linux 2 extras package repo is currently UNLOCKED

以下示例运行 lock 命令的 help 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo help lock

以下示例运行 pkg-repo 工具的 help 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo help

您可以通过使用 SSH 连接到 Elastic Beanstalk 环境中的实例来测试 pkg-repo。一个 SSH 选项是 EB CLI eb ssh 命令。

注意

pkg-repo 工具需要根用户权限才能运行。如果您收到访问权限错误,请在 sudo 下再次运行命令。

在部署到环境的脚本或配置文件中使用该工具时,无需添加 sudo。Elastic Beanstalk 以 root 用户身份运行所有脚本。

pkg-repo 示例

上一节提供用于在 Elastic Beanstalk 环境的单个 EC2 实例上进行测试的命令行示例。这种方法对测试很有帮助。但是,它一次只更新一个实例,因此将更改应用到环境中的所有实例是不切实际的。

更实用的方法是使用平台挂钩脚本或 .ebextensions 配置文件以一致的方式跨所有实例应用更改。

以下示例从 .ebextensions 文件夹中的配置文件调用 pkg-repo。当您部署应用程序源代码捆绑包时,Elastic Beanstalk 将运行 update_package.config 文件中的命令。

.ebextensions └── update_package.config

要接收最新版本的 docker 程序包,此配置将在 yum update 命令中指定 docker 程序包。

### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

此配置没有在 yum update 命令中指定任何程序包,因此将应用所有可用的更新。

### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

以下示例从 bash 脚本调用 pkg-repo 作为平台挂钩。Elastic Beanstalk 运行位于 prebuild 子目录中的 update_package.sh 脚本文件。

.platform └── hooks └── prebuild └── update_package.sh

要接收最新版本的 docker 程序包,此脚本将在 yum update 命令中指定 docker 程序包。如果省略软件包名称,将应用所有可用的更新。前面的配置文件示例展示了这种情况。

### update_package.sh ### #!/bin/bash /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

download-source-bundle(仅限 Amazon Linux AMI)

在 Amazon Linux AMI 平台分支(Amazon Linux 2 以前的版本)上,Elastic Beanstalk 提供了额外的工具,即 download-source-bundle。部署平台时,使用此工具下载应用程序源代码。可在 /opt/elasticbeanstalk/bin/download-source-bundle 中获得此工具。

示例脚本 00-unzip.sh 位于环境实例上的 appdeploy/pre 文件夹中。它演示在部署过程中如何使用 download-source-bundle 将应用程序源代码下载到 /opt/elasticbeanstalk/deploy/appsource 文件夹。