我最近也遇到了类似的问题。我想安装一个包含多个子包和runCommand的包装MSDeploy包。
我发现,除非传递给CloudFormation的MSDeploy包本身是iisApp包,否则AWSDeploy会失败。经过调查,发现这是因为AWSDeploy使用-setParam:“IIS Web Application Name”=“在配置中设置的值”来执行MSDeploy脚本,这就是为什么它失败的原因。
为了避免此错误并成功地使用AWSDeploy和CloudFormation安装非网站应用程序,您只需要将参数文件打包到MSDeploy包中,该文件包含此参数。
下面是一个示例文件。
<parameters>
<parameter name="IIS Web Application Name" defaultValue="Default Web Site/" tags="isIisApp" />
</parameters>
您可以使用以下方式创建带有清单或contentPath的MSDeploy包,并传递文件。
msdeploy -verb:sync -source:contentPath=C:\ConsoleApp\ -dest:package=deploy.zip -declareParamFile=parameters.xml
如果您不需要运行站点,请务必禁用实例的健康监控,然后就可以成功地将其与CloudFormation模板一起使用了。
是的,您可以使用CloudFormation来创建任何类型的应用程序。您可以基于任何AMI创建实例,并且(如果使用Linux实例,请使用cloud-init在启动时安装和运行软件)。
创建自己的预安装软件的AMI并使用CloudFormation启动基于该AMI的实例也很容易。
CloudFormation没有特定于Web应用程序的功能;它只是一种描述一组AWS资源的方式。
为什么不使用Windows Server EC2实例?CloudFormation只是一种管理云资源的方式,但您仍然在使用EC2实例(这是可用资源之一)。
在单个实例中,您可以部署控制台应用程序和Windows服务。
更新:您可以使用此文章中的信息从当前帐户中的资源生成CloudFormation模板。这样,您可以手动设置它,然后生成模板。
希望这有所帮助。