但是我已经检查了
aws ec2 help
,但是我找不到相关的命令。我已经通过
aws
安装了apt-get
:$ aws --version
aws-cli/1.14.32 Python/3.5.4 Linux/4.12.7-64 botocore/1.8.36
我应该查找哪个子命令以及要运行的语法是什么,假设在远程EC2实例上的PowerShell中使用
ipconfig
?#1 楼
要从AWS Systems Manager运行命令运行ipconfig,请执行以下操作:$ aws ssm send-command --document-name "AWS-RunPowerShellScript" --instance-ids "<your instance id>" --parameters commands=ipconfig
注意:如果出现错误,请考虑指定正确的
--region
。这假设您已正确配置了AWS凭证和CLI。有关更多信息,请参阅《 Systems Manager使用AWS CLI运行命令演练》。
此处是发送和获取命令输出的实用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
评论
您是否也可以同时将文件复制到实例?
– red888
20年6月20日在22:10
#2 楼
这是一个使用aws ssm send-command
运行命令的辅助Bash脚本:#/usr/bin/env bash -x
# Script to run PowerShell script on the Windows instance.
instanceId=""
cmdId=$(aws ssm send-command --instance-ids "$instanceId" --document-name "AWS-RunPowerShellScript" --query "Command.CommandId" --output text --parameters commands="'${@:2}'")
[ $? -ne 0 ] && { echo "Usage: ./run_ec2_ps_cmd.sh instance-id command
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 i-xyz hostname
ip-xyz
示例:
q4312078q
要执行更大的输出,请参阅:如何避免在运行AWS SSM命令时将输出截断?
评论
实际上是最好的例子。请更多投票。
– Sanctus
20-2-18在18:02
#3 楼
是的,您可以使用AWS系统管理器执行此操作。 AWS Systems Manager Run Command允许您在EC2以及本地服务器上远程安全地运行命令集。以下是实现此目的的高级步骤。附加实例IAM角色:
ec2实例必须具有IAM角色,并具有策略AmazonSSMFullAccess。此角色使实例能够与Systems Manager API进行通信。
安装SSM代理:
EC2实例上必须安装了SSM代理。 SSM代理处理运行命令并根据命令配置实例。
执行命令:
通过AWS CLI的示例用法:
执行以下命令以执行以下操作:检索实例上运行的服务。将实例ID替换为ec2实例ID。
aws ssm send-command --document-name "AWS-RunShellScript" --comment "listing services" --instance-ids "Instance-ID" --parameters commands="service --status-all" --region us-west-2 --output text
更多详细信息:此处
#4 楼
这是我使用AWS SSM Send-Command做的非常酷的事情!使用Apache Airflow,我使用CloudFormation Template(简称CFT)创建了一个全新的EC2-Instance,这只是一个JSON文件,我想要的EC2-Instance的所有配置值;还请注意,在此CFT中,我还具有一个bootstrap命令,该命令将Python脚本从S3位置复制到新的EC2-Instance,以便以后可以使用SSM Send-Command执行该脚本!我使用Python3和称为Boto3库的适用于Python3的AWS开发工具包进行此操作。这是用于创建新CFT堆栈的命令的一部分,该命令又创建了我的新EC2-Instance:
import boto3
cft = boto3.client("cloudformation", "us-east-1")
response = cft.create_stack(
StackName='foobarStackName',
TemplateBody=json.dumps(json_data))
然后我可以获取新EC2的Instance-ID -Instance(需要使用SSM Send-Command),方法如下:
response = cft.describe_stacks(
StackName='foobarStackName',
)
然后我可以获取当前Airflow Worker服务器EC2-Instance的Instance-ID通过Python运行以下命令
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
:output = subprocess.Popen(['wget', '-q', '-O', '-', 'http://169.254.169.254/latest/meta-data/instance-id'],
stdout=subprocess.PIPE)
# Do some weird stuff to get the value (I'm a Java developer so excuse my bad Python skilz)
instanceId = output.communicate()
instanceId = str(instanceId).split("'")[1]
现在!!!!然后,对于大笔交易,我可以在我创建的新EC2-Instance上执行脚本,并将该脚本发送给我想要的任何参数/参数...包括发送该ID的服务器的Instance-ID。 SSM Send-Command,这样,当我的脚本在新的EC2-Instance上运行完毕时,它可以将另一个SSM Send-Command发送回我的Airflow服务器,以告知脚本已完成。这是一个非常高的水平,没有细节,但这只是演示一个想法:)
subprocess.run(shlex.split('sudo aws ssm send-command --document-name "AWS-RunShellScript" --parameters commands=["sudo python3 /home/ec2-user/ec2_file_sensor.py ' + filepath + ' ' + batchIdValue + ' ' + source + ' ' + fileType + ' ' + airflowWorkerInstanceId + '"] --instance-ids ' + ec2ResourceInstanceId + ' --region us-east-1'))
不知道这是否对任何人都有帮助,但这是一个很有趣的有趣例子AWS SSM Send-Command有什么用!尽管可能是代码气味xD
#5 楼
如果您需要执行多个命令(例如正在调查问题),则可以启动会话:aws ssm start-session --target i-0123456789abcdef0
您将需要安装会话管理器插件。
评论
仅供参考,该文章来自2015年,因此我不会将其称为“新”子命令。我签出了aws-cli的源代码存储库(github.com/aws/aws-cli),但在文档,示例,发行说明中或通过简短地查看代码都找不到任何提及。我提出了一个问题(github.com/aws/aws-cli/issues/3126),当我收到反馈时将提交答案。