我创建了一个自定义 Linux AMI,其中包含运行 PHP 应用程序所需的一切(基本上是一个批量处理图像/视频/音频的节点)。可以同时运行 n 个实例。到目前为止,它已部署并运行良好。
我唯一担心的是,我必须对一些 MySQL DB 凭据、FTP 密码和其他将来可能会更改的内容进行硬编码。我还有其他服务器,这些凭据可以在其中使用(在 Amazon 网络之外),但我不确定在启动 EC2 实例后如何将这些凭据放入其中。对于新的 EC2 实例来说,这些应该很容易且安全,但对于其他任何人来说都不是。
答案1
简而言之,您可以这样做:
- 创建 IAM 角色以供您的 EC2 实例使用
- 将您的凭证上传到一个或多个 S3 对象,并授予新角色读取权限。
- 更改您的 Linux AMI 以运行程序或脚本,从 S3 获取凭证并在启动时将它们放在您想要的位置。这将需要使用存储在实例配置文件中的角色凭证。AWS PHP SDK 可以为您完成此操作。
- 当您启动实例时,请确保您表明想要使用新角色。
我已经开始使用云形成这似乎更符合我的需要,但需要更多的设置。
答案2
Amazon Linux AMI 支持设置“用户数据”脚本,该脚本将在 VM 启动时安全地传递给 VM。
引自这里:
Amazon Linux AMI 包含 cloud-init 的自定义版本。它使您能够指定在启动时应发生在实例上的操作。您可以在启动实例时通过用户数据字段将所需的操作传递给 cloud-init。这意味着您可以将常见的 AMI 用于许多用例并在启动时动态配置它们。
因此,当您启动实例时,您会传递用户数据脚本。例如:
ec2-run-instances --key KEYPAIR --user-data-file custom-env-file ami-xxxxxx
就您而言,您可以在用户数据文件中传递所需的凭据,并将其保存在实例上的已知位置。您的应用可以从那里获取它们。