我需要停止启动多个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实例并运行命令来检查实例启动后启用的服务
我可能需要运行if
条件来将id或标记名称与所需的EC2实例进行比较,然后运行shell命令?
我知道其中的逻辑,但请帮我了解剧本的细节。
您可以通过指定多个实例的ID:来启动/停止多个实例
aws ec2 start-instances --instance-ids i-1a1234 i-1a1235 i-1a1236
如果您想每次启动时都在实例上运行脚本,您可以将脚本放入:
/var/lib/cloud/scripts/per-boot/
这将使用cloud-init
自动运行脚本,然后脚本可以执行任何您想要的检查/处理。
当实例上的程序完成处理时,它可以使用停止自己的实例
sudo shutdown now -h
有关更多详细信息,请参阅:当EC2实例完成任务时自动停止-DEV Community
或者,您可以使用AWS Systems Manager Run命令在实例上运行脚本。这是在已经运行的实例上运行作业的好方法。该命令甚至可以在多个实例上同时执行。