一千萬個為什麽

搜索

如何通過AWS CLI在EC2實例上運行腳本或命令?



根據新的EC2 Run命令新聞文章中,AWS CLI應該支持一個新的子命令來在遠程EC2實例上執行腳本。

不過,我已經檢入了 aws ec2 help ,但是我找不到相關的命令。

我已經通過 apt-get 安裝了 aws

$ aws --version
aws-cli/1.14.32 Python/3.5.4 Linux/4.12.7-64 botocore/1.8.36

在遠程EC2實例中,我應該查找哪個子命令以及要運行的語法,比如 ipconfigPowerShell 中?

轉載註明原文: 如何通過AWS CLI在EC2實例上運行腳本或命令?

一共有 2 個回答:

從AWS Systems Manager運行命令運行ipconfig:

$ aws ssm send-command --document-name "AWS-RunPowerShellScript" --instance-ids "" --parameters commands=ipconfig

註:如果您有錯誤,請考慮指定正確的 - region

這假定您已正確配置您的AWS憑證和CLI。請參閱使用AWS CLI的Systems Manager Run Command演練獲取更多信息。


以下是發送和獲取命令輸出的實際shell命令示例:

cmdid=$(aws ssm send-command --instance-ids "i-ch3ng3th1s" --document-name "AWS-RunPowerShellScript" --parameters commands=ipconfig --query "Command.CommandId" --output text)
aws ssm list-command-invocations --command-id "$cmdid" --details --query "CommandInvocations[*].CommandPlugins[*].Output[]" --output text

這是一個幫助Bash腳本,它使用 aws ssm send-command 來運行命令:

#/usr/bin/env bash -x
# Script to run PowerShell script on the Windows instance.
instanceId="$1"
cmdId=$(aws ssm send-command --instance-ids "$instanceId" --document-name "AWS-RunPowerShellScript" --query "Command.CommandId" --output text --parameters commands="'${@:2}'")
[ $? -ne 0 ] && { echo "用法: $0 instance_id command"; exit 1; }
while [ "$(aws ssm list-command-invocations --command-id "$cmdId" --query "CommandInvocations[].Status" --output text)" == "InProgress" ]; do sleep 1; done
aws ssm list-command-invocations --command-id "$cmdId" --details --query "CommandInvocations[*].CommandPlugins[*].Output[]" --output text

用法:

 ./run_ec2_ps_cmd.sh instance-id command

例:

$ ./run_ec2_ps_cmd.sh i-xyz hostname
ip-xyz

要執行更大的輸出,請參閱:如何避免在運行AWS SSM命令時截斷輸出? SUP>