在使用bash脚本停止其中一个aws ec2之前禁用服务



我需要停止启动多个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

我的问题是:

  1. 如何停止/启动多个ec2。

  2. 我如何获取一个特定的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

相关内容

最新更新