我有一个 EC2 实例,它运行一个托管在私有(private) git 存储库上的应用程序。
我需要能够从我的主服务器启动其中的许多。目前,我有 5 个固定的“worker”实例,我可以毫无问题地从 master 启动/停止它们。每个工作人员启动、 pull 存储库并在启动时启动应用程序。这显然不是一个好的解决方案,我想让它更灵活(启动尽可能多的实例,等等)。配置和包是最终的,所以我很乐意将它们全部捆绑到一个 AMI 中。
有没有办法将我的 git key 捆绑到 AMI 中,以便启动许多类似的实例并让它们在启动时全部 pull 并启动我的应用程序,而无需连接到每个实例并输入密码?有没有更好的办法?我读过有关 cloud-init、user-data、puppet 和许多其他内容的信息,但我在这方面还很新手,找不到使用 ssh key 的合适示例。
最佳答案
我建议您不要将 key 捆绑到 AMI 中,而是将它们与 AMI 分开,因为:
- 如果您更改了 git key ,则不必构建新的 AMI
- 有权从您的 AMI 启动实例的未授权用户无法启动您的应用
我建议使用用户数据功能。如果需要,您可以选择加密您的 key 并对其进行 base64 编码。当您手动或使用 CLI/API 启动您的实例时,您可以传递您的 key ,实例启动后可以访问这些 key 。访问数据的方式有很多种(python、curl 等等)。我建议您使用 AWS 元数据服务器,因为您的实例不需要您的 AWS 凭证来获取用户数据。实例启动后,让您的应用进行以下调用,获取 key ,然后 pull 存储库:
curl http://169.254.169.254/latest/user-data
返回您的元数据(无需凭据)。您可以选择使用 base64 解码和解密您的 key ,并使用它来提取 repo 协议(protocol)。如果您不想要额外的安全性,您可以绕过加密/base64 部分。
关于linux - 将 Git SSH key 捆绑到私有(private) AMI 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261527/