Amazon ec2 在cloud init运行userdata脚本之后,我如何让东西(例如tomcat)运行?

Amazon ec2 在cloud init运行userdata脚本之后,我如何让东西(例如tomcat)运行?,amazon-ec2,user-data,cloud-init,Amazon Ec2,User Data,Cloud Init,简短版本: 在cloud init在EC2上运行了userdata脚本之后,如何使init.d脚本运行 长版本: 我们的部署过程是使用安装在AMI上的所有设备(tomcat、nginx、应用程序等)构建AMI,但遗漏了某些配置值。在启动时,userdata脚本添加缺少的配置值,然后应用程序堆栈可以启动 我们当前的ec2基于官方Debian AMIs的旧版本,该版本的脚本ec2运行用户数据。此脚本在引导时运行,下载并运行EC2s用户数据。在构建AMI时,我只需编辑tomcat、nginx等的ini

简短版本:

在cloud init在EC2上运行了
userdata
脚本之后,如何使init.d脚本运行

长版本:

我们的部署过程是使用安装在AMI上的所有设备(tomcat、nginx、应用程序等)构建AMI,但遗漏了某些配置值。在启动时,userdata脚本添加缺少的配置值,然后应用程序堆栈可以启动

我们当前的ec2基于官方Debian AMIs的旧版本,该版本的脚本
ec2运行用户数据
。此脚本在引导时运行,下载并运行EC2s用户数据。在构建AMI时,我只需编辑tomcat、nginx等的init.d脚本,将ec2运行用户数据包含在其“Required Start:”行中,以便在运行用户数据之后启动

不幸的是,这种方法不再可行,因为我们希望开始使用基于hvm的AMI,它安装了cloud init,而不是ec2运行用户数据。但我无法弄清楚cloud init是如何工作的,如何让流程正常工作

据我所知,userdata脚本由cloudfinal步骤运行,但cloudfinal的“Required Start:”行中有$all。我可以移除它,但我不知道会有什么后果

我试着让tomcat etc在cloud init或cloud config之后运行,但用户数据到那时还没有运行。此外,看起来cloud init和cloud config启动进程随后退出,这可能解释了为什么cloud final需要在所需的启动中包含$all

更多信息:

  • 我们使用“baked AMI”方法,即创建一个安装了所有包/应用程序的AMI,然后告诉现有的自动缩放组使用基于新AMI的新EC2(通过CloudFormation)替换它们的EC2。某些配置信息在烘焙时未知,但必须通过userdata脚本插入
  • 当我们的tomcat应用程序启动时,它希望读取文件/etc/appname/application.conf。该文件中有文本
    。如果Tomcat在更换
    之前尝试运行,它将无法启动
  • userdata脚本类似于:
    #/bin/bash
    塞德-我是!!{要使用的新值,在部署时确定}!'/etc/appname/application.conf
  • tomcat所需的默认启动是“$local\u fs$remote\u fs$network”。在烘焙时,我将其更改为“$local\u fs$remote\u fs$network ec2 run user data”

  • 通过这样做,在tomcat运行之前,/etc/appname/application.conf中的文本将被替换。但正如我上面所说的,我想改为使用cloud init,我不知道在cloud init运行userdata之后,我需要做什么才能让tomcat启动。我得到的印象是cloud init直到进程的很晚才运行userdata。我可以在最后将userdata脚本更改为包含“/etc/init.d/tomcat restart”,但让tomcat无法启动然后重新启动似乎有点愚蠢。

    我建议提供一些示例代码来向我们展示您所说的内容,例如userdata文件,
    ec2运行用户数据
    第二,如果您需要让tomcat自动运行,安装tomcat时,您应该在/etc/init.d和rc3.d下设置自动启动脚本,这样您就不必手动编辑userdata中的某些内容。@SamBarham我面临着一个几乎相同的问题-您有解决方案吗?我们有,但我对细节有点模糊。我认为解决方案的一部分是将bash脚本放入/var/lib/cloud/scripts/per-one和/var/lib/cloud/scripts/per-boot中,但我认为它也设法以某种方式重写了一些内容,因此我们不需要在配置文件中进行任何文本替换。