如何从 EB 获取我的 EC2 实例以停止重新安装 java 7?

Posted

技术标签:

【中文标题】如何从 EB 获取我的 EC2 实例以停止重新安装 java 7?【英文标题】:How do I get my EC2 instance from EB to stop re-installing java 7? 【发布时间】:2018-08-06 15:37:55 【问题描述】:

所以,基本上我有一个由 Elastic Beanstalk 创建的 EC2 实例,大约每周我都会通过 SSH 连接到它以卸载 java 7 并安装 java 8。弹性 beanstalk 环境是为 Node.js 设置的,但我有一个需要实例化的单独的 java 程序。我尝试在 rc.local 中放置安装 java 8 的命令,但这根本不起作用。该文件现在恢复到其默认状态。有没有可以将实例设置为默认为 Java 8 的地方?有没有办法只保留我通过 SSH 安装的安装?请帮忙,我的网站因此一直在关闭,我不确定该怎么做,谷歌也没有太多帮助。

【问题讨论】:

【参考方案1】:

.ebextensions 我会这样做:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

.ebextensions 在创建 ec2 实例时运行;所以编写卸载 java 7 并安装 java 8 的脚本,一切顺利。

更多信息...

听起来您明白,EB 不时会自动销毁您的 ec2 实例并替换它。通常每周进行一次;查看 EB 控制台 -> 配置 -> 托管更新。你可能会发现它说

Managed updates: enabled

Weekly update window: [some date/time here]

这是一件好事。 EB 会自动为您安装重要的安全和其他更新。当它这样做时,它可能会替换您的 ec2 实例。这意味着:您手动安装 java 8 的 ec2 实例被销毁,并创建了一个全新的机器。这台全新的机器上安装了默认的 java 7...现在您必须再次手动 SSH 到这个新实例并安装 8。

您需要的是一个脚本,该脚本将在 EB 决定为您创建的所有新 ec2 实例上运行;此脚本将遵循您每次手动 SSH 到您的 ec2 实例时所采取的步骤。请注意,即使您关闭了托管更新,ec2 实例仍有可能(甚至很可能)被破坏。这是良好基础设施设计的租户;如果 ec2 实例因任何原因出现问题,您的基础架构应自动在后台运行:

1.) 启动一个新的 ec2 实例

2.) 配置新的 ec2 实例

3.) 将您的网站流量重新路由到新实例

4.) 停用旧的 ec2 实例

因此,在一个 .ebextensions 文件中,创建一个脚本来卸载 java 7 并安装 java 8,然后一切就绪。

【讨论】:

这很有帮助!太感谢了!你认为这样的文件会奏效吗:.ebextensions/java.config:commands: java_8_install: command: "yum -y install java-1.8.0" java_7_uninstall: command: "yum -y remove java-1.7.0-openjdk" @WilliamPapsco 不幸的是我不使用java,但是看起来你在正确的轨道上。无论您在手动 SSH 时使用什么命令,请在 .config 文件中执行相同的操作(也以相同的顺序)

以上是关于如何从 EB 获取我的 EC2 实例以停止重新安装 java 7?的主要内容,如果未能解决你的问题,请参考以下文章

使用“实例存储”停止 Amazon EC2 实例

当我停止并启动一个 ec2 cent os 实例时,我会丢失哪些数据

如何在 Java 中以编程方式启动和停止 Amazon EC2 实例

重新启动后丢失 aws ec2 磁盘数据

AWS EC2 EB 上的 .htaccess 在哪里

用于自动启动和停止 AWS EC2 实例的脚本