AWS/EB 上不可变部署的限制

Posted

技术标签:

【中文标题】AWS/EB 上不可变部署的限制【英文标题】:Limitations of Immutable Deployments on AWS/EB 【发布时间】:2018-06-15 02:00:50 【问题描述】:

我正在尝试了解 AWS/Elastic Beanstalk 上不可变部署的缺点。文档是这样说的:

您无法根据资源配置更改执行不可变更新。例如,您不能在更新其他设置的同时更改需要替换实例的设置,或者使用更改配置设置或源代码中的其他资源的配置文件执行不可变部署。如果您尝试更改资源设置(例如,负载均衡器设置)并同时执行不可变更新,Elastic Beanstalk 将返回错误。

(来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environmentmgmt-updates-immutable.html

但是,我无法想出一个会失败的实际场景。我对所有配置都使用 CloudFormation 模板。以上是否可以解释为我不能同时部署 CloudFormation 更改以及对应用程序 (.jar) 的更改?

非常感谢您的澄清。

【问题讨论】:

【参考方案1】:

对此持保留态度,因为这只是基于阅读文档的猜测;我认为基本支持是每月 40 美元,这是一个很好的问题,可以让他们确定。

以上是否可以解释为我不能同时部署 CloudFormation 更改以及对应用程序 (.jar) 的更改

我假设您使用与 CloudFormation 模板不同的流程部署应用程序 .jar。这意味着当您部署不使用 CloudFormation 的源代码时,您可能会使用 CI/CD 工具,例如代号。当您对 CloudFormation 模板进行更改时,您可以登录 AWS 控制台并在那里更新模板(或使用 AWS CLI 工具)。

我认为,同时更改两者会符合他们在这里所说的内容。不要出于明显的原因这样做;您不希望 CloudFormation 在 EB 关闭该实例并启动一个新实例的同时尝试对 ec2 实例进行更改。但一个更常见的例子是我想如果你碰巧使用.ebextensions 进行一些配置设置。

.ebextensions 是一种在 EB 中配置 CloudFormation 无法真正做到或轻松做到的事情的方法。它们是与源代码一起部署在项目根目录下名为 /.ebextensions 的文件夹中的配置文件。一个例子是更改一些特定的 linux 设置https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

您不希望同时更改您的应用程序代码和.ebextension。这只是我在阅读文档时的猜测,您可以很容易地对此进行测试。

【讨论】:

以上是关于AWS/EB 上不可变部署的限制的主要内容,如果未能解决你的问题,请参考以下文章

AWS EB 部署节点应用程序:无法运行 npm install

AWS EB 部署问题

Django 部署到 AWS EB 显示 500 内部服务器错误

Elastic Beanstalk:环境创建持续时间与不可变部署

AWS EB Deploy 在部署后显示缺少 Dockerrun.aws.json

不可变基础设施