如何创建在暂存和生产之间相同但需要不同文件(SSL 证书)的机器映像?

How to create machine images that are identical between staging and production, but need different files (SSL certificates)?

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

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

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

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

您可以考虑使用 Ansible or Puppet 等配置管理工具来执行您需要的任何 environment/host 特定配置,一旦 Packer 部署了大部分 VM。

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

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

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