自定义 Elastic Beanstalk AMI

Posted

技术标签:

【中文标题】自定义 Elastic Beanstalk AMI【英文标题】:Customizing an Elastic Beanstalk AMI 【发布时间】:2012-08-13 16:54:37 【问题描述】:

我需要在 Elastic Beanstalk 上使用为 Glassfish 服务器编写的 Java 应用程序。 因为亚马逊不允许我选择带有 Glassfish 的 AMI,我选择了带有 Tomcat 的 AMI,并且我修改了我的应用程序以在 Tomcat 上正常工作。

现在,我发现我还需要使用 Sun JDK,而默认情况下 Elastic Beanstalk AMI 带有 openjdk。我用谷歌搜索了很多,在***上找到了一些(资源不多)有趣的帖子,比如这个答案。

我无法理解的是答案的这一部分:

从正在运行的 Amazon beantalk 实例创建您的自定义 AMI 您从 EC2 手动启动的 AMI,而不是从中启动的 AMI 通过 beanstalk 启动你的应用程序。

所以,我的问题是:有谁可以在 Elastic Beanstalk 上使用带有 Glassfish 的自定义 AMI? 如果不可能,谁能解释我如何创建自定义 AMI?

谢谢, 安德烈亚

【问题讨论】:

【参考方案1】:

@Danger 它将加快扩展过程。

我在 EB 上使用 docker 应用程序,但来自 Docker Hub 的“docker pull”太慢了,所以当所有实例都不正常时,我的网站将在 15-30 分钟内关闭。创建自定义 AMI 并拉取基础 Docker 映像将节省时间。

【讨论】:

【参考方案2】:

我个人发现所选答案让我难以理解,这可能是因为我仍在攀登 AWS 学习曲线。也许这个答案会帮助其他新手。刚刚弄清楚如何使用我自己的自定义 AMI 成功启动 Elastic Beanstalk 实例后,我相信这句话的意思是执行以下对我有用的完全不明显的步骤:

    转到 EC2 服务(不是 Elastic Beanstalk 服务)并基于您希望用作自定义 AMI 起点的 Elastic Beanstalk AMI 启动一个实例。你马上就把它扔掉。

    选择实例并选择“创建映像/EBS AMI”。创建后,您可以删除您创建的临时 EC2 实例。它的唯一目的是创建自定义 AMI。

    现在转到 Elastic Beanstalk 服务并编辑您的配置以引用您的自定义 AMI。

【讨论】:

这对你有什么好处?您可以从正在运行的实例中获取 AMI id。关键是要有一个干净的 EB AMI 来进行定制。如果你尝试自定义一个已经部署的系统,你会不小心硬编码一些配置。 应该还有一个步骤 b/w 步骤 1 和步骤 2,我们根据需要自定义实例,然后为新配置的实例保存 AMI。【参考方案3】:

该答案仅意味着“不要启动 beanstalk 应用程序并直接从其中一个实例中剪切 AMI。而是基于 beanstalk AMI(在公共 AMI 列表中可用)启动一个实例。”即,使用其中之一;请注意,其中有 84 个:

在您完成配置该实例后剪切您自己的私有 AMI,并在您的 beanstalk 环境中指定它。

【讨论】:

好的,谢谢克里斯托弗。我实现了从 EB 开始创建我的自定义 AMI,但是一旦我更改了 java 版本(遵循biztech.sheprador.com/?p=153),我就遇到了问题,我的应用程序变得可访问...... catalina.out 告诉你什么? 我又从0开始了。现在我正在复制建议的所有步骤。希望有好消息...让您知道,谢谢。 这是一次陡峭的攀登学习,但一旦到达顶峰,维护起来就很容易了。亚马逊没有什么真的那么难。它只是弄清楚需要花费所有时间的语法和过程。 这仍然对您有用吗?当我在 Marketplace 中搜索“beanstalk”时,只列出了一个第三方 AMI。

以上是关于自定义 Elastic Beanstalk AMI的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 自定义平台

将 AMI 映像用于 Elastic Beanstalk

从 Elastic Beanstalk 安装 PHP 模块

删除了自定义 Amazon Beanstalk AMI id

在使用 AWS Elastic Beanstalk 创建实例时运行命令

AWS Elastic Beanstalk 与 AMI2 和 docker-compose.yml