使用 AWS OpsWorks Stacks Agent CLI - AWS OpsWorks

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

使用 AWS OpsWorks Stacks Agent CLI

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

注意

代理 CLI 仅适用于 Linux 实例。

在每个在线实例上, AWS OpsWorks Stacks 都会安装一个代理,该代理与服务进行通信。 AWS OpsWorks Stacks 服务反过来向代理发送命令以执行任务,例如在生命周期事件发生时在实例上启动 Chef 运行。在 Linux 实例中,代理公开了一个对故障排除非常有用的命令行界面 (CLI)。要运行代理 CLI 命令,请使用 SSH 连接到实例。然后,您就可以运行代理 CLI 命令来执行各种任务,包括以下任务:

有关如何设置与实例的 SSH 连接的更多信息,请参阅使用 SSH 登录。您还必须拥有堆栈的 SSH 和 Sudo 权限

本部分介绍了如何使用代理 CLI 进行故障排除。有关更多信息和完整的命令参考,请参阅 AWS OpsWorks 堆栈代理 CLI

执行配方

代理 CLI run_command 命令指示代理返回一个它之前执行过的命令。对故障排除最有用的命令为 setupconfiguredeployundeploy,每个命令对应于一个生命周期事件。这些命令指示代理启动 Chef 运行以执行关联的配方。

注意

run_command 命令仅限于执行与指定命令关联的配方组,通常是与生命周期事件关联的配方。您不能用它来执行特定的配方。要执行一个或多个指定的配方,请使用 Execute Recipes 堆栈命令或等效的 CLI 或 API 操作(create-deploymentCreateDeployment)。

run_command 命令对调试自定义配方非常有用,尤其是分配到 Setup 和 Configure 生命周期事件的配方,您无法从控制台直接触发这些事件。通过使用 run_command,您可以随时依照您的需要来运行特定事件的配方,而无须启动或停止实例。

注意

AWS OpsWorks Stacks 从实例的食谱缓存中运行食谱,而不是食谱存储库。 AWS OpsWorks 实例启动时,Stacks 会将食谱下载到此缓存中,但如果您随后修改食谱,则不会自动更新在线实例上的缓存。如果您在实例启动后修改了您的说明书,请确保运行 Update Cookbooks 堆栈命令以使用存储库中最新版本更新说明书缓存。

代理仅缓存最近的命令。您可以通过运行 list_commands 列出这些命令,它会返回一个包含已缓存的命令和命令执行时间的列表。

sudo opsworks-agent-cli list_commands 2013-02-26T19:08:26 setup 2013-02-26T19:12:01 configure 2013-02-26T19:12:05 configure 2013-02-26T19:22:12 deploy

要重新运行最近的命令,请运行:

sudo opsworks-agent-cli run_command

要重新运行最近实例的指定命令,请运行:

sudo opsworks-agent-cli run_command command

例如,要重新运行 Setup 配方,您可以运行以下命令:

sudo opsworks-agent-cli run_command setup

每个命令都有一个关联的堆栈配置和部署 JSON,表示该命令运行时堆栈和部署的状态。由于这些数据可能会因命令而异,因此,较早实例的命令与最近的命令可能使用略微不同的数据。要重新运行特定实例的命令,请复制 list_commands 输出中的时间,并运行以下命令:

sudo opsworks-agent-cli run_command time

前面的示例均使用默认的 JSON 重新运行命令,即为该命令安装的 JSON。您可以使用任意 JSON 文件重新运行命令,如下所示:

sudo opsworks-agent-cli run_command -f /path/to/valid/json.file

显示 Chef 日志

代理 CLI show_log 命令显示一个指定的日志。在该命令执行完毕后,您将看到文件结尾。因此,show_log 命令提供了一种查看日志结尾的简便方法,您通常会在这里找到错误信息。您可以向上滚动以查看日志的前面部分。

要显示当前命令的日志,请运行以下命令:

sudo opsworks-agent-cli show_log

您也可以显示特定命令的日志,但请注意,代理仅缓存最后 30 个命令的日志。您可以通过运行 list_commands,列出某个实例的命令,该命令返回一个包含已缓存的命令和命令执行时间的列表。有关示例,请参阅执行配方

要显示特定命令最近执行情况的日志,请运行以下命令:

sudo opsworks-agent-cli show_log command

该命令参数可设置为 setupconfiguredeployundeploystartstoprestart。大多数这些命令对应于生命周期事件,指示代理运行关联的配方。

要显示特定命令执行情况的日志,请复制 list_commands 输出中的日期并运行:

sudo opsworks-agent-cli show_log date

如果命令仍在执行中,show_log 会显示日志的当前状态。

注意

解决错误和 out-of-memory问题的一种方法是在执行期间跟踪日志,如下所示:show_log

  1. 使用 run_command 来触发相应的生命周期事件。有关更多信息,请参阅 执行配方

  2. 重复运行 show_log 以在日志写入时查看日志的结尾部分。

如果 Chef 运行的内存不足或意外退出,则日志将突然结束。如果配方失败,则日志的结尾将包含一个异常信息和堆栈跟踪。

显示堆栈配置和部署 JSON

配方使用的大部分数据来自堆栈配置和部署 JSON,它定义了一组 Chef 属性,提供堆栈配置、任何部署和用户可添加的可选自定义属性的详细描述。对于每个命令, AWS OpsWorks Stacks 都会安装一个 JSON,该JSON表示命令执行时的堆栈和部署状态。有关更多信息,请参阅 堆栈配置和部署属性

如果您的自定义配方从堆栈配置和部署 JSON 中获取数据,您可以通过检查该 JSON 来验证数据。显示堆栈配置和部署 JSON 最简单的方式是运行代理 CLI get_json 命令,该命令将显示格式化版本的 JSON 对象。下面显示了某些典型输出的前几行内容:

{ "opsworks": { "layers": { "php-app": { "id": "4a2a56c8-f909-4b39-81f8-556536d20648", "instances": { "php-app2": { "elastic_ip": null, "region": "us-west-2", "booted_at": "2013-02-26T20:41:10+00:00", "ip": "10.112.235.192", "aws_instance_id": "i-34037f06", "availability_zone": "us-west-2a", "instance_type": "c1.medium", "private_dns_name": "ip-10-252-0-203.us-west-2.compute.internal", "private_ip": "10.252.0.203", "created_at": "2013-02-26T20:39:39+00:00", "status": "online", "backends": 8, "public_dns_name": "ec2-10-112-235-192.us-west-2.compute.amazonaws.com" ...

您可以显示最近的堆栈配置和部署 JSON,如下所示:

sudo opsworks-agent-cli get_json

通过执行以下命令,您可以显示特定命令最近的堆栈配置和部署 JSON:

sudo opsworks-agent-cli get_json command

该命令参数可设置为 setupconfiguredeployundeploystartstoprestart。大多数这些命令对应于生命周期事件,指示代理运行关联的配方。

通过指定命令的日期,您可以显示特定命令执行的堆栈配置和部署 JSON,如下所示:

sudo opsworks-agent-cli get_json date

使用此命令的最简单方法如下所示:

  1. 运行 list_commands,该命令会返回一个列表,其中包含已在实例上运行的命令以及每个命令的运行日期。

  2. 复制相应命令的日期,并将该日期用作 get_json date 参数。