在cloud-init运行userdata脚本后,如何运行(例如tomcat)?

时间:2014-12-17 22:02:52

标签: amazon-ec2 user-data cloud-init

简短版本:

如何在cloud-init在EC2上运行userdata脚本后运行init.d脚本?

长版:

我们的部署过程是构建AMI,其上安装了所有内容(tomcat,nginx,应用程序等),但错过了某些配置值。在引导时,userdata脚本会添加缺少的配置值,然后应用程序堆栈可以启动

我们目前的EC2基于官方Debian AMI的旧版本,其中包含脚本ec2-run-user-data。此脚本在引导时运行,并下载并运行EC2s用户数据。构建AMI时,我只需编辑tomcat,nginx等的init.d脚本,将ec2-run-user-data包含在" Required-Start:" line,所以他们在userdata运行后启动。

不幸的是,这种方法不再可行,因为我们希望开始使用hvm基础AMI,它安装了cloud-init而不是ec2-run-user-data。但我无法弄清楚cloud-init如何运作良好,以确定如何使该过程发挥作用。

据我所知,userdata脚本是由cloud-final步骤运行的,但是cloud-final有$ all in all" Required-Start:"线。我可以删除它,但我不知道可能会产生什么后果。

我已经尝试过在cloud-init或cloud-config之后运行tomcat等,但是用户数据还没有运行。此外,它看起来像cloud-init和cloud-config启动进程然后退出,这可以解释为什么cloud-final需要在Required-Start中有$ all

更多信息:

  1. 我们使用'烘焙AMI'方法,我们创建一个安装了所有软件包/应用程序的AMI,然后告诉现有的Autoscaling Groups根据新的AMI(通过CloudFormation)用新的EC2替换它们的EC2。某些配置信息在烘焙时尚未知,但必须通过userdata脚本插入。
  2. 当我们的tomcat应用程序启动时,它希望读入文件/etc/appname/application.conf。该文件中包含文本<<REPLACE_THIS>>。如果Tomcat尝试在替换<<REPLACE_TIME>>之前运行,则Tomcat将无法启动
  3. userdata脚本类似于:
    #!/bin/bash sed -i 's!<<REPLACE_TIME>>!{New value to use, determined at deploy time}!' /etc/appname/application.conf
  4. tomcat的默认Required-Start是&#34; $ local_fs $ remote_fs $ network&#34;。在烘焙时,我将其更改为&#34; $ local_fs $ remote_fs $ network ec2-run-user-data&#34;
  5. 通过这样做,/ etc /appname / application.conf中的文本在tomcat运行之前被替换。但正如我上面所说,我想改为使用cloud-init,我无法弄清楚在cloud-init运行userdata之后我需要做些什么才能让tomcat启动。我得到的印象是,cloud-init在此过程中很晚才运行用户数据。我可以更改userdata脚本以包含&#34; /etc/init.d/tomcat restart&#34;最后,但是让tomcat无法启动然后重新启动似乎有点蠢。

0 个答案:

没有答案