使用 Amazon EC2 和 Ubuntu 将您的服务器置于云端

作者:Bill Childers

如今,云服务风靡一时,尽管我的一些《Linux Journal》同事听到我这么说可能会嗤之以鼻。云服务是一个模糊的术语,可以指从完全托管的服务(如 Gmail)到虚拟化的、租赁的服务器,例如 Amazon 的 EC2 服务提供的那些。而后者是本文的主题。最近,随着 Ubuntu 9.10 (Karmic Koala) 的问世,Canonical 添加了对预置 Amazon EC2 镜像的支持。这使得快速轻松地启动您自己的个人云服务器成为可能,尽管不一定经济实惠(有关 EC2 的快速成本细分,请参阅“Amazon EC2 经济学”侧边栏)。

《Ubuntu EC2 入门指南》(请参阅“资源”)应该是您的第一站。本文档指导您完成创建自己的 EC2 实例的过程。在您可以使用 EC2 做任何事情之前,您需要设置一个 Amazon EC2 账户。转到“资源”部分中列出的 URL,然后使用您现有的 Amazon 账户登录或创建一个新账户。然后,单击 EC2 链接并注册 EC2 服务。您需要提供信用卡用于账单结算。完成此操作后,选择感谢页面上显示的“创建 X.509 证书”链接。选择“是”以创建新证书,然后将您的证书和私钥下载到您的硬盘。最后,记下您的 AWS 账户 ID 号码,因为您稍后可能需要它。

现在您已经拥有了 Amazon 账户并注册了 EC2 计划,是时候在您的本地系统上开始安装管理工具了。如果您正在运行 Ubuntu,只需键入 sudo apt-get install ec2-api-tools 即可下载 EC2 管理工具。您还需要 Sun 1.6 JDK(可以通过 sudo apt-get install sun-java6-jdk 安装)。如果您使用的是其他发行版或 Mac OS X,您可以通过本文“资源”部分中的链接获取工具集。这些工具只不过是一个包含 Java 二进制文件和 shell 脚本的 .zip 文件,因此它们具有相当的可移植性。

现在您已经有了工具,下一步是编辑您的环境变量。只需将以下行添加到您的 ~/.bashrc 文件即可(确保编辑路径和文件名以适合您自己的设置)

export EC2_PRIVATE_KEY=$HOME//pk-XX.pem
export EC2_CERT=$HOME//cert-XX.pem
export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre
要测试这些工具,请从新终端运行以下命令
ec2-describe-images -o self -o amazon
您应该收到 Amazon 发布的所有公开可用的 EC2 镜像的列表。

由于 Ubuntu EC2 镜像是公开可用的,因此您需要生成一个 SSH 密钥才能访问它们。在您的本地计算机上通过运行以下命令来执行此操作

ec2-add-keypair ec2-keypair > ec2-keypair.pem
确保该文件的权限对于您的用户是读写,对其他任何人都没有访问权限(chmod 600 ec2-keypair.pem)。

现在您已经完成了基础工作,您已经准备好在云端启动您的第一个 Ubuntu 9.10 实例。ec2-run-instances 命令将为您启动您的实例,但您需要向其提供 AMI ID 和您的密钥对。AMI ID 只是与已发布的 EC2 镜像关联的唯一标识符。因为我想为此示例实例化“小型” Ubuntu 9.10 EC2 镜像,所以我使用“ami-52be5d3b”AMI ID。本文的“资源”部分提供了指向公开可用的 Ubuntu 9.10 镜像及其 AMI ID 的链接。一旦您运行 ec2-run-instances 命令,您将看到类似于以下的输出

$ ec2-run-instances ami-ab15f6c2 \
                    --key ec2-keypair --instance-type m1.small
RESERVATION  r-d8b376b0  748502897232  default
INSTANCE     i-bc9913d4  ami-ab15f6c2 \
                 pending     ec2-keypair  0 \
                 m1.small    2009-11-02T22:23:12+0000 \
                 us-east-1d  aki-76be5d1f  ari-4cbe5d25
实例可能需要几分钟才能启动(在上面的输出中显示为“pending”状态),特别是如果这是您的第一个实例。要检查您的实例的状态,您可以运行 ec2-describe-instances 命令。当您的实例正在运行时,您将看到类似于以下的内容
$ ec2-describe-instances
RESERVATION  r-d8b376b0  748502897232  default
INSTANCE     i-bc9913d4  ami-ab15f6c2 \
                 ec2-72-44-62-167.compute-1.amazonaws.com \
                 domU-12-31-39-00-ED-A3.compute-1.internal \
                 running     ec2-keypair  0 \
                 m1.small    2009-11-02T22:23:12+0000 \
                 us-east-1d  aki-76be5d1f    ari-4cbe5d25
输出中的“running”标签表示该实例已启动并正在运行。还列出了面向 Internet 的 DNS 名称以及面向内部的 Amazon DNS 名称。默认镜像运行了 SSH,但 EC2 防火墙规则拒绝入站端口 22 访问。要启用对 EC2 实例的 SSH 访问,您需要运行 ec2-authorize default -p 22。完成此操作后,您可以使用之前生成的 SSH 密钥 ssh 到您的实例
$ ec2-authorize default -p 22
GROUP       default
PERMISSION  default  ALLOWS  tcp  22  22  FROM  CIDR  0.0.0.0/0

$ ssh -i ~/.ec2/ec2-keypair.pem \
         ubuntu@ec2-72-44-62-167.compute-1.amazonaws.com
Linux domU-12-31-39-00-ED-A3 2.6.31-300-ec2 #3-Ubuntu SMP \
      Sat Sep 26 10:31:44 UTC 2009 i686

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

 System information as of Mon Nov  2 22:45:44 UTC 2009

 System load: 0.0             Memory usage: 1%  Processes:       56
 Usage of /:  7.6% of 9.92GB  Swap usage:   0%  Users logged in: 0

...

ubuntu@domU-12-31-39-00-ED-A3:~$
此时,您的实例已准备好让您开始配置您选择在其上运行的任何软件。因为它本质上是一台 Ubuntu 机器,所以管理和软件包管理就像您习惯的系统上一样完成(假设您使用 Ubuntu)。您只需使用 apt-get 即可!

作为一个示例,我将快速运行一个 Apache 服务器。首先,我通过运行 sudo apt-get update 更新实例上的 apt 索引。接下来,我通过运行 sudo apt-get install apache2 在实例上安装 Apache。Apache 已安装并使用默认的 Ubuntu 配置运行。但是,我实际上无法从我的桌面访问 Web 服务器,因为端口 80 和 443 被 EC2 防火墙禁止。我快速执行 ec2-authorize default -p 80,现在我本地机器上的 Firefox 可以访问我刚刚在 EC2 实例上安装的 Web 服务器,如图 1 所示。它不是最令人兴奋的网页,但它总归是网页!

图 1. 我的 Web 服务器在云端!

最后但并非最不重要的一点是,您需要在不使用实例时终止或关闭它们以节省资金。这可以通过 ec2-terminate-instances 命令完成。只需使用您的实例的 ID 号(可以通过 ec2-describe-instances 命令确定)运行它,您的实例就会终止

$ ec2-describe-instances
RESERVATION  r-d8b376b0  748502897232  default
INSTANCE     i-bc9913d4  ami-52be5d3b \
                 ec2-72-44-62-167.compute-1.amazonaws.com \
                 domU-12-31-39-00-ED-A3.compute-1.internal \
                 running     ec2-keypair  0 \
                 m1.small    2009-11-02T22:23:12+0000 \
                 us-east-1d  aki-76be5d1f  ari-4cbe5d25

$ ec2-terminate-instances i-bc9913d4
INSTANCE        i-bc9913d4      running shutting-down
就这样。感谢 Canonical 和 Amazon,您可以在“云端”运行自己的服务器。这当然比安装您自己的操作系统要快得多,而且不需要物理设备,也不需要购买任何东西。EC2 实例可能是扩展您自己的计算平台、按需为服务提供容量或使您能够启动替换服务器的绝佳方式。无论您将 EC2 用于什么,请记住每小时的费率,否则您可能会在月底收到意外的账单。

Amazon EC2 经济学

Amazon 的服务器按小时定价,每小时实例都在运行。基准服务器,也称为“小型”配置,基本上是一台 Xen 虚拟机,具有 1.7GB RAM、一个 CPU 核心(衡量标准为一个 EC2 单元,约 1.7GHz CPU)和 160GB 存储空间。“大型”配置为 7.5GB RAM、两个核心(每个核心有两个 EC2 单元)和 850GB 存储空间。小型实例每小时 0.085 美元,大型实例每小时 0.34 美元。Amazon 还对发送和接收的数据收费。传入数据按每 GB 0.10 美元收费,传出数据按每 GB 0.17 美元收费。更大的计划适用于计算密集型应用程序,但这些计划的成本甚至更高。这意味着平均小型实例的运行成本可能约为每月 70 美元,而大型实例的运行成本约为每月 250 美元。当然,这也取决于消耗的带宽量。虽然每月成本有点贵,但没有安装费用、设备维护成本或运行此解决方案所需的资本支出。EC2 不是一种通用的解决方案,但它可能对某些应用程序有意义。

我如何准确计算我的成本?

要准确计算 EC2 实例的成本相当困难,因为它取决于带宽等因素。但是,您可以安装一个小型仪表板式应用程序,它可以帮助您跟踪您的成本。byobu 包(以前称为 screen-profiles)可以提供帮助。在 apt-get byobu 并运行 byobu 后,您将获得一个屏幕会话,终端窗口底部有一个小的两行仪表板。要添加 EC2 信息,请按 F9 键调出 byobu 菜单,选择“切换状态通知”,然后选择 ec2_cost 通知程序,然后按“应用”。然后,您将获得一个清晰的小型运行总计,显示您的 EC2 实例的大概成本,如图 2 所示。您可以看到这次运行花费了我 40 美分!Byobu 还有各种其他有用的小部件;如果您通过终端进行大量管理,请查看一下。

图 2. 积少成多

资源
加载 Disqus 评论