AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

演练:将 AWS CLI 与 Run Command 结合使用

以下示例演练说明如何使用 AWS CLI 查看有关命令和命令参数的信息、如何运行命令以及如何查看这些命令的状态。

重要

仅允许受信任的管理员使用本主题中所示的 Systems Manager 预配置文档。在 Systems Manager 文档中指定的命令和脚本需要管理权限才能在您的实例上运行。如果用户有权运行任何预定义的 Systems Manager 文档(任何以 AWS 开头的文档),则该用户也具有实例的管理员访问权限。对于所有其他用户,您应创建限制性文档并与特定用户共享这些文档。有关限制对 Run Command 的访问权限的更多信息,请参阅为 Systems Manager 创建非管理员 IAM 用户和组

步骤 1:入门

您必须具有要配置的实例的管理员权限或必须已获得 IAM 中的适当权限。另请注意,此示例使用 US East (Ohio) Region (us-east-2)。Run Command 目前在 Amazon Web Services General ReferenceAWS Systems Manager 中列出的 AWS 区域中可用。有关更多信息,请参阅Systems Manager 先决条件

使用 AWS CLI 运行命令

  1. 安装并配置 AWS CLI(如果尚未执行该操作)。

    有关信息,请参阅安装或升级 AWS CLI,然后对其进行配置

  2. 列出所有可用文档

    此命令将基于 IAM 权限列出您的账户可用的所有文档。此命令将返回 Linux 和 Windows 文档的列表。

    aws ssm list-documents
  3. 验证实例是否准备好接收命令

    以下命令的输出将显示实例是否处于联机状态。

    aws ssm describe-instance-information --output text --query "InstanceInformationList[*]"
  4. 使用以下命令查看有关特定实例的详细信息。

    注意

    要运行本演练中的命令,您必须替换实例和命令 ID。命令 ID 将作为 send-command 的响应返回。可从 Amazon EC2 控制台获得实例 ID。

    aws ssm describe-instance-information --instance-information-filter-list key=InstanceIds,valueSet=instance ID

步骤 2:运行 Shell 脚本

利用 Run Command 和 AWS-RunShellScript 文档,您可以在 EC2 实例上运行任何命令或脚本,就像您已在本地登录一样。

查看说明和可用参数

  • 使用以下命令查看 Systems Manager JSON 文档的描述。

    aws ssm describe-document --name "AWS-RunShellScript" --query "[Document.Name,Document.Description]"
  • 使用以下命令查看可用参数和有关这些参数的详细信息。

    aws ssm describe-document --name "AWS-RunShellScript" --query "Document.Parameters[*]"

步骤 3:使用 AWS-RunShellScript 文档发送命令 - 示例 1

使用以下命令获取实例的 IP 信息。

aws ssm send-command --instance-ids "instance ID" --document-name "AWS-RunShellScript" --comment "IP config" --parameters commands=ifconfig --output text

使用响应数据获取命令信息

以下命令使用从上一个命令返回的命令 ID 来获取命令执行的详细信息和响应数据。如果命令已完成,系统将返回响应数据。如果命令执行显示 "Pending""InProgress",您将需要再次运行此命令来查看响应数据。

aws ssm list-command-invocations --command-id $sh_command_id --details

步骤 4:使用 AWS-RunShellScript 文档发送命令 - 示例 2

以下命令显示运行命令的默认用户账户。

sh_command_id=$(aws ssm send-command --instance-ids "instance ID" --document-name "AWS-RunShellScript" --comment "Demo run shell script on Linux Instance" --parameters commands=whoami --output text --query "Command.CommandId")

获取命令状态

以下命令使用命令 ID 获取实例上的命令执行的状态。此示例使用上一个命令中返回的命令 ID。

aws ssm list-commands --command-id "command_ID"

获取命令详细信息

以下命令使用来自上一命令的命令 ID 来获取每个实例的命令执行的状态。

aws ssm list-command-invocations --command-id "command_ID" --details

获取带有特定实例的响应数据的命令信息

以下命令返回特定实例的原始 aws ssm send-command 的输出。

aws ssm list-command-invocations --instance-id instance ID --command-id "command_ID" --details

其他示例

以下命令返回在实例上运行的 Python 的版本。

sh_command_id=$(aws ssm send-command --instance-ids "instance ID" --document-name "AWS-RunShellScript" --comment "Demo run shell script on Linux Instances" --parameters commands='python -V' --output text --query "Command.CommandId") sh -c 'aws ssm list-command-invocations --command-id "$sh_command_id" --details --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'

以下命令使用 Run Command 运行 Python 脚本。

sh_command_id=$(aws ssm send-command --instance-ids "instance ID" --document-name "AWS-RunShellScript" --comment "Demo run shell script on Linux Instances" --parameters '{"commands":["#!/usr/bin/python","print \"Hello world from python\""]}' --output text --query "Command.CommandId") sh -c 'aws ssm list-command-invocations --command-id "$sh_command_id" --details --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'