【问题标题】:Start and stop EC2 and then enable/check services on instance using bash启动和停止 EC2,然后使用 bash 启用/检查实例上的服务
【发布时间】:2023-03-19 02:52:02
【问题描述】:

我需要停止启动多个 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 实例并运行命令来检查实例启动后启用的服务?

我可能需要运行if 条件以将id 或标签名称与所需的EC2 实例进行比较,然后运行shell 命令?

我知道逻辑,但请帮助我了解脚本细节。

【问题讨论】:

    标签: linux bash amazon-web-services amazon-ec2 cron


    【解决方案1】:

    您可以通过指定它们的 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
    

    更多详情请见:Auto-Stop EC2 instances when they finish a task - DEV Community

    或者,您可以使用AWS Systems Manager Run Command 在实例上运行脚本。这是在已经运行的实例上运行作业的好方法。该命令甚至可以同时在多个实例上执行。

    【讨论】:

    • 感谢约翰回答我的第一个问题,我可能没有解释我的问题。所以我有 5 个 ec2 ,其中一个我需要在停止 oracle 之前优雅地停止它,当我手动停止它时,我通常 ssh 到它并运行:“su - grid”(它是 oracle 用户)然后我运行“crsctl stop has"(停止oracle)所以我需要从oracle ec2上的脚本运行这些命令我正在设法从crontab运行脚本并且不能使用ssm。
    • 那么您的实际问题是什么?如果您想停止 Oracle 然后停止实例,那么 same script 可以同时执行这两种操作 -- 首先使用crsctl stop has,然后使用sudo shutdown now -h。 (您可能在使用su 的用户之间跳转单个脚本时遇到问题——这需要一些测试来确认。)
    猜你喜欢
    • 2019-08-03
    • 2022-12-13
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多