【问题标题】:How to create machine images that are identical between staging and production, but need different files (SSL certificates)?如何创建在暂存和生产之间相同但需要不同文件(SSL 证书)的机器映像?
【发布时间】:2015-10-27 08:11:38
【问题描述】:

我正在使用Packer,而且我是创建机器映像的新手。虽然我之前已经创建和部署过 Docker 容器。

我想将一个概念应用到机器映像构建中,我发现它对 Docker 映像很有用,即使用完全相同的映像进行部署到生产环境的暂存测试。由于在启动时传入了不同的环境变量值,不同的环境表现不同,在 Docker 容器的情况下,这通常由启动脚本(Docker 术语中的“入口点”)处理。

这对我来说效果很好,但现在我需要处理在登台和生产之间不同的 SSL 证书(实际文件)。对于 Docker 容器,您可以将不同的卷挂载到容器中。但是我不能用机器图像来做到这一点。

那么人们如何使用机器图像处理这种情况呢?我是否应该将这些重要文件在外部加密并curl 存储在启动脚本中?

【问题讨论】:

    标签: amazon-web-services amazon-ami


    【解决方案1】:

    您可以考虑使用配置管理工具,例如 AnsiblePuppet,在 Packer 部署大部分 VM 后执行您需要的任何环境/主机特定配置。

    或者,您可以按照您提到的那样做,只需让启动脚本 curl 从某个位置需要的适当 SSL 证书(或任何其他环境特定文件/配置)。考虑到您已经用 标记了您的问题,您可以使用单独的私有 S3 存储桶进行测试或生产,并且只允许某些实例通过 IAM 角色访问相关存储桶,从而保护该数据不被其他人或错误的环境查看,但是还减少了加密数据和管理密钥的需要。

    【讨论】:

    • 感谢您的回复。我实际上来自 DigitalOcean 设置,在那里我拥有完整的 Ansible 剧本,可以提供所有内容,我一直在使用 Packer(它支持 Ansible)来创建机器映像。我想尽可能多地预烘焙的原因是,如果我在不同的时间运行剧本(资源下降等)会出现很多不确定的行为,我想通过烘焙机器图像来避免这些行为。另外,我一直在转向 Google Compute/Container Engine 并使用 Terraform 进行部署,它偏向于这种“不可变”的基础架构风格。
    【解决方案2】:

    当您使用 AMI 启动 EC2 实例时,您可以指定标签。在实例内部,您可以使用AWS CLI to read these tags,因此您可以制作一个脚本以在系统启动时运行,并根据标签值加载您想要的任何外部文件(正如@ydaetskcoR 从私有 S3 存储桶中建议的那样)。

    这也很有用:Find out the instance id from within an ec2 machine

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多