我开始怀疑我是否错过了 cfn-init 的全部意义。我开始考虑应该烘焙 cfn 模板中使用的 AMI 以节省时间,这样就不会浪费时间重新安装所有软件包,这样我就可以快速测试接下来的 boostrapping 步骤。但是,如果我在 cfn-init 命令中有下载 awslogs 并通过在用户数据中执行 cfn-init 命令来流式传输日志,如果我将其写入,我的日志组将被创建,但 awslog 程序不需要运行一个新的命令来开始流日志,如果该命令被内置,那么它就没有意义。这让我想到了下一个问题,cfn-init Bootstrap 设计(或至少是最佳实践)是为了在每次新的 ec2 时运行它已旋转,即您不能或不应该在 cfn-init 部分中进行烘焙?
最佳答案
您的怀疑是非常正确的,这纯粹是 DevOp 的设计方法和工作风格。
如果你的 cfn-int 只完成了几个软件包的安装;很好,这可以在 AMI 中烘焙。正如您正确指出的那样,这将节省时间并确保更快的堆栈创建。
但是,如果您想安装最新版本的软件包怎么办?在这种情况下,您只需将最新的标志/关键字添加到 cfn-init 包部分即可。我已使用 cfn-init 动态接受 Active Directory - 域 Controller 的 BIOS 名称;所以在这种情况下我无法在 AMI 中烘焙它。
cfn-init 的另一个有用之处是假设您已经配置了 4 个要安装的软件包;如果您还需要安装另一个软件包怎么办?在这种情况下 - 如果是 CloudFormation cfn-init - 这是要添加的另一行代码。如果是 AMI - 必须烘焙新的 AMI 方法。
这纯粹是一种权衡。
关于bootstrapping - 如果您在 cloudformation 模板中使用 cfn-init,那么烘焙 AMI 是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592278/