如何访问 OpsWorks ECS 层中的私有 Docker 存储库?
Posted
技术标签:
【中文标题】如何访问 OpsWorks ECS 层中的私有 Docker 存储库?【英文标题】:How to access private Docker repository in OpsWorks ECS Layer? 【发布时间】:2016-03-12 17:42:10 【问题描述】:我正在尝试使用 ECS Ops-Works 层来管理一些自动化,但我无法弄清楚如何设置这些实例来设置 ecs.config 以包含我的私有 Docker 存储库凭据,就像手动执行的那样如果直接管理 ec2 作业。我想我需要以某种方式使用一些自定义 Chef 来覆盖 setup recipe 来加载我的模板而不是该文件的默认模板,但我是 Chef 的新手,所以如何做到这一点尚不清楚。
【问题讨论】:
您可能需要提供有关 opsworks 食谱本身的更多信息。是配方中的模板资源吗?它在资源/提供者中吗?您能指出我们正在使用的 opsworks 代码吗?我可以临时想到几种不同的可能解决方案,但是没有使用 opsworks 的经验无法告诉您该怎么做,而不会猜到完全错误的答案... 嗨拉蒙特,感谢您的关注。 OpsWorks 默认提供一组配方 (github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/…)。默认情况下应用所有配方,由用户提供额外的配方(我希望修改现有的配方)。我特别感兴趣的是看到 github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/… 指向不同的模板,或者如果不可能的话,在自定义配方中重新配置和重置。 【参考方案1】:所以要重申这个问题,你想在opsworks_ecs::setup
配方中修改这个模板:
template "ecs.config" do
path "/etc/ecs/ecs.config"
source "ecs.config.erb"
owner "root"
group "root"
mode 0644
end
我不知道你是如何“调用”它的,但我现在假设你要么将此配方直接放入你的 run_list 和/或使用 include_recipe "opsworks_ecs::setup"
显式调用它
在这种情况下,编写一个包装食谱。如果您为“Acme, Org”工作,它可能类似于 acme_opsworks_ecs::setup
。
acme_opsworks_ecs/metadata.rb 至少应该有:
name 'acme_opsworks_ecs'
version '0.0.1'
depends 'opsworks_ecs'
acme_opsworks_ecs/recipes/setup.rb 应该如下所示:
include_recipe "opsworks_ecs::setup"
resources(template: "ecs.config").cookbook(cookbook_name)
acme_opsworks_ecs/templates/default/ecs.config.erb 也是必需的
/* add your own template content to this file -- copy theirs and edit */
这应该可以让您修复它。您正在做的是使用 Chef 的两遍解析器,以便 opsworks 配方定义模板资源,然后在它实际运行之前重新打开它并对其进行编辑。现在,无论您在 run_list 或 include_recipe 调用中是否引用了 opsworks_ecs::setup
,请将该配方替换为 acme_opsworks_ecs::setup
。
如果您不直接调用 opsworks_ecs::setup
,则按照相同的模式包装您调用的 opsworks 配方。
如果你用谷歌搜索“chef-rewind”,你可以找到更多关于这种使用厨师模式的信息。请注意,我使用的语法是厨师内置的,不需要使用自定义 gem 安装或 chef_rewind 资源/定义,因此在此答案中使用语法会更加简单。
【讨论】:
我后来尝试了这个,但似乎没有达到预期的效果。我随后与亚马逊支持人员取得了联系,他们告诉我他们的厨师实施中的一些差异,特别是docs.aws.amazon.com/opsworks/latest/userguide/… 用于修改模板。当/如果我让它工作时,我会进一步报告。不过还是谢谢。 他们的解决方案似乎依赖于我们最终将在 chef-client 中弃用的多个食谱路径功能。如果你能弄清楚如何让它发挥作用,这种厨师倒带方法会更好。 感谢您的提醒! 如果你能弄清楚这种方法有什么问题,我很想知道,我已经重读了几次,我没有看到任何明显的错误我做了。感觉有点糟糕,你给了我 +100 代表,它对你也不起作用...... 我认为您的回答是善意的,我对奖励声誉感到满意。就目前而言,看起来我们将使用与 OpsWorks 层不同的 ECS 管理器。此外,我们进行了一些人员变动,我将不再是系统这一部分的主要联系人,所以我不确定我是否有机会处理它。我希望其他用户能帮助您进一步追求这一点。以上是关于如何访问 OpsWorks ECS 层中的私有 Docker 存储库?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CloudFormation 中向 Opsworks Stack 注册 ECS 集群?
如何将使用自动扩展组和 ECS IAM 创建的 EC2 实例添加到 OpsWorks 堆栈?
如何使用 Opsworks(亚马逊)使用“自定义”层部署 python 应用程序?