繁体   English   中英

在AWS Elastic Beanstalk上部署Windows服务和Web应用程序

[英]Deploying windows service and web app on AWS Elastic Beanstalk

我们希望将ASP.NET MVC Web应用程序和Windows服务部署到弹性beanstalk。 我们使用awsdeploy.exe来处理Web应用程序的部署。 该服务和Web应用程序共享配置和库。 为了部署服务,我的计划是:

  1. 在Web部署包\\ bin目录中包含windows service exe,并将服务和Web应用程序一起部署
  2. 使用.ebextensions文件来安装该服务

但是,这似乎不起作用,因为.ebextensions操作在安装webdeploy包之前执行,因此无法安装服务exe。

看来我的选择是:

S3

压缩服务exe并将其发布到S3,以便在部署Web应用程序时可以通过.ebextensions安装它。

这并不理想,因为服务和Web应用程序共享依赖关系+配置。 该服务需要安装一组独立的依赖项和配置,因为它需要在Web应用程序更新之前启动并运行。

部署后脚本

使用不支持的部署后脚本技术 ,我需要将其转换为Windows世界。

Windows目录= C:\\ Program Files \\ Amazon \\ ElasticBeanstalk \\ hooks \\ appdeploy \\ post那里有一个.ps1脚本文件。 (支持.cmd吗?)

使用Web Deploy Package作为.ebextensions zip源

我们可以使用webdeploy软件包@“C:\\ cfn \\ ebdata \\ source_bundle.zip”作为源代码,解压缩并从那里安装服务。 问题是zip中的内部路径取决于用户的机器如何构建它的设置,因此在解压缩的文件结构中找到exe会很棘手。 示例path =“Content \\ C_C \\ gitdeploy \\ blah \\ blahSolution \\ blahProject \\ _ obj \\ awsTestDebug \\ Package \\ PackageTmp \\ bin \\ myservice.exe”

有关采取哪种方法的任何建议?

编辑

根据Jim的建议,我使用了container_commands,它运行良好。 我的.ebextensions / install.config看起来像这样..

...
container_commands:
  installTaskRunner:
    command: C:\\inetpub\\wwwroot\\App_Data\\installTaskRunner.cmd >> C:\\inetpub\\wwwroot\\App_Data\\installTaskRunner.log
commands:
  stop_service:
    command: net stop MyService
    ignoreErrors: true
...

批处理文件看起来像这样......

pushd C:\inetpub\wwwroot\bin
C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil  MyService.exe
net start MyService
popd

编辑#2

添加了instal.config的其他命令,以便在应用webdeploy软件包之前停止服务,因为service.exe会锁定某些部署文件。

关于后部署脚本,其中一个文件夹中包含.ps1,.bat或.exe的文件将在该阶段运行。 如果您需要对实例上发生的事情进行精细控制,则可以使用此方法。

还有第三种选择,即使用container_commands:而不是commands:

container_commands:将在部署应用程序后运行。

可以在Elastic Beanstalk开发人员指南中找到相关文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM