在 aws opsworks 中运行自定义食谱
Posted
技术标签:
【中文标题】在 aws opsworks 中运行自定义食谱【英文标题】:run custom cookbook in aws opsworks 【发布时间】:2017-06-01 01:42:58 【问题描述】:我对 AWS opsworks 很陌生。虽然我在其他一些云中使用了主厨独奏。
目前我想安装我的 custom cookbook,并且我想在堆栈层内的服务器上应用。目前我真的很困惑它是如何在 AWS 中工作的。
这是我到目前为止所做的步骤 - 我已将我的test cookbook 存储在 github 中,我想通过 chef-solo 或 chef-client 执行测试。我如何在堆栈设置中添加了食谱 github url。我还在构建生命周期中添加了配方。
我确实通过运行命令更新食谱。在执行所有可用的内置食谱后,我可以看到它正在通过运行列表运行,并且厨师运行失败并出现错误-
没有找到食谱测试食谱
我没有在说明书中或通过命令运行时配置任何 Json。有什么遗漏吗?
【问题讨论】:
您是在谈论当前一代 OpsWorks for Automate 还是旧版 OpsWorks Classic? 是的,诺亚。目前我想通过 aws opsworks classic 运行我的自定义食谱。实际上我认为这是我的错误。我最终解决了它。我可以通过创建 repo 然后在其中创建食谱来做到这一点。但唯一的问题是它使用的是零号厨师。厨师零正在使用包装食谱,就像自定义食谱一样,它正在加载食谱。我们在厨师自动化方面有更多优势吗?我也可以试试。 较新的 OpsWorks 只是标准 Chef,因此所有正常的工作流程和教程都适用。是否值得切换,由您决定。 @coderanger 只是想知道有没有办法通过 opsworks 经典中的自定义 json 覆盖运行列表。我可以看到当我通过 run command 执行 execute_recipes 时,它正在执行厨师零两次。第一个带有运行列表 -WARN: Overridden Run List: [recipe[opsworks_custom_cookbooks::load], recipe[opsworks_custom_cookbooks::execute]]
,第二个带有 - WARN: Overridden Run List: [recipe[opsworks_stack_state_sync], recipe[test-cookbook], recipe[test_suite], recipe[opsworks_cleanup]]
这里 test-cookbook 是自定义食谱。有什么建议吗?
【参考方案1】:
使用 berkshelf 创建 Berksfile
运行berks package cookbooks.tar.gz
将 cookbooks.tar.gz 上传到 AWS S3
在堆栈设置中将“使用自定义说明书”指向 S3 存储桶
运行更新说明书命令
运行您要执行的部署或自定义配方
【讨论】:
谢谢托马斯。我也会试试 Berks。【参考方案2】:Thomas V 的回答假设您要使用 AWS S3 实例。较新的 Opsworks 安装提供了引用自定义 Github 食谱存储库的选项。您可以使用 Berks package 命令获取自定义说明书的所有依赖项,而不是将堆栈(通过堆栈设置)指向 S3 存储桶,然后可以将其上传到您的 Github 存储库并由堆栈引用。
从那里,您应该能够使用 OpsWorks 选项在所需的周期(设置、配置、部署等)之后运行您的自定义说明书,方法是转到 Layers > Recipes 并将其添加到那里。
【讨论】:
以上是关于在 aws opsworks 中运行自定义食谱的主要内容,如果未能解决你的问题,请参考以下文章
Opsworks 自定义厨师食谱上的 Codeigniter ci_sessions
Berkshelf:为 opsworks 合并多个同名的食谱
是否可以从厨师AWS / Opsworks食谱中运行Ansible playbook?