1

我正在为运行 Web 应用程序的 EC2 服务器设置补丁程序。

我需要构建一个安装系统更新的自动化流程,但如果 Web 应用程序未通过状态检查,则会恢复到最后一个正常工作的 ec2 实例。

我一直在尝试使用 EC2 Systems Manager 中的自动化文档来执行此操作,该文档执行以下步骤:

  1. 停止 EC2 实例
  2. 从实例创建 AMI
  3. 从新创建的 AMI 启动新实例
  4. 运行更新
  5. 在 Web 应用程序上运行状态检查
  6. 如果检查失败,停止新实例并重新启动原始实例

自动化文档成功运行前 5 步,但我无法确定如何触发第 6 步?我可以在自动化文档中执行此操作吗?我可以从第 5 步调用什么输出?如果它使用 aws:runCommand,runCommand 应该触发一个新的自动化文档还是另一个 AWS 工具?

4

1 回答 1

0

我尝试了以下方法来解决这个问题,这或多或少是有效的:

  • 在自动化文档中包含 aws:runCommand 操作
  • 这使用以下参数运行 DocumentName“AWS-RunShellScript”:

从 s3 下载脚本:

sudo aws s3 cp s3://path/to/s3/script.sh /tmp/script.sh

将文件设置为可执行文件:

chmod +x /tmp/script.sh

使用自动化文档中设置或生成的变量执行脚本

bash /tmp/script.sh -o {{VAR1}} -n {{VAR2}} -i {{VAR3}} -l {{VAR4}} -w {{VAR5}}

该脚本包含以下 getopts 命令来设置输入的变量:

while getopts o:n:i:l:w: option
do
case "${option}"
in
n) VAR1=${OPTARG};;

o) VAR2=${OPTARG};;

i) VAR3=${OPTARG};;

l) VAR4=${OPTARG};;

w) VAR5=${OPTARG};;

esac

done

bash 脚本使用变量运行状态检查,如果失败则回滚到上一个工作实例。

于 2017-11-10T17:25:52.173 回答