我需要停止启动多个ec2,并在之前和之后运行一些命令,在同一个管理服务器上使用bash,这样就不需要ssh了。我知道如何启动和停止ec2,例如:
启动实例:
#! /bin/bash
aws ec2 start-instances --instance-ids i-1a1234
停止实例:
#! /bin/bash
aws ec2 stop-instances --instance-ids i-1a1234
我想好了如何通过运行列出所有ec2 id:即:
aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[InstanceId] --output text
我的问题是:
如何停止/启动多个ec2。
我如何获取一个特定的ec2,并在停止之前运行一个命令来禁用服务,并在ec2启动后启用它。
就像:
aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[InstanceId] --output text
列出了aws上的实例。以下将显示实例的公共DNS名称
aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[PublicDnsName] --output text
如果实例在没有公共访问的情况下运行,则可以为私有IP地址列表运行以下命令:
aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[PrivateIpAddress] --output text
aws命令可以在循环中用于处理每个条目:
for var in $(aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[PrivateIpAddress] --output text)
do
ssh -i somekey.pem "ec2-user@$var" ......... # Loop through each IP address and run ssh
done
for var in $(aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[InstanceId] --output text)
do
aws ec2 stop-instances --instance-ids "$var" # Loop through each instance id and stop.
done