我需要进行一些维护,这涉及我的 EC2 生产服务器的停机时间。同时,我想提供一些用户友好的维护页面。
我能想到的最简单的解决方案就是获取一些简单的微型实例 AMI,在那里设置静态页面,并在维护期间将我们的公共弹性 IP 关联到该实例。
问题是:
(1) 有没有更简单的方法(即从 s3 提供一些静态页面,而不需要 EC2 实例)?[请注意,我不希望有任何 DNS 缓存延迟,我更喜欢像使用 ec2-associate-address 那样立即切换]
(2) 如果没有更简单的方法,那么从哪个 AMI 开始(以便它可以在微实例上运行并且最好从 EBS 启动,这样就可以轻松持久)?
更新:
为了记录,以下是我使用的解决方案:
- 从找到的任何 ami 创建微实例http://alestic.com/
- 安装 nginx:
sudo aptitude install nginx
- 现在你可以使用以下方式启动/停止/重新启动它
sudo /etc/init.d/nginx start/stop/restart
- 编辑 Nginx 配置文件
sudo pico /etc/nginx/nginx.conf
- 在该
include /etc/...
行中粘贴以下内容:
server { root /var/www/nginx-default; location / { if (-f $document_root/error503.html) { return 503; } } # error 503 redirect to error503.html error_page 503 @maintenance; location @maintenance { rewrite ^(.*)$ /error503.html break; }
- 创建页面(文件夹应该已经存在)
/var/www/nginx-default/error503.html
并删除/var/www/nginx-default/index.html
。 - 启动/重新启动 Nginx
sudo /etc/init.d/nginx start
- 现在您已完成,您可以使用它
ec2-associate-address YOUR-IP -i YOUR-INSTANCE-ID
在生产服务器和此维护页面服务实例之间映射您的公共 IP。
答案1
唯一最快的方法就是您已经提到的方法,即创建一个小型 AMI 并在其上托管一个静态维护页面,方法是将弹性 IP 附加到它。对于在这种情况下应该使用哪种 AMI,没有硬性规定。Debian/RHEL/Ubuntu 的任何微型实例都可以正常工作。
答案2
我猜想,如果您已经有第二个 Amazon EC2 实例,则只需重定向附加到目标实例的 Elastic IP,并将其附加到第二个 VM 即可,仅用于停机时间。 带有重定向规则的新 vhost 可以捕获对此维护页面的所有请求,这应该可以解决问题。