【问题标题】:disable service before stopping one of the aws ec2 using bash script在使用 bash 脚本停止 aws ec2 之前禁用服务
【发布时间】:2020-12-30 20:42:06
【问题描述】:

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

【问题讨论】:

  • 使用“编辑”菜单中的{} 工具将鼠标选中的文本格式化为code/data/requiredOutput/ExactErrMsgs。祝你好运。
  • 你试过aws ec2 stop-instances --instance-ids i-1a1234 i-a1235 ... 吗?如果您使用了 shell 参数 char,那么输入这种古怪的 id 似乎有问题。 (我的意思是i- 部分)。如果您想为单个服务器和/或组/集群提供快捷方式或别名,您应该包括您需要的示例。创建和管理这样的别名可能会变成一个问题。祝你好运。
  • 我的主要观点是如何在一个 ec2 上运行 bash 命令,例如,在我停止 i-12345 之前,我需要优雅地关闭 oracle(我通常这样做:1) su - grid, 2) crsctl stop has
  • 那么我如何在脚本中从上面添加命令 1 和 2。

标签: bash amazon-web-services amazon-ec2 command-line-interface


【解决方案1】:

就像:

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

【讨论】:

  • 拉曼感谢您的回复:我不需要 ssh,因为我运行脚本的系统位于同一个 vpc 上并且可以访问所有内容:我被困在我可以抓住的地方实例并运行命令:“crsctl stop has”优雅地停止oracle,然后停止实例。要启动它们,我可以运行:aws ec2 stop-instances --instance-ids i-1a1234 i-a1235 ...(所有这些)
  • 然后运行crsctl命令的循环
猜你喜欢
  • 1970-01-01
  • 2015-11-20
  • 2019-04-21
  • 2017-08-17
  • 1970-01-01
  • 2013-12-27
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多