[英]how to create IAM role for a spring boot rest api web service deployed in aws ec2 instance
[英]Deploying a server service to AWS EC2 instance: how to config ApplicationStart and ApplicationStop
我正在尝试将服务器服务部署到AWS EC2实例。 这项服务基本上是永远运行的消费者。
要在AWS上部署,似乎我需要指定以下文件:
我在编写applicationStart和applicationStop脚本时遇到麻烦。 我的程序是一个Java jar文件,我使用java -jar consumer.jar
执行了它。 因此,首先我编写了applicationStart和applicationStop,如下所示:
ApplicationStart:
java -jar consumer.jar
ApplicationStop:
exit 0
这是appspec文件的片段
hooks:
ApplicationStop:
- location: script/deploy/stop-application.sh
timeout: 30
runas: root
BeforeInstall:
- location: script/deploy/before-install.sh
timeout: 30
runas: root
AfterInstall:
- location: script/deploy/after-install.sh
timeout: 30
runas: services
ApplicationStart:
- location: script/deploy/start-application.sh
timeout: 30
runas: root
ValidateService:
- location: script/deploy/validate-application.sh
timeout: 30
runas: root
将代码部署到AWS时,我发现Java程序保持运行,并且applicationStart阶段最终超时。 我认为这可能是因为Java程序不会返回,因此applicationStart根本无法完成。 因此,我将startApplication(或脚本start-application.sh)更改为如下形式
nohup java -jar consumer.jar &
这次,startApplication阶段没有超时。 相反,它需要3分钟才能成功。 考虑到我的超时时间设置为30秒,为什么不超时呢? 部署停留在AllowTraffic
阶段,最终花费了1个小时超时。
关于在程序永远运行时如何编写applicationStart和applicationStop脚本的任何建议? 任何建议将不胜感激!
我想我终于找到答案了。 基本上,我们需要在命令末尾添加> /dev/null 2> /dev/null < /dev/null &
,以指示AWS忽略所有stderr和stdout。 这样,该过程将不会阻止部署。
请参阅以下参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.