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

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

排查 Elastic Beanstalk 环境的问题

本章提供关于对 Elastic Beanstalk 环境进行故障排除的指导。其中提供以下信息。

  • S Amazon ystems Manager 工具简介,以及运行预定义的 Elastic Beanstalk 运行手册的程序,该运行手册会输出故障排除步骤和建议。

  • 关于在环境状态降级时可采取的措施及可查看的资源的一般指导。

  • 按主题类别提供的更具体故障排除提示。

注意

如果您的环境运行状况变为红色,建议您首先使用包含预定义运行手册的 Amazon Systems Manager 工具,对 Elastic Beanstalk 进行故障排除。有关更多信息,请参阅 使用 Systems Manager 工具

使用 Amazon Systems Manager Elastic Beanstalk 运行手册

您可以使用 Systems Manager 对 Elastic Beanstalk 环境进行故障排除。为帮助您快速入门,Systems Manager 提供预定义的 Elastic Beanstalk 自动化运行手册。自动化运行手册是一种 Systems Manager 文档,用于定义要对环境的实例及其他 Amazon 资源执行的操作。

AWSSupport-TroubleshootElasticBeanstalk 文档是一本自动化运行手册,旨在帮助识别一系列可能导致 Elastic Beanstalk 环境降级的常见问题。为此,它会检查您的环境组件,包括: EC2 实例、VPC、 Amazon CloudFormation 堆栈、负载均衡器、Auto Scaling 组以及与安全组规则、路由表和 ACLs关联的网络配置。

它还会提供将捆绑日志文件从环境上传到 Amazon Support 的选项。

有关更多信息,请参阅 Amazon Systems Manager Automation 运行手册参考中的 AWSSupport-TroubleshootElasticBeanstalk

通过 Systems Manager 运行 AWSSupport-TroubleshootElasticBeanstalk 运行手册
注意

在 Elastic Beanstalk 环境 Amazon Web Services 区域 所在的位置运行此过程。

  1. 打开 Amazon Systems Manager控制台

  2. 从导航窗格中的变更管理下,选择自动化

  3. 选择执行自动化

  4. Amazon 所有选项卡的自动化文档搜索框中,输入 AWSSupport-TroubleshootElasticBeanstalk

  5. 选择AWSSupport-TroubleshootElasticBeanstalk卡片,然后选择 “下一步”。

  6. 选择执行

  7. 输入参数部分中:

    1. 从下AutomationAssumeRole拉列表中,选择允许 Systems Manager 代表您执行操作的角色的 ARN。

    2. 对于 ApplicationName,输入 Elastic Beanstalk 应用程序的名称。

    3. 环境名称中,输入 Elastic Beanstalk 环境。

    4. (可选)对于 S3 UploaderLink,如果 Amazon 支持工程师为您提供了用于日志收集的 S3 链接,请输入链接。

  8. 选择执行

    如果任一步骤失败,请选择该失败步骤的步骤 ID 列下的链接。这将显示该步骤的执行详细信息页面。该VerificationErrorMessage部分将显示需要注意的步骤的摘要。例如,IAMPermissionCheck 可能会显示警告消息。在这种情况下,您可以检查在下AutomationAssumeRole拉列表中选择的角色是否具有必要的权限。

成功完成所有步骤后,输出会提供故障排除步骤和建议,以将环境恢复到正常运行状态。

排查 Elastic Beanstalk 环境问题的一般指导

错误消息可显示在控制台的“事件”页面、日志中或“运行状况”页面上。您也可以采取措施从最近更改所导致的降级环境中恢复。如果您的环境运行状况变为红色,请尝试以下操作:

  • 如果对您的环境执行的操作返回包含该文本的错误The stack stack_id associated with environment environment-ID is in stack-status state,请参阅将你的 Elastic Beanstalk 环境从无效状态恢复以获取疑难解答帮助。

  • 如果对您的环境执行的操作返回包含该文本的错误Environment environment-name associated CloudFormation stack stack_arn does not exist,请终止您的环境并创建另一个环境。

  • 检查最近的环境事件。来自 Elastic Beanstalk 的有关部署、加载和配置问题的消息通常出现在此处。

  • 检查最近的环境更改历史记录。更改历史记录列出了对环境进行的所有配置更改,并包括其他信息,例如哪些 IAM 用户进行了更改以及设置了哪些配置参数。

  • 拉取日志以查看最近的日志文件条目。Web 服务器日志包含有关传入请求和错误的信息。

  • 连接到实例并检查系统资源。

  • 回滚到应用程序的前一个正常工作的版本。

  • 撤消最近的配置更改或还原已保存的配置

  • 部署新环境。如果环境看起来运行状况良好,则执行别名记录交换以将流量路由到新环境并继续调试旧环境。

使用环境变量访问密钥和参数的环境

事件:实例部署未能获取一个或多个密钥

此消息表明 Elastic Beanstalk 无法获取您的应用程序部署期间指定的一个或多个密钥。

  • 检查您的环境变量配置中由 ARN 值指定的资源是否存在。

  • 确认您的 Elastic Bean EC2 stalk 实例配置文件角色具有访问资源所需的 IAM 权限。

  • 如果此事件是通过RestartAppServer操作触发的,则问题修复后,请重试RestartAppServer调用以解决问题。

  • 如果事件是通过UpdateEnvironment呼叫触发的,请重试该UpdateEnvironment操作。

有关这些命令的示例,请参阅 Elastic Beanstalk 的Amazon CLI 示例。有关这些操作的 API 操作的更多信息,请参阅 Amazon Elastic Beanstalk API 参考

事件:实例部署检测到一个或多个多行环境值,该平台不支持这些值

亚马逊 Linux 2 平台不支持多行变量,Docker 和 ECS 托管 Docker 平台除外。有关继续操作的可用选项,请参阅多行值

事件:指定密钥时CreateEnvironment 失败

CreateEnvironment失败并且你有密钥作为环境变量时,你需要解决潜在的问题,然后使用UpdateEnvironment来完成环境设置。请勿使用RestartAppServer,因为在这种情况下它不足以改善环境。有关这些命令的示例,请参阅 Elastic Beanstalk 的Amazon CLI 示例。有关这些操作的 API 操作的更多信息,请参阅 Amazon Elastic Beanstalk API 参考

环境创建和实例启动

事件:启动环境失败

此事件在 Elastic Beanstalk 尝试启动环境并在过程中遭遇失败时发生。事件页上过去的事件会提醒您此问题的根本原因。

事件:环境创建完成,但出现命令超时。请尝试增加超时时间。

如果您使用的配置文件要对实例运行命令、下载大型文件或安装程序包,则部署应用程序的时间可能很长。增加命令超时,让应用程序在部署期间有更多时间开始运行。

事件:创建以下资源失败:[AWSEBInstanceLaunchWaitCondition]

此消息表明您环境的亚马逊 EC2 实例未向 Elastic Beanstalk 传达已成功启动的信息。如果实例没有 Internet 连接就会出现这种情况。如果您配置了环境以在私有 VPC 子网中启动实例,请确保子网具有 NAT 以允许实例连接到 Elastic Beanstalk。

事件:此区域中需要服务角色。请将服务角色选项添加到环境。

Elastic Beanstalk 使用服务角色来监视环境中的资源并支持托管平台更新。请参阅管理 Elastic Beanstalk 服务角色了解更多信息。

部署

问题:应用程序在部署期间变得不可用

由于 Elastic Beanstalk 使用直接升级过程,因此可能会有几秒钟的停机时间。使用滚动部署可尽量减少部署对您的生产环境的影响。

事件:创建 Amazon Elastic Beanstalk 应用程序版本失败

应用程序源包可能太大,或者您已达到了应用程序版本配额

事件:环境更新完成,但出现命令超时。请尝试增加超时时间。

如果您使用的配置文件要对实例运行命令、下载大型文件或安装程序包,则部署应用程序的时间可能很长。增加命令超时,让应用程序在部署期间有更多时间开始运行。

健康

事件:CPU 使用率超过 95.00%

尝试运行更多实例选择不同的实例类型

事件:Elastic Load Balancer awseb-运行正常的实例myapp为零

如果您的应用程序确实在工作,请确保正确配置了应用程序的运行状况检查 URL。如果不是这种情况,请查看运行状况屏幕和环境日志以了解更多信息。

事件:Elastic Load Balancer awseb-找myapp不到

您的环境的负载均衡器可能已被移除 out-of-band。仅使用配置选项以及 Elastic Beanstalk 提供的可扩展性对环境资源进行更改。重建您的环境或者启动新环境。

事件:EC2 实例启动失败。正在等待新 EC2 实例启动...

您环境的实例类型可能具有低可用性,或者您已达到了账户的实例配额。查看服务运行状况控制面板,确保弹性计算云 (Amazon EC2) 服务处于绿色状态,或者申请增加配额

配置

事件:与环境stack_id关联的堆栈environment-ID处于stack-status状态

您的环境的底层 Amazon CloudFormation 堆栈可能处于 *_FAILED 状态。必须修复此状态,才能继续在您的环境中运行 Elastic Beanstalk。有关更多信息,请参阅 将你的 Elastic Beanstalk 环境从无效状态恢复

事件:您无法使用 Elastic Load Balancing Target(Elastic Load Balancing 目标)选项和 Application Healthcheck URL(应用程序运行状况检查 URL)选项的值来配置 Elastic Beanstalk 环境

Target 命名空间中的 aws:elb:healthcheck 选项已弃用。从环境中删除 Target 选项命名空间,然后重试更新。

事件:ELB 无法连接到同一个可用区的多个子网

如果您尝试在同一可用区的子网之间移动负载均衡器,则会看到此消息。更改负载均衡器上的子网需要将其移出原始可用区,然后将所需子网移回原始可用区。在此过程中,您的所有实例都将在两者之间迁移 AZs,从而导致长时间停机。相反,请考虑创建新环境并执行别名记录交换

Docker 容器故障排除

事件:无法拉取最新 Docker 映像:资源库名称 () 无效,只允许 [a-z0-9-_.]。有关详细信息,请跟踪日志。

使用 JSON 验证程序检查 dockerrun.aws.json 文件的语法。另请针对 准备 Docker 映像以部署到 Elastic Beanstalk 中说明的要求验证 dockerfile 内容

事件:在 Dockerfile 中未找到 EXPOSE 指令,中止部署

Dockerfiledockerrun.aws.json 文件未声明容器端口。使用 EXPOSE 指令 (Dockerfile) 或 Ports 块 (dockerrun.aws.json 文件) 为传入流量公开端口。

事件:无法repository从中下载身份验证凭证 bucket name

.dockercfg文件dockerrun.aws.json提供了无效的 EC2 key pair and/or S3 存储桶。或者,实例配置文件没有 S3 存储桶的 GetObject 授权。验证该.dockercfg文件是否包含有效的 S3 存储桶和 k EC2 ey pair。在实例配置文件中授予 IAM 角色执行 s3:GetObject 操作的权限。有关详细信息,请转到 管理 Elastic Beanstalk 实例配置文件

事件: 活动执行失败,原因是出现警告:身份验证配置文件无效

您的身份验证文件 (config.json) 格式不正确。请参阅 使用 Elastic Beanstalk 中私有存储库中的图像

常见问题解答

问题:如何将我的应用程序 URL 从 myapp.us-west-2.elasticbeanstalk.com 更改为 www.myapp.com?

在 DNS 服务器中注册一个别名记录,如 www.mydomain.com CNAME mydomain.elasticbeanstalk.com

问题如何为我的 Elastic Beanstalk 应用程序指定一个特定可用区。

你可以使用 APIs、CLI、Eclipse 插件或 Visual Studio 插件来选择特定的可用区。有关使用 Elastic Beanstalk 控制台指定可用区的说明,请参阅自动缩放您的 Elastic Beanstalk 环境实例

问题:如何更改我的环境的实例类型?

要更改环境的实例类型,请转到环境配置页面,然后在实例配置类别中选择编辑。然后,选择一种新的实例类型并选择 Apply(应用)以更新环境。之后,Elastic Beanstalk 终止所有正在运行的实例,并将之替换为新实例。

问题:如何确定是否有人对环境进行了配置更改?

要查看此信息,请在 Elastic Beanstalk 控制台的导航窗格中选择 Change history(更改历史记录)以显示所有环境的配置更改列表。此列表包括更改的日期和时间、更改的配置参数及值以及进行更改的 IAM 用户。有关更多信息,请参阅更改历史记录

问题:能否防止在实例终止时删除 Amazon EBS 卷?

您环境中的实例使用 Amazon EBS 进行存储;不过,当 Auto Scaling 终止一个实例时,根卷会被删除。我们不建议您在实例上存储状态或其他数据。如有必要,您可以使用 Amazon CLI:防止卷被删除$ aws ec2 modify-instance-attribute -b '/dev/sdc=<vol-id>:false,如Amazon CLI 参考中所述。

问题:如何删除 Elastic Beanstalk 应用程序中的个人信息?

Amazon 你的 Elastic Beanstalk 应用程序使用的资源可能会存储个人信息。当您终止环境时,Elastic Beanstalk 将终止其创建的资源。还将终止使用配置文件添加的资源。但是,如果您在 Elastic Beanstalk 环境之外创建了 Amazon 资源并将其与应用程序关联,则可能需要手动检查您的应用程序可能存储的个人信息是否未被保留。在本开发人员指南中,当我们讨论额外资源的创建时,我们还提到了何时应考虑删除它们。

常见错误

本主题列出了使用 EB CLI 时遇到的常见错误消息和可能的解决方案。如果您遇到此处未显示的错误消息,请使用反馈 链接告诉我们。

ERROR: An error occurred while handling git command. Error code: 128 Error: fatal: Not a valid object name HEAD

原因:初始化 Git 存储库后但尚未提交时会显示此错误消息。当项目文件夹包含 Git 存储库时,EB CLI 会查找 HEAD 修订。

解决方案:将项目文件夹中的文件添加到暂存区中并提交。

~/my-app$ git add . ~/my-app$ git commit -m "First commit"

ERROR: This branch does not have a default environment. 您必须通过键入 “eb status my-env-name” 来指定环境,或者通过键入 “eb us my-env-name e” 来设置默认环境。

原因:在 git 中创建新分支时,默认情况下未挂载到 Elastic Beanstalk 环境。

解决方案:运行 eb list 查看可用环境列表。然后运行 eb use env-name 使用一个可用环境。

ERROR: 2.0+ Platforms require a service role. You can provide one with --service-role option

原因:如果您使用 eb create 指定环境名称(例如 eb create my-env),EB CLI 不会尝试为您创建服务角色。如果没有默认服务角色,就会显示以上错误。

解决方案:不带环境名称运行 eb create,按照提示创建默认服务角色。

部署错误

您的 Elastic Beanstalk 部署可能会以 404(如果您的应用程序无法启动)或 500(如果您的应用程序在运行时失败)响应响应。要解决许多常见问题,您可以使用 EB CLI 检查部署状态、查看其日志、通过 SSH 访问您的 EC2 实例,或者打开应用程序环境的 Amazon 管理控制台页面。

使用 EB CLI 帮助排除部署的问题
  1. 运行eb status以查看当前部署的状态和 EC2 主机的运行状况。例如:

    $ eb status --verbose Environment details for: python_eb_app Application name: python_eb_app Region: us-west-2 Deployed Version: app-150206_035343 Environment ID: e-wa8u6rrmqy Platform: 64bit Amazon Linux 2014.09 v1.1.0 running Python 2.7 Tier: WebServer-Standard- CNAME: python_eb_app.elasticbeanstalk.com Updated: 2015-02-06 12:00:08.557000+00:00 Status: Ready Health: Green Running instances: 1 i-8000528c: InService
    注意

    使用 --verbose 开关可提供有关您正在运行实例状态的信息。如果不使用它,eb status 将只输出有关您的环境的一般信息。

  2. 运行 eb health 以查看有关您的环境的运行状况信息:

    $ eb health --refresh elasticBeanstalkExa-env Degraded 2016-03-28 23:13:20 WebServer Ruby 2.1 (Puma) total ok warning degraded severe info pending unknown 5 2 0 2 1 0 0 0 instance-id status cause Overall Degraded Incorrect application version found on 3 out of 5 instances. Expected version "Sample Application" (deployment 1). i-d581497d Degraded Incorrect application version "v2" (deployment 2). Expected version "Sample Application" (deployment 1). i-d481497c Degraded Incorrect application version "v2" (deployment 2). Expected version "Sample Application" (deployment 1). i-136e00c0 Severe Instance ELB health has not been available for 5 minutes. i-126e00c1 Ok i-8b2cf575 Ok instance-id r/sec %2xx %3xx %4xx %5xx p99 p90 p75 p50 p10 Overall 646.7 100.0 0.0 0.0 0.0 0.003 0.002 0.001 0.001 0.000 i-dac3f859 167.5 1675 0 0 0 0.003 0.002 0.001 0.001 0.000 i-05013a81 161.2 1612 0 0 0 0.003 0.002 0.001 0.001 0.000 i-04013a80 0.0 - - - - - - - - - i-3ab524a1 155.9 1559 0 0 0 0.003 0.002 0.001 0.001 0.000 i-bf300d3c 162.1 1621 0 0 0 0.003 0.002 0.001 0.001 0.000 instance-id type az running load 1 load 5 user% nice% system% idle% iowait% i-d581497d t2.micro 1a 25 mins 0.16 0.1 7.0 0.0 1.7 91.0 0.1 i-d481497c t2.micro 1a 25 mins 0.14 0.1 7.2 0.0 1.6 91.1 0.0 i-136e00c0 t2.micro 1b 25 mins 0.0 0.01 0.0 0.0 0.0 99.9 0.1 i-126e00c1 t2.micro 1b 25 mins 0.03 0.08 6.9 0.0 2.1 90.7 0.1 i-8b2cf575 t2.micro 1c 1 hour 0.05 0.41 6.9 0.0 2.0 90.9 0.0 instance-id status id version ago deployments i-d581497d Deployed 2 v2 9 mins i-d481497c Deployed 2 v2 7 mins i-136e00c0 Failed 2 v2 5 mins i-126e00c1 Deployed 1 Sample Application 25 mins i-8b2cf575 Deployed 1 Sample Application 1 hour

    以上示例显示带有五个实例的环境,第三个实例上的版本“v2”部署失败。在部署失败之后,预期版本将重置为最后一个成功的版本,在本例中是第一个部署的“Sample Application”。请参阅使用 EB CLI 监控环境的运行状况了解更多信息。

  3. 运行 eb logs 以下载和查看与您的应用程序部署关联的日志。

    $ eb logs
  4. 运行eb ssh以连接运行您的应用程序的 EC2 实例并直接对其进行检查。在实例上,您部署的应用程序可在 /opt/python/current/app 目录中找到,您的 Python 环境可在 /opt/python/run/venv/ 中找到。

  5. 运行 eb console 以在Amazon 管理控制台上查看您的应用程序环境。您可以使用 Web 界面方便地检查部署的各个方面,包括应用程序的配置、状态、事件和日志。您也可以下载当前或过去您已部署到服务器的应用程序版本。