【问题标题】:Mounting directories on ECS via API?通过 API 在 ECS 上挂载目录?
【发布时间】:2016-07-07 01:12:33
【问题描述】:

这可能是服务器故障,但由于我试图通过 API 或以其他方式进行编程,我将假设问题是针对 StackOverflow 的,直到我被告知其他情况。

我正在尝试在我正在开发的应用程序中用 ECS 替换 Deis。应用程序本身目前能够在 Deis 上启动新应用程序(运行 Web 应用程序的 docker 容器),方法是使用部署密钥从我们的私有 git 存储库中检查源代码,然后将所述代码推送到 Deis 端点(然后处理创建和启动 docker 容器等等)。

不过,Deis 一直很不稳定,所以我正在探索替换它。

ECS 似乎很合适,通过使用Buildstep Container,我已经使用 docker 在命令行中成功地从我的私有存储库中运行了类似于 heroku 的代码部署。

为此,我必须将我的 ssh 密钥目录映射到容器中,作为运行命令的一部分:

docker run -d -v ~/.ssh:/root/.ssh -p 3000:3000 -e PORT=3000 -e GIT_REPO=private-repo-url.git tutum/buildstep /start web

除了两件事之外,这大部分都很好。首先是我不知道调用任务创建 API 时执行此操作的最佳方法。据我了解,可以使用卷和挂载点在 ECS 上注册任务,但卷需要是运行任务的 ECS 集群主机上的卷(?我可以对此使用确认),这不会在任务注册时已知。我能找到的唯一示例使用了本地文件路径。

所以,第一个问题:如何将我的部署密钥注入容器,或可靠地映射容器可以在启动时附加的“密钥”目录

这方面的另一部分不太重要,但理想情况下,一旦 git repo pull 完成,密钥就不会保留在每个容器上。我认为最干净的方法将取决于我如何完成第一个问题,但第二个问题是我如何清理我的密钥,以便在部署完成后它们不会留在容器上

【问题讨论】:

  • 您今天在您的部署环境中如何解决同样的问题,您正在使用卷共享 .ssh 密钥,开箱即用的 docker 不会进行任何清理。
  • 我今天没有解决它,我有一个完全不同的架构,我正在迁移。

标签: git docker amazon-ecs


【解决方案1】:

如何将我的部署密钥注入容器,或可靠地映射容器可以在启动时附加的“密钥”目录

我会在用户数据中这样做。无论如何,ECS 的用户数据都是必需的,以便实例可以加入集群。让这个密钥在某处可用(s3,无论如何)并让它在启动时将其拉下。假设这进入 /opt/foo 。您的任务定义可以毫无问题地从主机映射 /opt/foo,因为集群中的每个主机都拥有并正在使用它。

如何清理我的密钥,使它们在部署完成后不会留在容器中

这是一个单独的问题。如果您的容器完全停止/启动,那么该密钥需要再次可用吗?如果是这样,您将无法清理它们,因为该任务可能随时在不同的实例上启动。如果您只需要它一次,那么您可以让您的 docker 容器的启动 CMD 在部署完成后运行一个命令来清理它。然而,这听起来很脆弱。为什么不使用只读帐户并提供用户/密码而不是使用 git+ssh ?你可以通过 env vars 提供这个,而不需要做一半。

【讨论】:

  • 有效的想法,我还不确定你的问题的答案。我目前正在使用部署密钥,因为推送到 docker 容器的东西不一定都来自同一个用户。
【解决方案2】:

你真的需要挂载一个目录吗?如果在您所在的地区可用,EFS 可能是为您的 ECS 实施提供通用文件存储的一个很好的解决方案。

签出:

https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/

对于参考实现,尽管它对于您正在尝试做的事情来说有点过头了。

【讨论】:

  • 谢谢,这是我在发布问题后开始调查的内容。很抱歉没有更新,但我会在找到最终解决方案后再次更新。
猜你喜欢
  • 2022-12-10
  • 2017-10-19
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多