如何访问 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 应用程序?

AWS opsworks docker 服务发现

通过 Cloudformation 模板创建 RDS Opsworks 层

如何增加 AWS Opsworks 的部署超时限制?