Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在AWS Elastic Beanstalk上部署windows服务和web应用_.net_Amazon Web Services_Amazon Elastic Beanstalk - Fatal编程技术网

.net 在AWS Elastic Beanstalk上部署windows服务和web应用

.net 在AWS Elastic Beanstalk上部署windows服务和web应用,.net,amazon-web-services,amazon-elastic-beanstalk,.net,Amazon Web Services,Amazon Elastic Beanstalk,我们希望将ASP.NET MVC web应用程序和windows服务部署到elastic beanstalk。我们使用awsdeploy.exe来处理web应用程序的部署。服务和web应用程序共享配置和库。要部署服务,我的计划是: 将windows service exe包含在web部署包\bin目录中,并将服务和web应用程序一起部署 使用.ebextensions文件安装服务 但是,这似乎不起作用,因为.ebextensions操作是在安装webdeploy包之前执行的,因此无法安装服务ex

我们希望将ASP.NET MVC web应用程序和windows服务部署到elastic beanstalk。我们使用awsdeploy.exe来处理web应用程序的部署。服务和web应用程序共享配置和库。要部署服务,我的计划是:

  • 将windows service exe包含在web部署包\bin目录中,并将服务和web应用程序一起部署
  • 使用.ebextensions文件安装服务
  • 但是,这似乎不起作用,因为.ebextensions操作是在安装webdeploy包之前执行的,因此无法安装服务exe

    我的选择似乎是:

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

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

    部署后脚本 使用我需要翻译成windows世界的不受支持的代码

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

    将Web部署包用作.ebextensions zip源 我们可以使用webdeploy包@“C:\cfn\ebdata\source\u bundle.zip”作为源,解压缩它并从那里安装服务。问题是zip中的内部路径取决于用户的机器是如何构建的,因此在解压的文件结构中查找exe是很困难的。示例path=“Content\C\u C\gitdeploy\blah\blahSolution\blahProject\obj\awsTestDebug\Package\PackageTmp\bin\myservice.exe”

    对采取哪种方法有什么建议吗?

    编辑 根据Jim的建议,我使用了container_命令,效果很好。My.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\u命令:
    将在部署应用程序后运行


    相关文档可在中找到。

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