这可能是一个服务器故障的事情,但由于我试图通过API或其他编程方式来做,我将假设问题是StackOverflow,直到我被告知否则。
我正在尝试用我正在处理的应用程序中的ECS替换Deis。应用程序本身目前能够通过使用部署密钥从我们的私有git仓库检出源代码,然后将所述代码推送到Deis端点(然后处理创建和创建)来在Deis上启动新应用程序(运行Web应用程序的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,键就不会停留在每个容器上。我认为最简洁的方法取决于我如何完成第一个问题,但第二个问题是如何清理我的密钥,以便在部署完成后它们不会留在容器上
答案 0 :(得分:1)
如何将部署密钥注入容器,或者可靠地映射容器在启动时可以附加的“密钥”目录
我会在用户数据中这样做。无论如何都需要ECS的用户数据,以便实例可以加入群集。让这个密钥在某个地方可用(s3,无论如何),并在启动时将其拉下来。说这进入/ opt / foo。您的任务定义可以毫无问题地从主机映射/ opt / foo,因为群集中的每个主机都有并且正在使用它。
如何清理我的密钥,以便在部署完成后不会留在容器上
这是一个单独的问题。如果您的容器完全停止/启动,那么该密钥需要再次正确使用吗?如果是这样,您无法清除它们,因为该任务可能随时在另一个实例上启动。如果您只需要一次,那么您可以让Docker容器的启动CMD运行命令,以便在部署完成后将其清理干净。但这听起来很脆弱。为什么不使用只读帐户并提供用户/密码而不是使用git + ssh?你可以通过env vars提供这个,而不需要做一半。
答案 1 :(得分:1)
你真的需要挂载一个目录吗?如果您所在地区可以使用,EFS可以为您的ECS实施提供通用文件存储。
退房:
https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/
参考实施,但对于您尝试做的事情来说是过度的。