我想构建一个 Java Web 应用程序并将其部署在EC2上。它将用 Java 编写并使用 MySQL。我希望获得有关实际部署过程和配置的一些指示。特别是我对以下主题感兴趣:
- 机器图像(DIY 与现成的)
- mysql复制和备份到S3
- 在不中断的情况下将应用程序部署和重新部署到EC2的方法
- 防火墙?
- 负载均衡和自动缩放
- cloudtools(或替代工具)
我想构建一个 Java Web 应用程序并将其部署在EC2上。它将用 Java 编写并使用 MySQL。我希望获得有关实际部署过程和配置的一些指示。特别是我对以下主题感兴趣:
我只能从经验中谈谈你的几个讨论点。我不得不删除各种亚马逊产品的超链接,因为我是 Stackoverflow 的新手,没有足够的代表发布多个链接。
机器映像:虽然您当然可以从自己的机器映像开始,然后使用 EC2 AMI 工具将其转换为 AMI,但我更喜欢从 Amazon 的一个现成映像开始并对其进行自定义以满足我的需要。这里的好处是你已经知道基础镜像会部署,你更有可能在论坛或 EC2 工作人员那里获得帮助,而且你不必费力设置物理机或您自己的虚拟机,以便捆绑图像并上传。如果您使用的是 EC2 API 工具,您可以使用ec2-describe-images -o amazon
.
MySQL 复制和备份:查看新的(ish)亚马逊关系数据库服务。它旨在与 MySQL 一起使用,可以执行自动备份,并且可以轻松扩展。
防火墙:使用 API 工具可以轻松处理实例的防火墙。例如,您可以创建一个组,
ec2-add-group condor –d “Condor Workers”
为该组设置防火墙规则(不好的例子 - 打开 CIDR 范围的所有 UDP 和 TCP 端口),
ec2-authorize condor -P tcp -p 0-65535 -s 129.127.0.0/16
ec2-authorize condor -P udp -p 0-65535 -s 129.127.0.0/16
然后将您的实例作为组的一部分启动,以便它们继承防火墙规则。
ec2-run-instances ami-12345678 –g condor –k mykeypair
棘手的部分是朝另一个方向发展——允许您的 EC2 实例与您的公司/学校/个人网络进行通信。由于您不知道您的实例在启动之前将拥有什么 IP(Amazon Elastic IP 可以在一定程度上缓解这种情况),您通常被迫允许 EC2 云的某些子网。
您还可以在您的实例上设置 Iptables 或其他防火墙。
负载平衡:考虑 Amazon Elastic Load Balancing。如果这不符合您的需求,您可以创建自己的“虚拟集群”并使用您喜欢的任何框架。