Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 AWS CLI 的 Systems Manager Run Command 演练

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

重要

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

步骤 1:入门

您必须具有要配置的实例的管理员权限或必须已获得 IAM 中的适当权限。另请注意,此示例将使用 us-east-1 区域。Run Command 目前在以下 Systems Manager 区域中可用。有关更多信息,请参阅 Systems Manager 先决条件

使用 AWS CLI 执行命令

  1. 运行以下命令指定您的凭证和区域。

    Copy
    aws configure
  2. 系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: us-east-1 Default output format [None]: ENTER
  3. 列出所有可用文档

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

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

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

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

    注意

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

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

步骤 2:运行 Shell 脚本

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

查看说明和可用参数

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

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

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

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

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

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

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

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

Copy
aws ssm list-command-invocations --command-id "command ID" --details

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

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

Copy
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。

Copy
aws ssm list-commands --command-id $sh_command_id

获取命令详细信息

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

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

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

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

Copy
aws ssm list-command-invocations --instance-id instance ID --command-id $sh_command_id –-details

步骤 5:其他示例

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

Copy
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' --version --output text --query "Command.CommandId")

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

Copy
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"