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

时间:2013-12-18 01:11:16

标签: .net amazon-web-services elastic-beanstalk

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

  1. 在Web部署包\ bin目录中包含windows service exe并将服务和Web应用程序一起部署
  2. 使用.ebextensions文件安装服务
  3. 但是,这似乎有效,因为.ebextensions操作在安装webdeploy包之前执行,因此服务exe不可安装。

    似乎我的选择是:

    S3

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

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

    部署后脚本

    使用我需要翻译到Windows世界中的不受支持的post deployment script technique

    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会锁定某些部署文件。

1 个答案:

答案 0 :(得分:9)

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

还有第三个选项,即使用 container_commands: 代替 commands:

部署应用程序后将运行

container_commands:

可以在Elastic Beanstalk Developer Guide

中找到相关文档