我对 AWS EC2 机器的 Nginx 进行了所有更改并设置了 PHP 值并测试了所有内容,然后烘焙了 AMI,以便它可以在 AWS 自动扩展组下启动。
一切都很好,但是当开发人员或应用程序重写有时需要更改 PHP 值或在 nginx conf 文件中执行一些新的重写规则时,每次扰乱我的完整自动扩展基础设施并使服务器关闭后,我总是必须重新烘焙整个 AMI。
我肯定是错的!在不影响现有自动缩放组的情况下,进行此类更改的最简单/最佳方法是什么。可能是 php.ini 和 nginx conf 文件的 NFS 共享符号链接?如果解决方案只是符号链接,那么应该怎么做?
答案1
看一下EC2 用户数据。您可以设置一些从 S3 下载脚本并运行的东西。
当您在 Amazon EC2 中启动实例时,您可以选择将用户数据传递给实例,这些数据可用于执行常见的自动配置任务,甚至在实例启动后运行脚本。您可以将两种类型的用户数据传递给 Amazon EC2:shell 脚本和 cloud-init 指令。您还可以将这些数据作为纯文本、文件(这对于通过命令行工具启动实例很有用)或 base64 编码文本(用于 API 调用)传递到启动向导。
如果您对更复杂的自动化场景感兴趣,请考虑使用 AWS CloudFormation 和 AWS OpsWorks。有关更多信息,请参阅 AWS CloudFormation 用户指南和 AWS OpsWorks 用户指南。
我自己尝试过,这真的很容易 - 我花了大约 20 分钟,包括创建几个实例进行测试和编写。
进入 IAM 并创建一个新的 IAM 角色,或者如果您已经为 EC2 实例分配了一个角色,请编辑当前角色。确保该角色允许对 S3 进行只读访问 - 只需按照向导进行操作即可。如果您愿意,可以使用自定义角色来允许访问特定存储桶。
创建一个新的启动配置,它执行两项操作:
- 指定此 IAM 角色
- 在 advance 下,在用户数据中有一个脚本。下面的脚本将任何文件和子文件夹从 s3 文件夹复制到新实例上的文件夹。我以图像的形式提供了该脚本,因为 SF 格式不正确。下面是缺少几个字符的文本版本。
/bin/bash - NB missing #1 at start of line
aws s3 cp s3://s3-bucketname/foldername/ /ec2-target-folder --recursive
您必须自己检查用户和权限,因为每个设置都不同。