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

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 上部署 Windows 服务和 Web 应用程序【英文标题】:Deploying windows service and web app on AWS Elastic Beanstalk 【发布时间】:2014-01-06 00:39:24 【问题描述】:

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

    在web部署包\bin目录下包含windows服务exe,将服务和web应用一起部署 使用 .ebextensions 文件安装服务

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

看来我的选择是:

S3

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

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

部署后脚本

使用不受支持的post deployment script technique,我需要将其转换为 Windows 世界。

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

将 Web 部署包用作 .ebextensions zip 源

我们可以使用 webdeploy 包 @"C:\cfn\ebdata\source_bundle.zip" 作为源,解压缩并从那里安装服务。问题是 zip 中的内部路径取决于用户机器的构建方式,因此在解压缩文件结构中查找 exe 会很棘手。示例路径 = "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】:

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

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

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

这方面的文档可以在Elastic Beanstalk Developer Guide 中找到。

【讨论】:

根据文档,container_commands “在设置应用程序和 Web 服务器并提取应用程序版本文件之后,但在部署应用程序版本之前运行。”我也在为事情的时间安排而苦苦挣扎,部署后脚本方法是唯一一种看起来可行的方法。

以上是关于在 AWS Elastic Beanstalk 上部署 Windows 服务和 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上扩展 Magento

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

在 AWS Elastic Beanstalk 上运行节点和反应

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

在aws elastic beanstalk上上传文件?