AWS EC2 自动缩放 - 通过 ssh 在 EC2 上进行自定义设置
Posted
技术标签:
【中文标题】AWS EC2 自动缩放 - 通过 ssh 在 EC2 上进行自定义设置【英文标题】:AWS EC2 autoscaling - custom setting on EC2 through ssh 【发布时间】:2015-11-04 10:07:49 【问题描述】:我正在使用 Django 和 Elastic Beanstalk(AWS) 开发一个 Web 应用程序。 目前,我只在服务器层使用免费层 ec2。
我担心的是,自动扩展时 EC2 上的自定义设置。
python 库“Pillow”需要一个外部库,例如“libjpeg-turbo-devel”和“zlib-devel”。这应该在安装所有 python 库之前安装。无法使用 aws 配置文件自动执行此操作,因此我通过连接到 EC2 彻底 ssh 手动安装文件
当 EC2 扩展时,这种手动设置会影响其他 EC2 实例吗?
如果扩展的行为类似于“复制原始 EC2 实例”,那么就没有问题。 但是,该过程只是“部署应用程序”到另一个 ec2 实例,它不会起作用,因为尚未应用手动设置。
有人能解释一下 EC2 自动缩放是如何工作的吗? 谢谢!!
【问题讨论】:
【参考方案1】:首先,我建议阅读 AutoScaling 文档。
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/GettingStartedTutorial.html
AutoScaling 将根据 CloudWatch 警报和其他规则启动和终止 EC2 实例。当 AutoScaling 启动新的 EC2 实例时,它基于特定的 AMI 映像。该 AMI 映像可以是 Amazon 的基础 AMI 映像之一,也可以是您自定义的 AMI 映像。
如果您通过 SSH 连接到属于 AutoScaling 组的 EC2 实例,对其进行的任何更改都不会影响任何其他 EC2 实例。
自定义 AutoScaling 启动的 EC2 实例有两种主要方法:
从相当基本的 AMI 映像启动,并在创建实例时使用某种配置管理方法对其进行自定义。可以使用 Chef、Ansible 等工具。
启动您创建的已自定义 AMI 映像。当您执行此操作时,EC2 实例几乎可以使用了。
如果您已经根据自己的喜好自定义了 EC2 实例(通过安装“libjpeg-turbo-devel”和“zlib-devel”),您现在可以从您的 EC2 实例创建一个 AMI 映像并创建和/或更新您的启动配置,将其配置为使用您的自定义 AMI。
这样,当 AutoScaling 创建新的 EC2 实例时,它将基于您的自定义 AMI,该 AMI 已经安装了您的首选库。
【讨论】:
感谢您的帮助:) 这适用于用户管理的 Auto Scaling 组,但不适用于 Elastic Beanstalk。到目前为止,它不支持自定义 AMI。必须使用 .eb 配置文件来做到这一点。 Elastic Beanstalk 确实支持自定义 AMI。我一直在使用它们。应用程序运行后,您可以通过配置更改 AMI。【参考方案2】:Beanstalk 支持通过配置安装外部包(yum、pip 等)。建议这样做。
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-packages
【讨论】:
Elastic Beanstalk 确实支持自定义 AMI 映像。我一直在使用它们。 每天学习新东西。您是否考虑过使用包:在自定义 yaml 中而不是尝试通过基础 AMI 提供它? 是的,我有自定义配置文件:“packages: yum: libjpeg-turbo-devel: [] , zlib-devel: [] , freetype-devel: []”,但它没有起初工作是因为 Python 库已经安装在 EC2 上。这就是我连接到 EC2 并按正确顺序重新安装库的原因。无论如何,我只是发现它在自动扩展时可以完美运行。新的 EC2 首先安装软件包,然后安装更旧的 python 库!因此无需自定义设置。谢谢你的回答!以上是关于AWS EC2 自动缩放 - 通过 ssh 在 EC2 上进行自定义设置的主要内容,如果未能解决你的问题,请参考以下文章