我正在尝试使用 AWS-cli 工具将 .NET 应用程序部署到 ElasticBeanstalk。
首先上传然后使用以下方法创建版本:
aws elasticbeanstalk create-application-version
--application-name "MyApp - DEV"
--version-label "0.1.165"
--source-bundle S3Bucket="xxx",S3Key="MyApp.0.1.165.zip"
--process
这有效,因此下一步:
aws elasticbeanstalk update-environment
--environment-name "myapp-dev-env"
--version-label "0.1.165"
--application-name "MyApp - DEV"
有时它会以代码 255 退出并输出:
调用 UpdateEnvironment 操作时发生客户端错误 (InvalidParameterValue):应用程序版本不可用,无法与环境一起使用
令人沮丧的是,这些确切的步骤(由我的持续集成服务器运行)有时会起作用,如果我使用 AWS 控制台部署此版本,它也会起作用。我上传的 zip 看起来没有任何不同,事实上,如果我从相同的源修订版重建(使用之前成功部署的构建,为其提供新的版本号),它似乎(通常)会遇到这个问题。
我找不到关于此错误含义的任何详细信息,所以我还可以在哪里查找以弄清楚发生了什么?
答案1
该问题是由于未能等待新版本“处理”而引起的。
命令create-application-version
返回:
[Exec] {
[Exec] "ApplicationVersion": {
[Exec] "ApplicationName": "MyApp - DEV",
[Exec] "Status": "PROCESSING",
[Exec] "VersionLabel": "0.1.165",
[Exec] "DateCreated": "2016-04-19T19:27:35.948Z",
[Exec] "DateUpdated": "2016-04-19T19:27:35.948Z",
[Exec] "SourceBundle": {
[Exec] "S3Bucket": "xxx",
[Exec] "S3Key": "MyApp.0.1.165.zip"
[Exec] }
[Exec] }
[Exec] }
我延迟了 3 秒,然后跑describe-application-versions
了起来
[Exec] "Status": "PROCESSED",
(有趣的是,DateUpdated
没有改变)
此后,该update-environment
命令运行良好,并且我已经部署了多个版本而没有问题。
正确的解决方法是继续运行describe-application-versions
直到状态!=“正在处理”,然后处理所有失败情况(“正在处理”或“已处理”以外的状态,或永远保持为“正在处理”)。
就我而言,我从 msbuild 调用此命令(循环和等待非常困难),因此我对任意延迟的解决方法感到满意,update-environment
如果出现问题,则允许命令失败。因为生产直到 才会受到影响update-environment
,并且部署(导致该命令)的实际时间并不重要,所以我不需要付出那么多努力。