如何使用云计算:部署简单 Web 应用到云服务
1. 流行的云服务
云服务以虚拟化的方式为用户提供计算资源,包括存储、网络和计算能力。不同云服务在管理界面和功能上存在差异,而应用部署流程也因所选云服务和应用复杂度的不同而有所区别。为了实现应用性能、成本节约、可用性等方面的提升,用户通常需要分析应用需求和可用云服务,进而设计合适的部署工作流程。下面介绍两种流行的云服务:
1.1 Amazon AWS
Amazon AWS 自 2006 年开始运营,是全球首个成功且规模最大的云服务提供商,提供最全面的云服务和用户友好的图形用户界面(GUI)。许多组织广泛采用 AWS 来托管其云应用,例如它是首个通过联邦信息安全管理法案(FISMA)中级认证的云服务提供商,并为美国政府机构提供服务。本书使用的 AWS 服务包括:
-
Amazon Elastic Compute Cloud (Amazon EC2)
:提供可调整大小的计算能力。
-
Elastic Block Store (EBS)
-
Amazon Simple Storage Service (Amazon S3)
:基于互联网的存储服务。
1.2 Windows Azure
Windows Azure 是微软的公共云服务,由 Windows Azure、SQL Azure、Windows Azure AppFabric 和 Windows Azure Marketplace 四部分组成。
-
Windows Azure
:是在微软数据中心的计算机上运行应用程序和存储数据的 Windows 环境。
-
SQL Azure
:基于云的关系数据库服务。
-
Windows Azure AppFabric
:用于在云或本地运行的应用程序的基于云的基础设施服务。
-
Windows Azure Marketplace
:用于购买基于云的数据和应用程序的在线服务。
此外,Windows Azure 还提供三种执行服务:
-
Virtual Machines (VMs)
:可根据标准镜像或自定义镜像按需创建 Windows 或 Linux 虚拟机,用于应用程序部署。
-
Web Site Service
:使用 Internet Information Services (IIS) 提供托管 Web 环境,云用户可以将现有的 IIS 网站迁移到 Windows Azure 网站,而无需启动虚拟机。
-
Cloud Services
2. 用例:简单 Web 应用
互联网上常见的应用类型是网站,Web 应用广泛用于向分布式用户发布地理科学应用。HTML 是 Web 应用的基础,下面以一个名为 Hello Cloud 的 Web 应用为例,展示如何将其部署到 Amazon AWS 和 Windows Azure。
2.1 HTML 设计
Hello Cloud 应用是一个简单的
index.html
文件,包含指向六个云服务或解决方案官方页面的链接:
<!DOCTYPE html>
<html>
<body>
<h1>Hello Cloud</h1>
<ul>
<li><a href="http://aws.amazon.com/">Amazon AWS</a></li>
<li><a href="http://www.windowsazure.com/en-us/">Windows Azure</a></li>
<li><a href="http://incubator.apache.org/cloudstack/">Apache Cloudstack</a></li>
<li><a href="http://www.eucalyptus.com/">Eucalyptus Cloud</a></li>
<li><a href="http://www.nimbusproject.org/">Nimbus</a></li>
<li><a href="http://opennebula.org/">OpenNebula</a></li>
</ul>
</body>
</html>
2.2 Web 服务器
将 Web 应用交付给浏览器需要 Web 服务器,本文使用三种 Web 服务器:
-
Apache HTTP server (httpd)
:互联网上最流行的 Web 服务器之一。
-
Apache Tomcat server
:Java Servlet 和 JavaServer Pages 技术的开源软件实现。
-
Microsoft Internet Information Services (IIS)
:微软为 Windows 开发的另一个流行 Web 服务器,IIS 7.5 支持 HTTP、HTTPS、FTP、FTPS、SMTP 和 NNTP。
3. 将 Web 应用部署到云服务
3.1 Amazon Web Services
通过 AWS 管理控制台或 Amazon EC2 AMI 工具,云用户可以请求基于预定义的 Amazon Machine Image (AMI) 启动一个实例,该实例可作为服务器计算机来部署应用程序。部署 Hello Cloud 应用到 Amazon EC2 平台的步骤如下:
graph LR
A[Sign up for Amazon AWS] --> B[Authorize network access]
B --> C[Launch an instance]
C --> D[Log in to the instance]
D --> E[Install and configure Web server]
E --> F[Transfer the Hello Cloud file onto the instance]
F --> G[Deploy the application]
G --> H[Create a new AMI from the running instance]
- 注册 Amazon AWS :需要一个 AWS 账户才能登录 Amazon EC2。用户可以访问 AWS 网页并点击“Sign Up”,按照账户创建向导完成账户创建。
-
授权网络访问
:
- 启用用户使用 SSH(Secure Shell)或 RDP(Remote Desktop)访问实例。
- 允许实例在特定端口接受 Web 流量。通过 AWS 管理控制台,用户可以选择 EC2 进入 EC2 仪表盘,在导航窗格中选择“Security Groups”创建安全组,并添加 SSH 和 HTTP 访问规则。例如,对于 SSH 规则,选择 SSH 并输入公共 IP 地址;对于 HTTP 规则,将源设置为 0.0.0.0/0 以允许任何地方的 HTTP 访问,添加规则后点击“Apply Rule Changes”。
-
启动实例
:
- 创建一个密钥对并保存到本地计算机,用于启动实例和登录实例。
- 选择一个带有 CentOS 6.3 的公共 AMI 来托管 Hello Cloud 应用。在 EC2 仪表盘点击“Launch Instance”按钮,通过 AWS 市场搜索可用的 CentOS AMI,输入“CentOS”作为关键字,选择官方 CentOS 6.3 x86_64 镜像,然后选择实例配置(如区域、实例类型、防火墙设置和密钥对)并点击启动。
-
登录实例
:
- 对于 Linux 或 Mac 操作系统,使用启动实例时创建的密钥对的公共密钥登录实例,命令如下:
$:chmod 400 ssh-keypair.pem
$:ssh -i ssh-keypair.pem username@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
其中,
ssh-keypair.pem
是公共密钥文件,“username”是登录 Linux 系统的账户名,Redhat Linux 系统默认账户名是“root”,Ubuntu 系统是“ubuntu”,如果 AMI 由 Amazon 准备,默认账户通常是“ec2-user”。
- 对于 Windows 机器,使用 PuTTY 连接实例。首先使用 PuTTYgen 将 Amazon 密钥对转换为私钥,然后在 PuTTY 中输入实例的 IP 地址,选择私钥,点击“Open”,输入“root”作为用户名登录实例。
5.
安装和配置 Web 服务器
:使用 Apache HTTP server (httpd) 部署 Hello Cloud 应用,在 CentOS 实例上执行以下命令:
$: yum install httpd
$: service httpd start
$: chkconfig httpd on
同时,需要配置防火墙以允许端口 80 的 Web 流量:
$: iptables -I INPUT -p tcp --dport 80 -j ACCEPT
$: service iptables save
-
将 Hello Cloud 文件传输到实例
:使用
scp
命令从大多数 Linux 和 Mac 计算机将文件传输到实例,例如:
$: scp -i myfirstkey.pem index.html ubuntu@ec2-54-235-3-170.compute-1.amazonaws.com:/root
对于 Windows 机器,使用 WinSCP 进行文件传输。安装 WinSCP 后,输入实例的 IP 地址、用户名和 PuTTYgen 生成的 ppk 私钥文件,点击“Login”建立 SFTP 会话,然后将文件从本地机器传输到 Amazon EC2 实例。
7.
部署应用程序
:在 httpd 的文档根目录
/var/www
下部署 Hello Cloud 应用,执行以下命令:
$: mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcomebak.conf
$: mv /root/index.html ./hellocloud /var/www/html
$: service httpd restart
部署后,可通过浏览器访问 EC2 URL 访问 Hello Cloud 应用。
8.
从运行的实例创建新的 AMI
:在 EC2 仪表盘右键点击运行的实例,选择“Create Image (EBS AMI)”。
3.2 Windows Azure
有两种方法在 Windows Azure 中创建简单的网站:使用虚拟机和使用网站服务。这里展示使用 Windows VM 和 IIS 部署 Hello Cloud 应用的步骤:
graph LR
A[Sign up for Windows Azure] --> B[Create a virtual machine]
B --> C[Authorize network access]
C --> D[Log in to the virtual machine]
D --> E[Turn on IIS]
E --> F[Transfer Hello Cloud files onto virtual machine]
F --> G[Deploy the Application]
G --> H[Capture an image of running instance]
- 注册 Windows Azure :访问 Windows Azure 网站注册账户,登录后可看到云管理界面,列出了各种 Windows Azure 服务。
-
创建虚拟机
:点击“Virtual Machines”标签,选择创建虚拟机,选择 VM 镜像(包括系统)、VM 大小和位置(选择靠近用户的位置以获得最高网络性能),输入密码和 DNS 名称,点击“Create Virtual Machine”,Windows Azure 将根据输入创建新的虚拟机。例如,如果 DNS 名称是“hellocloudtest”,网站域名将是
http://hellocloudtest.cloudapp.net
。 - 授权网络访问 :Hello Cloud 应用需要端口 80 来启用 Web 流量。在 Windows Azure 预览门户中导航到新创建的 VM,点击“ENDPOINTS”标签,点击“ADD ENDPOINT”按钮,将 TCP 协议的公共端口 80 开放为私有端口 80。
- 登录虚拟机 :虚拟机启动后,在 Windows Azure 门户中点击“Connect”按钮下载 RDP 文件进行连接。
- 开启 IIS :登录虚拟机后,在服务器管理器仪表板中添加角色和功能来开启 IIS 服务器。
- 将 Hello Cloud 文件传输到虚拟机 :用户可以直接在本地计算机和虚拟机之间复制、粘贴或拖放文件。
-
部署应用程序
:在虚拟机的
C:\inetpub\wwwroot
目录下创建一个名为“hellocloud”的文件夹,将 Hello Cloud 应用的主页复制到该文件夹。部署后,可通过浏览器访问虚拟机 URL 访问 Hello Cloud 应用。 -
捕获运行中的虚拟机的镜像
:
-
在虚拟机上运行
sysprep
。 - 在云管理界面关闭虚拟机。
- 点击云管理界面底部的“Capture”按钮捕获镜像,输入镜像名称并勾选“I have run Sysprep on the virtual machine”。
-
在虚拟机上运行
4. 结论与讨论
不同的云服务具有不同的管理界面和功能,但使用云服务部署简单 Web 应用有一些通用步骤:
graph LR
A[Sign up for the Cloud] --> B[Authorize network access]
B --> C[Launch an instance]
C --> D[Log in to the instance]
D --> E[Install and configure Web server]
E --> F[Transfer the application files to the instance]
F --> G[Deploy the application]
G --> H[Create an image of the running instance]
- 注册云服务 :这是几乎所有公共云和私有云的第一步。
- 授权网络访问 :用户需要授权 SSH 或 RDP 访问实例,并授权特定端口以允许 Web 流量。
- 启动实例 :使用云提供商或镜像市场的 VM 镜像启动实例,不同云服务提供不同的镜像,如 AWS 提供 AMI,Windows Azure 提供 VHD。
- 登录实例 :根据操作系统使用 SSH 或 RDP 登录运行中的实例。
- 安装和配置 Web 服务器 :登录实例后,设置 Web 服务器(如 httpd、Apache Tomcat 或 IIS)以部署应用程序。
-
将应用程序文件传输到实例
:可以使用
scp
命令或 WinSCP 进行文件传输。 - 部署应用程序 :将应用程序部署到运行中的实例。
- 创建运行中实例的镜像 :镜像可用于快速启动实例,AWS 中创建镜像,Windows Azure 中捕获镜像。
5. 总结
本文介绍了如何将应用程序部署到云服务。首先介绍了两种流行的云服务 Amazon AWS 和 Windows Azure,接着引入了一个简单的 Web 应用 Hello Cloud,然后详细说明了将该应用部署到 Amazon AWS 和 Windows Azure 的步骤,最后总结了部署应用程序到云服务工作流程中的通用步骤。
6. 问题解答
以下是一些常见问题及解答:
1.
在 Amazon AWS 上终止和停止实例有什么区别?如果不再需要实例,如何在 AWS 上清理它?
- 终止实例会永久删除实例及其数据,而停止实例只是暂停实例的运行,数据仍然保留。要清理不再需要的实例,可在 EC2 控制台选择实例并点击“Terminate”。
2.
在 Windows Azure 上关闭和删除虚拟机有什么区别?
- 关闭虚拟机只是停止其运行,数据和配置仍然保留;删除虚拟机则会永久移除虚拟机及其相关资源。
3.
在 Amazon EC2 和 Windows Azure 上部署简单 Web 应用的通用步骤是什么?有什么区别?哪个对你来说更方便?
| 云服务 | 通用步骤 | 区别 |
| ---- | ---- | ---- |
| Amazon EC2 | 注册、授权网络访问、启动实例、登录实例、安装配置 Web 服务器、传输文件、部署应用、创建 AMI | 使用 AMI,需使用特定命令和工具进行操作 |
| Windows Azure | 注册、创建虚拟机、授权网络访问、登录虚拟机、开启 IIS、传输文件、部署应用、捕获镜像 | 使用 VHD,部分操作可通过图形界面完成 |
哪个更方便取决于个人的技术背景和偏好。如果熟悉 Linux 系统和命令行操作,Amazon EC2 可能更方便;如果更习惯 Windows 环境和图形界面操作,Windows Azure 可能更合适。
4.
如何在 EC2 和 Azure 上授权网络访问?
-
EC2
:通过 AWS 管理控制台,在 EC2 仪表盘的安全组中添加 SSH 和 HTTP 等访问规则。
-
Azure
:在 Windows Azure 预览门户中,导航到 VM 并点击“ENDPOINTS”标签,添加端点开放特定端口。
5.
EC2 中密钥对的作用是什么?
密钥对用于启动实例和登录实例,确保只有拥有正确密钥的用户才能访问实例。
6.
云计算中的实例镜像是什么?实例和镜像有什么关系?
- 实例镜像是一个包含操作系统、应用程序和配置的模板,用于创建新的实例。实例是基于镜像启动的运行实体,一个镜像可以创建多个实例。
7.
如何构建镜像?
- 在 Amazon EC2 上,可在运行的实例上进行所需的配置和安装,然后在 EC2 仪表盘右键点击实例,选择“Create Image (EBS AMI)”。
- 在 Windows Azure 上,先在虚拟机上运行
sysprep
,关闭虚拟机,然后在云管理界面点击“Capture”按钮捕获镜像。