【问题标题】:AWS ElasticBeanstalk with custom AMI带有自定义 AMI 的 AWS ElasticBeanstalk
【发布时间】:2021-07-18 22:13:25
【问题描述】:

我对在 AWS EB 中使用自定义 AMI 有以下疑问。

现在我有:

  1. 一个默认平台,Python 3.6 + Amazon Linux 1.10.0,在 EB 配置 > 实例 > AMI 我得到一个我认为是 AWS 提供的用于启动平台的默认 AMI 的 ID(如果是这样的话它应该在每次平台更新时进行修改)。
  2. 使用 .ebextensions 文件完成的一些平台配置
  3. 我从 CLI 部署的 Flask 应用程序 (eb deploy)

因此,为了避免 .ebextensions 配置时间,我想使用包含 (1) + (2) 的自定义 AMI,并像以前一样继续部署我的 Flask 应用程序。

所以要构建 AMI:

  • 我是否可以停止我正在运行的环境的 EC2 实例并从 EC2 控制台从该实例创建一个 AMI?如果我这样做,那么 AMI 甚至会包含我的 .ebextensions 文件和我的应用程序,这是一个问题吗?
  • 如果 AMI 不应该包含 .ebextensions 文件,那么在执行 AMI 之前自定义平台的唯一方法是使用 SSH?
  • 在构建 AMI 后,我将其 ID 放入 EB 控制台 > 配置 > 实例中,然后 EB 会处理所有事情,例如在 EC2 > 自动缩放 > 启动选项中更新 AMI ID?
  • 要进行平台更​​新,我必须首先从新平台开始手动重建 AMI,然后在 EB 配置中更新 AMI ID?所以不可能像以前那样从 EB 控制台更新平台,然后保存新的 AMI?
  • 当我部署我的应用时,它不应该包含 .ebextensions 文件吗?
  • 如果我创建包含我的应用程序的 AMI,那么 EB 自动缩放甚至会节省部署应用程序的时间吗? (当然,在这种情况下,要进行部署,我必须先创建一个新的 AMI)。

感谢您的帮助。

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    您可以通过控制台和 CLI 从正在运行的 EC2 实例创建自定义 AMI。您创建的任何 AMI 都是实例的忠实副本,因此如果实例具有 ebextensions,那么 AMI 也会这样做。

    我想我了解您想从由 ElasticBeanstalk 管理的实例创建 AMI?如果是这样,那么 ElasticBeanstalk EC2 实例上需要存在某些文件,以便 ElasticBeanstalk 和 Cloudformation 可以管理环境。 .ebextensions 是用于配置环境的脚本,至少根据我的经验,在您的存储库中维护。如果您的 AMI 有 .ebextensions,那么很可能需要它们。

    我认为在 ElasticBeanstalk 下使用自定义 AMI 并不常见:重点是让 AWS 为您管理该层。我建议如果你真的需要一个自定义 AMI,你可以直接在 EC2 中做你想做的事情并放弃 ElasticBeanstalk。 ElasticBeanstalk 实际上只是 EC2 和其他服务(例如,自动缩放和负载均衡器实际上是 EC2)的抽象“友好”接口。甚至可以考虑将您的应用程序放入 docker 中?

    【讨论】:

      【解决方案2】:

      我可以停止我正在运行的环境的 EC2 实例并从 EC2 控制台从该实例创建一个 AMI 吗?如果我这样做了,那么 AMI 甚至会包含我的 .ebextensions 文件和我的应用程序,这是一个问题吗?

      您不必阻止它。您可以从正在运行的实例制作 AMI。您的实例也在 ASG 中,因此停止它不是一个好主意。

      如果 AMI 不应该包含 .ebextensions 文件,那么在执行 AMI 之前自定义平台的唯一方法是使用 SSH?

      如果您在 ami 上已有应用程序,则无关紧要。无论如何,新部署都会安装您的应用。

      在构建 AMI 后,我将其 ID 放入 EB 控制台 > 配置 > 实例,然后 EB 会处理所有事情,例如在 EC2 > 自动缩放 > 启动选项中更新 AMI ID?

      是的,

      要进行平台更​​新,我必须首先从新平台开始手动重建 AMI,然后在 EB 配置中更新 AMI ID?所以不可能像以前那样从 EB 控制台更新平台,然后保存新的 AMI?

      可能,必须重复这个过程。

      当我部署我的应用时,它不应该包含 .ebextensions 文件吗?

      这取决于他们做什么。如果他们安装了自定义 ami 上已有的软件,您可以将其删除。

      如果我创建包含我的应用程序的 AMI,那么 EB 自动缩放甚至会节省部署应用程序的时间吗? (当然,在这种情况下,要进行部署,我必须先创建一个新的 AMI)。

      自定义 ami 的目的是节省安装和配置通常不在 AWS amis 上的自定义软件的时间。它不会取代或消除部署您的 APP 的需要。您仍然需要这样做,但可以跳过安装自定义包。

      【讨论】:

      • 感谢您的回答。我想问您有关删除 .ebextensions 的问题,因为它们会在 AMI 中进行尚未完成的配置。在保存 AMI 之前如何消除它们?也许通过再次部署我的应用程序而不使用 .ebextensions 或使用 SSH?
      • @MarcoEvasi 您可以将它们从应用 zip 中删除并重新部署您的应用。
      • @MarcoEvasi 进展如何?您是否设法创建了 AMI?
      • 您问得真好,但不,我仍计划进行此更改,但我还没有这样做,因为我不确定如何定期更新 EB 平台.
      【解决方案3】:

      您可以创建为 Elastic beanstalk 运行的 EC2 实例的自定义 AMI。如果您要使用自定义 AMI,则无需使用 .ebextension 文件,因为任一 AMI 都应包括在部署应用程序时已经完成的所有更改以及 ebextension 文件,或者在创建 AMI 之前在服务器中进行必要的更改。但是最好使用 AWS 在创建 Elastic Beanstalk 时提供的默认 AMI,并使用 .ebextension 文件在部署期间执行所需的任务。

      【讨论】:

      • 如果我从当前的生产 EB EC2 保存一个 AMI,那么它包含 .ebextensions 文件,因为这是平台配置的方式。但是如果是这样,那么当 EB 从 AMI 启动一个新实例时,由于该 AMI 包含 .ebextensions ,那么即使它尚未配置,EB 也会再次开始配置新实例?如果我选择使用不包含 .ebextensions 的 AMI,我该如何构建它?也许从默认平台开始,首先部署一个带有 .ebextensions 的应用程序,然后在保存 AMI 之前再次部署一个不包含 .ebextensions 的应用程序?
      • 我可以知道使用 ebextensions 文件您正在执行的所有任务是什么吗?
      • 在 .ebextensions 文件中,我进行平台配置,例如安装 apache mod24_ssl、设置 EB 静态路径、编辑 apache .conf、设置 EB HealthCheckPath、设置时区等。
      • 您可以这样做: 1. 在后端创建 Elastic Beanstalk 并登录到服务器,然后从 .extension 文件中进行更改。 2. 使用更改进行 AMI 备份 3. 在 Elastic Beanstalk 控制台中更新 AMI ID 并部署应用程序 4. 因为每次 Elastic Beanstalk 获取包含您的更改且不需要 eb-extension 文件的 AMI 时,您都更新了 AMI ID在部署期间。但建议使用默认 AMI 并使用 eb 扩展文件进行更改
      猜你喜欢
      • 2012-09-30
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多