微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在使用 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 :i.e.:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。