我们计划使用非"预烘烤"的AMI EC2实例.即,当它们被旋转时,它们只是AWS linux的安装.我们的引导过程将引入我们需要的各种安装,例如python,tomcat.我们最少有3个实例,最多8个实例.
鉴于这些要求,使用Puppet/Chef是否有用而不是使用Amazon Cloud Formation(CloudInit)?
我能看到的最好的是如果我们使用Puppet,那么我们就会进行声明性编程,这样可以更容易地进行审计,以查看脚本发生了什么.此外,CloudInit有一个16k的脚本大小限制,我们可能会或可能不会遇到.
有没有人从CloudInit转移到Puppet或Chef,因为他们可以在这里回答我的问题?
我有一个基于Amazon Linux AMI运行AMI的EC2实例.与所有此类AMI一样,它支持cloud-init系统,用于根据传递到每个实例的用户数据运行启动脚本.在这种特殊情况下,我的用户数据输入恰好是一个包含几个其他启动脚本的Include文件:
#include
http://s3.amazonaws.com/path/to/script/1
http://s3.amazonaws.com/path/to/script/2
Run Code Online (Sandbox Code Playgroud)
我第一次启动我的实例时,cloud-init启动脚本正确运行.但是,如果我对实例进行软重启(例如,通过运行sudo shutdown -r now
),则实例会在不再运行启动脚本的情况下重新启动.如果我进入系统日志,我可以看到:
Running cloud-init user-scripts
user-scripts already ran once-per-instance
[ OK ]
Run Code Online (Sandbox Code Playgroud)
这不是我想要的 - 我可以看到启动脚本每个实例生命周期只运行一次的实用程序,但在我的情况下,这些应该在每次实例启动时运行,就像正常的启动脚本一样.
我意识到一个可能的解决方案是rc.local
在第一次运行后手动让我的脚本插入.然而,这似乎很麻烦,因为cloud-init和rc.d环境略有不同,我现在必须分别在首次启动和所有后续启动时调试脚本.
有谁知道我怎么能告诉cloud-init总是运行我的脚本?这听起来像是cloud-init的设计者会考虑的事情.
我正在编写CloudFormation模板,我正在尝试调试我在模板中提供的用户数据脚本.如何cloud-init
手动运行并使其执行与启动新实例时相同的操作?
在AWS中为实例定义userdata似乎对执行各种引导类型操作非常有用.不幸的是,由于PCI原因,我必须使用不是源自其中一个提供的AMI的自定义CentOS AMI,因此尚未安装和配置cloud-init.我只是想要它设置一个主机名并运行一个小的bash脚本.我如何让它工作?
cloud-init用户数据对象的cloud-config部分中的指令顺序是什么.这对于避免种族类型的情况很重要.
我知道bootcmd在runcmd之前提前运行,但是有一个很好的列表,所有方法的顺序?
我使用openstack使用'nova boot'命令创建VM.我的图像启用了cloud-init.我传递了一个--user-data脚本,这是一个bash shell格式,用于在VM启动期间运行cloud-init.这一切都成功了.现在我的用例是重新运行cloud-init来执行相同的用户数据脚本,而无需重新启动VM.我看到/ usr/bin/cloud-init选项,他们确实讨论了运行特定模块,但没有任何东西可以让它执行相同的用户数据脚本.怎么能实现这一目标?任何帮助,将不胜感激.
我正在通过将shell脚本粘贴到用户数据字段来初始化运行标准Ubuntu 13.04 AMI衍生物的spot实例.
这有效.该脚本运行.但它很难调试,因为我无法弄清楚脚本输出的记录位置,如果在任何地方.
我查看了/var/log/cloud-init.log,它似乎包含了一些与调试cloud-init相关的东西本身,但与我的脚本无关.我在/ var/log中搜索并没有发现任何内容.
是否有一些特殊的东西我必须做以打开登录?
我正在使用CloudFormation来管理Tomcat Web服务器堆栈,但我厌倦了为新的应用程序版本进行原始AMI管理.我想向厨师方向走,但现在没有时间.相反,我试图在网络服务器实例化中克服一个简单的问题:当新机器启动时,如何下载"当前"WAR?
我的想法是利用私有的S3存储桶和cloudinit,但我对IAM凭据的处理方式感到有点困惑.我可以将它们放在模板的用户数据中,但我不愿意这样做,特别是因为我是控制该文件的版本.我能想到的唯一选择是在AMI本身中使用环境变量.它们必须是纯文本,但是......呃,如果你可以打破我的实例,你可以压缩并下载我的整个网络服务器.只要IAM用户不被重复用于任何其他用户并且定期轮换,这似乎是解决问题的合理方法.我错过了什么吗?如何使用cloudinit安全地下载私有S3资产?
最近,我通过在映像中安装我的配置来让 Cloud-Init 工作。这一切都很好,它有效。如果我破坏了配置,它会告诉我。它没有告诉我为什么我不被允许登录。
我尝试过使用echo possible | mkpasswd -m sha-512 -s
并复制快速入门页面上的示例来创建自己的密码: https: //wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
都不起作用。我也尝试过设置自定义用户名。不会改变任何东西。默认ubuntu:ubuntu
也是不可用的。ubuntu 和空白都不是。
我正在使用什么:
https://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-amd64.iso
https://wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
# echo possible | mkpasswd -m sha-512 -s
$6$nqZiIASVBA.iF$9nubU0ImWVrv4XhtEq9XhSh9UYNFQ7yC9Lf7A.uheSlJ3cgI5d9ltkUwRq.X8lAwoQuLAMem6v.gJNGYwk5XA0
Run Code Online (Sandbox Code Playgroud)
以下配置及其提供的密码,或以上;
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-server
password: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
username: ubuntu
Run Code Online (Sandbox Code Playgroud)
我也尝试过像这样设置用户块:
我要求什么:
我正在使用AWS Cloudformation为我的Web应用程序设置网络基础结构的许多元素(VPC,安全组,子网,自动调节组等).我希望整个过程自动化.我想点击一个按钮,然后能够启动整个事情.
我已经成功创建了一个Cloudformation模板,用于设置所有这些网络基础架构.但是,EC2实例目前在没有任何所需软件的情况下启动.现在我想弄清楚如何最好地在他们身上获得该软件.
为此,我正在使用Packer.io创建AMI .但有些人反而催促我使用Cloud-Init.我应该使用什么启发式方法来决定将哪些内容融入AMI和/或通过Cloud-Init配置什么?
例如,我想预先配置EC2实例以允许me(saqib
)在没有自己笔记本电脑密码的情况下登录.因此EC2必须有用户.该用户必须具有主目录.并且在该主目录中必须存在.ssh/known_hosts
包含加密代码的文件.我应该将这些目录烘焙到AMI吗?或者我应该使用cloud-init来设置它们?我该如何决定这个和其他类似的案例呢?
packer amazon-web-services cloud-init aws-cloudformation amazon-ami
cloud-init ×10
amazon-ami ×2
amazon-ec2 ×2
amazon-s3 ×1
centos ×1
chef-infra ×1
cloud ×1
openstack ×1
packer ×1
puppet ×1
ubuntu ×1
ubuntu-20.04 ×1
user-data ×1