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

排查 Elastic Beanstalk 环境的问题

本章提供关于对 Elastic Beanstalk 环境进行故障排除的指导。其中包括以下内容:

  • Amazon Systems Manager 简介,其中包含预定义 Elastic Beanstalk 运行手册的运行步骤,该运行手册将提供故障排除步骤和建议。

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

  • 按类别整理的具体故障排除提示。

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

尝试使用 Amazon Q 开发者版 CLI 进行人工智能辅助故障排除

Amazon Q 开发者版 CLI 可以帮助您针对环境问题快速进行故障排除。Q CLI 可通过检查环境状态、审核事件、分析日志和询问澄清问题来提供解决方案。有关更多信息和详细演练,请参阅 Amazon 博客中的 Troubleshooting Elastic Beanstalk Environments with Amazon Q Developer CLI

使用 Amazon Systems Manager Elastic Beanstalk 运行手册

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

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

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

有关更多信息,请参阅《Amazon Systems Manager Automation Runbook Reference》中的 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. (可选)对于 S3UploaderLink,如果 Amazon Support 工程师向您提供了用于日志收集的 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 服务器日志包含有关传入请求和错误的信息。

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

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

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

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

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

事件:Instance deployment failed to get one or more secrets

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

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

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

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

  • 如果事件是通过 UpdateEnvironment 调用触发,请重试 UpdateEnvironment 操作。

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

事件:Instance deployment detected one or more multiline environment values, which are not supported for this platform

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

事件:CreateEnvironment fails when a secret is specified

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

环境创建和实例启动

事件:启动环境失败

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

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

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

事件:无法创建以下资源:[AWSEBInstanceLaunchWaitCondition]

此消息指示您环境的 Amazon EC2 实例未与成功启动的 Elastic Beanstalk 通信。如果实例没有 Internet 连接就会出现这种情况。如果您配置了环境以在私有 VPC 子网中启动实例,请确保子网具有 NAT 以允许实例连接到 Elastic Beanstalk。

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

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

部署

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

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

事件:Failed to create the Amazon Elastic Beanstalk application version

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

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

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

健康

事件:CPU 使用率超过 95.00%

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

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

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

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

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

事件:EC2 实例启动失败。等待新的 EC2 实例启动……

您环境的实例类型可能具有低可用性,或者您已达到了账户的实例配额。检查服务运行状况控制面板,以确保 Elastic Compute Cloud (Amazon EC2) 服务为绿色,或者请求提高配额

配置了双堆栈负载均衡器的环境

事件:VPC vpc_id does not have IPv6 CIDR blocks configured. 双堆栈负载均衡器需要 IPv6 CIDR 数据块。在使用双堆栈模式之前,请将 IPv6 CIDR 数据块与 VPC 关联。

VPC 和所有子网都必须有与之关联的 IPv6 CIDR 数据块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息,请参阅本主题前面的 Amazon VPC 先决条件

事件:One or more subnets for VPC vpc_id do not have IPv6 CIDR blocks configured. 双堆栈负载均衡器所用的子网需要 IPv6 CIDR 数据块。在使用双堆栈模式之前,请将 IPv6 CIDR 数据块与所有必需的子网关联。

VPC 的所有子网都必须有与之关联的 IPv6 CIDR 数据块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息,请参阅本主题前面的 Amazon VPC 先决条件

错误:The IpAddressType option can only be applied on Elastic Beanstalk environments configured with an Application Load Balancer or Network Load Balancer.

此消息表明 Elastic Beanstalk 环境可能是单实例环境,或者该环境可能正在使用经典负载均衡器。只有配置了应用程序负载均衡器或网络负载均衡器的环境才能配置 IpAddressType

配置

事件:The stack stack_id associated with environment environment-ID is in stack-status state

环境的底层 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 cannot be attached to multiple subnets in the same AZ

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

Docker 容器故障排除

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

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

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

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

事件:无法从存储桶名称下载身份验证凭证存储库

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

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

您的身份验证文件 (config.json) 格式不正确。请参阅 映像存储库的身份验证

常见问题

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

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

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

您可以使用 API、CLI、Eclipse 插件或 Visual Studio 插件来选取特定可用区。有关使用 Elastic Beanstalk 控制台指定可用区的说明,请参阅使用 Auto Scaling 功能自动扩缩 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. You must either specify an environment by typing "eb status my-env-name" or set a default environment by typing "eb use my-env-name".

原因:在 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 界面方便地检查部署的各个方面,包括应用程序的配置、状态、事件和日志。您也可以下载当前或过去您已部署到服务器的应用程序版本。