2013-10-21 89 views
4

我正在使用AWS基础架构开发更广泛的Web应用程序。它有两个“工人”组件,它们从SQS读取工作并将结果写入RDS数据库。其中之一是Python,我已经在单个Elastic Beanstalk实例上工作。第二个使用.NET,我目前正在研究如何部署它。对于生产而言,两者都将具有多个实例的弹性。使用Elastic Beanstalk部署.NET worker应用程序

由于这些处理组件不是Web应用程序(即它们不响应http请求),我必须明确地启动它们。对于Python示例,我使用.ebextensions文件:

container_commands: 
    02-start-command: 
    command: "nohup python scannerapp.py > foo.out 2> foo.err < /dev/null &" 
    leader_only: false 

我该如何对.NET应用程序执行相同的操作? 与上面的Python/Linux例子一样,Windows配置文件支持'命令'和'容器命令',但是它们是为启动程序(例如安装程序)设计的。 IE浏览器。直到命令退出,启动/安装才会完成。 nohup命令解决了Python的问题。我如何用.NET工作应用程序来做到这一点?或者是太难了,我应该考虑首先移植到MONO并使用其中一个Linux选项? (MONO的运行成本预计会更具成本效益,因此它已经在未来的待办事项列表中)

回答

6

您可以对.NET容器做同样的事情。您必须将您的工作人员安装为Windows服务。看看这个blog post,详细解释它。在高层次上,您将拥有包含以下内容的.ebextensions文件:

sources: 
    c:/AppSupport/MyAppJanitor: http://s3.amazonaws.com/my-app-support/MyAppJanitor.zip 
commands: 
    install-janitor: 
    command: C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil MyAppJanitor.exe 
    cwd: c:/AppSupport/MyAppJanitor 
    waitForCompletion:0 
services: 
    windows: 
    MyAppJanitor: 
     enabled: true 
     ensureRunning: true 
     commands: install-janitor 
+0

谢谢 - 是的博客文章(和第2部分)是有用的。我不是唯一一个发现AWS文档很差的人 - 至少亚马逊似乎在他们的博客中认识到 - 令人遗憾的是,Google并没有把索引编制好!关于研究Windows服务的编写(不应该需要很多更改),并且一旦我完成了一切,我将在本周晚些时候回复... – winwaed

+0

我将此标记为答案。我已经将我的项目更改为一项服务(并且可以在本地PC上正常运行)。我也将它部署到EB。我的上传文件只是.ebextensions配置信息的zip文件。实际的服务exe,config,dll和数据文件都以S3托管的zip形式传递。不过,我目前正在主处理线程的开始处发现“FileNotFound”异常。至少该服务已经开始,并且正在变得如此遥远!虽然我正在打砖墙,但我认为新问题更合适。 – winwaed

相关问题