本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
适用于 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 – 显示通用帮助或一条命令的帮助
这些选项适用于以下命令:
-
lock
、unlock
和status
–选项:-h
、--help
或无(默认值)。 -
help
– 选项:lock
、unlock
、status
或无(默认值)。
以下示例运行 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
文件夹。