在 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 上运行节点和反应