当我在 AWS OpsWorks 中使用 StartInstance API 时,如何启动我的 Linux 实例?

上次更新时间:2019 年 6 月 6 日

当我在 AWS OpsWorks 中使用 StartInstance API 调用时,我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例未启动。如何启动我的实例?

简短描述

当您发出 StartInstance API 调用时,OpsWorks 会执行以下流程:

  1. 根据操作系统类型构建实例用户数据。
  2. 启动 Amazon EC2 RunInstances 调用可能会导致与 Amazon EC2 限制相关的问题。
  3. 如果实例无法连接到 Internet,则在实例启动期间运行用户数据并安装从 Amazon Simple Storage Service (Amazon S3) 下载的 OpsWorks 代理可能会导致问题。
    注意:对于较新的操作系统版本(Ubuntu 16.04 LTS、CentOS 7),systemd 可管理该代理。Monit 用于监控和管理其他受支持的操作系统版本上的代理。
  4. 在实例联机且代理运行之后,持续轮询新命令并执行这些命令。

以上任何阶段失败都可能会导致实例处于 start_failed 状态。

解决方法

要启动您的 Linux 实例,请完成以下问题排查步骤:

1.    要检查与实例用户脚本执行相关的错误,请查看位于 /var/log/aws/opsworks/user-data.log 文件。

2.    要验证 OpsWorks 代理是否已安装,请检查 installer.log 是否存在可能已阻止安装的系统相关问题。例如,如果 installer.log 不存在,您可以通过启动日志来了解代理是否已安装。

注意:代理安装失败的最常见原因是未正确配置 Amazon Virtual Private Cloud (Amazon VPC)。请确保您的 VPC 中的实例可以访问 Internet。如果实例无法访问 Internet,则在尝试下载并安装代理时会失败。

3.    要查看哪些以及多少个代理进程正在运行,请运行以下命令:

$ ps -ef |grep opsworks-agent|wc -l
4

4.    要验证代理是否正在运行,请运行适合您的操作系统的命令。

如果代理在较新的操作系统版本上运行,且没有使用 systemd,请运行以下命令以验证 Monit 是否正在运行:

$ sudo service monit status
monit (pid 1769) is running...

或者

如果代理在较新的操作系统版本上运行,且使用了 systemd,请检查 journalctl 日志

或者

如果您的代理在使用 System V 的较旧操作系统版本上运行,请检查以下各项:

root@custsew2:/home/ubuntu# systemctl status opsworks-agent |grep Active
Active: active (running) since Tue 2016-06-28 17:47:03 UTC; 37s ago

注意:对于使用 Windows 的堆栈,请检查位于 /var/log/aws/opsworksC:\ProgramData\OpsWorksAgent 的日志,查明代理未运行的原因。

5.    如果 Monit 未运行,请检查 /var/log/messages/var/log/system.log 来排查原因。

6.    在完成步骤 1 至 5 之后,如果代理仍处于 start_failed 状态,请检查 opsworks-agent.process_command.log。通过此日志,您可以了解代理是否已收到要处理的 setup 命令。此外,验证实例或本地系统上的内部防火墙或路由表是否允许代理到达 OpsWorks 终端节点。

7.    在完成步骤 6 之后,如果代理仍处于 start_failed 状态,请运行 describe-service-errors 命令来查找可能会阻止实例启动的常见错误

$ aws opsworks describe-service-errors --instance-id 63133710-806b-40e7-bbd1-8eb3ccd8c20b

这篇文章对您是否有帮助?

您觉得我们哪些地方需要改进?


需要更多帮助?