amazon-web-services - AWS AMI 中需要烘焙哪些内容以及使用 cloud-init 来配置哪些内容?

标签 amazon-web-services aws-cloudformation amazon-ami packer cloud-init

我正在使用 AWS Cloudformation 为我的 Web 应用程序设置大量网络基础设施元素(VPC、安全组、子网、自动扩展组等)。我希望整个过程自动化。我想单击一个按钮并能够启动整个程序。

我已经成功创建了一个 Cloudformation 模板来设置所有这些网络基础设施。然而,EC2 实例目前启动时没有任何所需的软件。现在我正在尝试找出如何最好地在他们身上安装该软件。

为此,我使用 Packer.io 创建 AMI 。但有些人反而敦促我使用 Cloud-Init。我应该使用什么启发式方法来决定将哪些内容烘焙到 AMI 中和/或通过 Cloud-Init 配置哪些内容?

例如,我想预配置一个 EC2 实例,以允许我 (saqib) 从我自己的笔记本电脑无需密码即可登录。因此EC2必须有一个用户。该用户必须有一个主目录。在该主目录中必须存在一个包含加密代码的文件.ssh/known_hosts。我应该将这些目录烘焙到 AMI 中吗?或者我应该使用 cloud-init 来设置它们?在这种情况和其他类似情况下我应该如何决定?

最佳答案

我喜欢将机器配置与环境配置分开。

一般来说,我使用以下内容作为指导:

构建阶段

  • 使用 Packer 等工具构建基础机器镜像,包括运行应用程序所需的所有软件。由此创建一个 AMI。
  • 将应用程序安装到基础计算机镜像上,创建应用程序镜像。标记此工件并对其进行版本控制。不要在此处嵌入特定于环境的内容(例如数据库连接等),因为这会妨碍您在不同的环境运行时轻松地重用此 AMI。
  • 确保所有服务均已停止

发布阶段

  • 使用 CFN 等工具启动一个由所需图像和基础设施组成的环境。
  • 使用 Cloud-Init user-data配置应用程序环境(数据库连接、日志转发器等),然后启动应用程序/服务

这种方法提供了最大的灵活性,并干净地分离出持续交付管道的各种问题。

关于amazon-web-services - AWS AMI 中需要烘焙哪些内容以及使用 cloud-init 来配置哪些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824594/

相关文章:

amazon-web-services - 模板错误:每个 Fn::GetAtt 对象都需要两个非空参数,即资源名称和资源属性

amazon-web-services - 如何为模板中的堆栈中创建的参数赋予值?

linux - 如何从头开始创建 AWS Ubuntu 12.04 x64 AMI?

amazon-web-services - Windows 10 家庭版上的 aws cdk 出现问题(代码 : 800A03F6 Source: Compilation Error in Microsoft JScript)

amazon-web-services - aws云形成为github添加公钥

python - 使用scrapy时在AWS上获取TCP连接超时: 110: Connection timed out.?

json - 允许同一安全组中的每个实例在 Cloud Formation JSON 中相互共享任何数据吗?

aws-cloudformation - 使用 Fn::Join 和 "Ref"

linux - AMI内核ID和EC2实例安装的内核有什么关系?

Java Web 启动 AMI