【问题标题】:How Are OpsWorks' Built-In Recipes Versioned?OpsWorks 的内置配方如何进行版本控制?
【发布时间】:2014-05-26 21:19:50
【问题描述】:

当您在 OpsWorks 中设置堆栈时,它是否会锁定当前的内置说明书版本,还是会在每次触发生命周期事件时使用最新版本?

对于自定义菜谱,我知道 OpsWorks 在提供菜谱时会缓存提供的菜谱,而不是每次都获取最新版本,但我想知道内置菜谱是否也是如此。

出于几个原因,我对此感到担忧。如果更新说明书以安装不同版本的 Apache 或 PHP 或稍微改变其默认配置怎么办?如果我然后在使用旧配方的层中设置一个新实例并最终得到多个配置略有不同的服务器怎么办?

似乎也没有办法自定义安装哪个 PHP5 版本,所以我只是受 ubuntu 包管理器决定使用最新稳定版本的摆布吗?

我确实想继续使用最新最好的软件版本,但我想在我能够测试我的应用程序在新版本中工作后自行部署它们。

【问题讨论】:

    标签: php chef-infra package-managers chef-solo aws-opsworks


    【解决方案1】:

    当您在 OpsWorks 中设置堆栈时,它是否会锁定当前的内置说明书版本,还是会在每次触发生命周期事件时使用最新版本?

    当您配置新机器时,会同时向服务器请求内置说明书 + 自定义说明书。它仅在请求自定义食谱更新时才会更新。这就是为什么不建议将整个 AWS 说明书复制到您的自定义说明书中的原因。只有您正在修改的内容才能从标准社区食谱更新中受益。

    出于几个原因,我对此感到担忧。如果更新说明书以安装不同版本的 Apache 或 PHP 或稍微改变其默认配置怎么办?如果我然后在使用旧配方的层中设置一个新实例并最终得到多个配置略有不同的服务器怎么办?

    这不仅仅是一个祸根,也是一个好处。这取决于你如何看待这一点。可以做些什么可能会提高性能,也可以引入错误。这需要由您的操作人员保持同步。

    您可以通过将重复(或自定义)版本放置在食谱中的同一位置来覆盖内置食谱的部分内容。 Converge option

    或者更复杂但可靠的方法:

    1. 实施自定义食谱食谱。
    2. 将 opsworks 食谱作为子模块导入到您的食谱文件夹内的文件夹中。
    3. 现在将需要版本控制的食谱符号链接到主文件夹
    4. 根据需要评估和更新特定的

    即:

    cd cookbook
    git submodule add https://github.com/aws/opsworks-cookbooks external-cookbooks/opsworks-cookbooks
    ln -s external-cookbooks/opsworks-cookbooks/rails rails 
    

    通过这种方式,您可以更新并保持对基础架构代码的版本控制。进行并评估更改,并仅在您完成后导入更改

    我仍然建议使用只需要硬编码的微小更改的收敛模式。这将意味着更少的重复,并且您将受益于可能在社区版本的食谱中的更新。

    如果您使用的是使用 UBUNTU 方式安装 PHP 的说明书 - 那么您将对 repo 中的内容保持宽容。如果您使用的是另一个自定义编译版本,那么您可以编译特定版本。您可能必须自己编写或找到一个可以构建它并让您通过食谱上的属性指定版本的方法。

    【讨论】:

    • 感谢您的详细回复。我会考虑你的建议。关于 Ubuntu 的包管理器,出于这个原因,我可能会查看 Gentoo。它似乎允许我指定软件版本。
    猜你喜欢
    • 2018-08-01
    • 2015-12-28
    • 2010-12-30
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2012-05-17
    相关资源
    最近更新 更多