通过 Run Command 命令使用参数 - AWS Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

通过 Run Command 命令使用参数

您可以在 Run Command 中使用参数。有关更多信息,请参阅使用 Systems ManagerRun Command 运行命令

运行字符串参数(控制台)

以下过程将指导您完成运行使用 String 参数的命令的过程。

使用 Parameter Store 运行 String 参数

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航窗格中,选择Run Command

    -或者-

    如果 AWS Systems Manager 主页首先打开,请选择菜单图标 ( ) 以打开导航窗格,然后选择 Run Command

  3. 选择运行命令

  4. Command document 列表中,选择 AWS-RunPowerShellScript (Windows) 或 AWS-RunShellScript (Linux)。

  5. 对于 Command parameters (命令参数),输入 echo {{ssm:parameter-name}}。 例如:echo {{ssm:/Test/helloWorld}}

  6. Targets (目标) 部分中,指定标签、手动选择实例或者指定资源组以确定要在其中运行该操作的实例。

    注意

    如果没有列出您想看到的 Amazon EC2 实例,请参阅排查 Amazon EC2 托管实例可用性的问题以了解故障排除技巧。

  7. 对于其他参数

    • 对于注释,请输入有关此命令的信息。

    • 对于超时 (秒),请指定在整个命令执行失败之前系统等待的秒数。

  8. 对于 Rate control (速率控制)

    • 对于并发,请指定要同时运行该命令的实例数或百分比。

      注意

      如果通过指定应用于托管实例的标记或通过指定 AWS 资源组选择了目标,并且您不确定针对的是多少实例,则可以通过指定百分比来限制可同时运行此文档的实例的数量。

    • 对于错误阈值,请指定在一定数量或百分比的实例上失败后何时在其他实例上停止运行该命令。例如,如果您指定三个错误,Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理命令的实例也可能发送错误。

  9. (可选)对于 Output options (输出选项),要将命令输出保存到文件,请选中 Write command output to an S3 bucket (将命令输出写入 S3 存储桶) 框。在框中输入存储桶和前缀(文件夹)名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限是分配给实例的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅 为 Systems Manager 创建 IAM 实例配置文件。此外,如果指定的 S3 存储桶位于不同的 AWS 账户中,请确保与该实例关联的实例配置文件具有写入该存储桶的必要权限。

  10. SNS 通知部分中,如果您希望发送有关命令执行状态的通知,请选中启用 SNS 通知复选框。

    有关为 Run Command 配置 Amazon SNS 通知的更多信息,请参阅使用 Amazon SNS 通知监控 Systems Manager 状态更改

  11. 选择 Run

  12. 命令 ID 页面上的目标和输出区域中,选择在其中运行命令的实例 ID 旁边的按钮,然后选择查看输出。验证命令输出是否是您为参数提供的值,例如 This is my first parameter

运行参数 (CLI)

以下示例命令包含一个名为 Systems Manager 的 DNS-IP 参数。 此参数的值就是实例的 IP 地址。此示例使用 AWS CLI 命令重复参数值。

Linux
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters "commands='echo {{ssm:DNS-IP}}'" \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands='echo {{ssm:DNS-IP}}'" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

下一个示例命令使用名为 SecureStringSecurePassword 的 参数。 命令 commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure'] 检索和解密 SecureString 参数的值,然后重置本地管理员密码,而无需以明文形式传递密码。

Linux
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

您还可以在 SSM 文档的 Parameters 部分引用 Systems Manager 参数,如下例所示。

{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:parameter-name}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand": "{{commands}}" } } ] }

不要将 文档的 部分中使用的runtimeConfig本地参数SSM的类似语法与 Parameter Store 参数混淆。本地参数不同于 Systems Manager 参数。您可以通过是否存在 ssm: 前缀区分本地参数和 Systems Manager 参数。

"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"
注意

SSM 文档当前不支持对 SecureString 参数的引用。这意味着,要将 SecureString 参数(例如 Run Command)与 Run Command 结合使用,您必须在将参数值传递到 之前对其进行检索,如以下示例所示。

Linux
value=$(aws ssm get-parameters --names parameter-name --with-decryption)
aws ssm send-command \ --name AWS-JoinDomain \ --parameters password=$value \ --instance-id instance-id
Windows
aws ssm send-command ^ --name AWS-JoinDomain ^ --parameters password=$value ^ --instance-id instance-id
Windows PowerShell 工具
$secure = (Get-SSMParameterValue -Names parameter-name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user-name,$secure