演练:使用Amazon带有运行命令的 CLI - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

演练:使用Amazon带有运行命令的 CLI

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

重要

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

第 1 步:入门

您必须具有要配置的实例的管理员权限或必须已获得 AWS Identity and Access Management (IAM) 中的适当权限。另请注意,此示例将使用美国东部(俄亥俄)区域 (us-east-2)。Run Command 当前位于Amazon Web Services 区域列出在Systems Manager Services 终端节点中的Amazon Web Services 通用参考。有关更多信息,请参阅 Systems Manager 的先决条件

使用 运行命令AmazonCLI

  1. 安装和配置Amazon命令行界面 (AmazonCLI),如果尚未执行该操作。

    想要了解有关信息,请参阅安装或升级Amazon命令行工具

  2. 列出所有可用文档。

    此命令将基于 IAM 权限列出您的账户可用的所有文档。

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

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

    Linux & macOS
    aws ssm describe-instance-information \ --output text --query "InstanceInformationList[*]"
    Windows
    aws ssm describe-instance-information ^ --output text --query "InstanceInformationList[*]"
  4. 运行以下命令查看有关特定实例的详细信息。

    注意

    要运行本演练中的命令,请替换实例和命令 ID。命令 ID 将作为对 send-command 的响应返回。实例 ID 可从 Amazon Elastic Compute Cloud (Amazon EC2) 控制台获取。

    Linux & macOS
    aws ssm describe-instance-information \ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
    Windows
    aws ssm describe-instance-information ^ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID

第 2 步:运行 Shell 脚本以查看资源详细信息

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

查看说明和可用参数

运行以下命令以查看 Systems Manager JSON 文档的描述。

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "[Document.Name,Document.Description]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "[Document.Name,Document.Description]"

运行以下命令以查看可用参数和有关这些参数的详细信息。

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "Document.Parameters[*]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "Document.Parameters[*]"

第 3 步:使用发送简单命令AWS-RunShellScript文档

通过以下命令获取实例的 IP 信息。

Linux & macOS
aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "IP config" \ --parameters commands=ifconfig \ --output text
注意

如果目标实例的操作系统类型为Windows Server,将命令从ifconfigipconfig

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

如果目标实例的操作系统类型为Windows Server,将命令从ifconfigipconfig

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

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

Linux & macOS
aws ssm list-command-invocations \ --command-id $sh-command-id \ --details
Windows
aws ssm list-command-invocations ^ --command-id $sh-command-id ^ --details

确定用户账户

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

Linux & macOS
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。

Linux & macOS
aws ssm list-commands \ --command-id "command-ID"
Windows
aws ssm list-commands ^ --command-id "command-ID"

获取命令详细信息

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

Linux & macOS
aws ssm list-command-invocations \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --command-id "command-ID" ^ --details

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

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

Linux & macOS
aws ssm list-command-invocations \ --instance-id instance-ID \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --instance-id instance-ID ^ --command-id "command-ID" ^ --details

显示 Python 版本

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

Linux & macOS
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}"'

第 4 步:使用 Run Command 运行简单 Python 脚本

以下命令使用运行命令运行一个简单的 Python “Hello World” 脚本。

Linux & macOS
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}"'

第 5 步:使用运行命令运行 Bash 脚本

本节中的示例演示如何使用 “运行命令” 运行以下 bash 脚本。

有关使用 “运行命令” 运行存储在远程位置的脚本的示例,请参阅从 Amazon S3 运行脚本从 GitHub 运行脚本

#!/bin/bash yum -y update yum install -y ruby cd /home/ec2-user curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install chmod +x ./install ./install auto

此脚本将安装Amazon CodeDeploy代理和 Amazon Linux 上的Red Hat Enterprise Linux(RHEL)实例,如中所述为 CodeDeploy 创建 Amazon EC2 实例中的Amazon CodeDeploy用户指南

该脚 CodeDeploy 从Amazon托管 Amazon S3 存储桶位于美国东部(俄亥俄)区域(us-east-2)、aws-codedeploy-us-east-2

运行 bash 脚本在AmazonCLI 命令

以下示例演示了如何在 CLI 命令中使用--parameters选项。

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets '[{"Key":"InstanceIds","Values":["instance-id"]}]' \ --parameters '{"commands":["#!/bin/bash","yum -y update","yum install -y ruby","cd /home/ec2-user","curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install","chmod +x ./install","./install auto"]}'

在 JSON 文件中运行 bash 脚本

在下面的示例中,bash 脚本的内容存储在 JSON 文件中,并使用--cli-input-json选项。

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets "Key=InstanceIds,Values=instance-id" \ --cli-input-json file://installCodeDeployAgent.json
Windows
aws ssm send-command ^ --document-name "AWS-RunShellScript" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --cli-input-json file://installCodeDeployAgent.json

引用的installCodeDeployAgent.json文件显示在以下示例中。

{ "Parameters": { "commands": [ "#!/bin/bash", "yum -y update", "yum install -y ruby", "cd /home/ec2-user", "curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install", "chmod +x ./install", "./install auto" ] } }