用 Amazon Web Services 进行云计算,第 3 部分:用 EC2 根据需要提供服务器
2010年12月25日
  Amazon EC2 Amazon Elastic Compute Cloud (EC2) 是 Amazon 提供的云计算环境的基本平台。通过使用 EC2,可以在任何时候根据个人或企业的需要简便地创建、启动和供应虚拟实例。根据实例的类型和每小时的实际使用量付费。虚拟服务器在 Amazon 数据中心的安全环境中运行。
  EC2 可以为 Web 范围的应用程序提供以下功能: 动态地配置计算需求。
  根据需要调整计算能力。
  在当今这个 Web 驱动的环境中,网站通信量可能一下冲到高峰(比如因为 Yahoo 主页上提到了您的网站),一小时后又落入谷底。现在,可以以弹性的方式快速地提高和降低计算能力。这个新的弹性计算模型提供一些非常有价值的特性:
  可靠性
  EC2 能够轻松地供应实例并在不再需要实例时销毁它们。
  简单性
  EC2 基于简单的概念,为系统设计提供很强的灵活性。Amazon 提供所需的所有构建块;可以根据自己应用程序的用例组合它们。
  安全性
  EC2 提供很高的安全水平。所有实例都在 Amazon 的数据中心中运行,还可以通过配置防火墙规则把访问限制在您信任的组。
  灵活性
  可以把实例放在不同的地理位置,使用生命周期独立于实例的持久存储卷,从而增强应用程序的灵活性。
  低成本
  EC2 服务以非常低廉的费率满足您的所有服务器需求。
  回页首
  框架 本节介绍支撑 EC2 框架的概念。
  Amazon Machine Images
  Amazon Machine Image (AMI) 是基于 Linux?? 的打包的服务器环境,可以运行您需要的任何软件或应用程序。它们是 EC2 提供的弹性计算环境的核心。当前的 EC2 版本支持基于 Linux 的 AMI,但是也初步支持使用 OpenSolaris 作为 EC2 环境中的操作系统:
  有三种机器映像: 私有的
  您创建的映像,在默认情况下是私有的。可以授权其他用户启动您的私有映像。
  公共的
  用户创建并发布到 Amazon Web Services 社区的映像,任何用户都可以基于它们启动实例,按照自己喜欢的方式使用它们。Amazon Web Services Developer Connection 网站列出所有公共映像。
  付费的
  可以创建提供特殊功能的映像,其他用户可以启动它们,但是要按照使用时间向您付费。
  Amazon 提供几个命令行工具,可以使用它们方便地创建和管理映像。映像本身存储在 Amazon Simple Storage Service (S3) 上。在向 EC2 注册映像时,给映像分配一个惟一的 ID,可以使用这个 ID 识别映像和从映像启动实例。有几种创建自己的映像的方法。可以以一个现有的公共映像为基础,按照以下步骤创建新的 AMI: 用自己的 SSH 密钥对从现有的 AMI 启动一个实例。
  通过 SSH 连接实例。
  根据自己的希望定制实例。
  使用 Amazon 的工具把正在运行的实例重新打包为新的 AMI。
  使用 Amazon 的工具把这个映像上传到 S3。
  使用 Amazon 的工具向 EC2 注册这个新的映像。
  从这个新的映像启动一个新实例,重新定制和重新打包,直到满意为止。
  另一种方法是使用 EC2 社区提供的脚本之一创建新的 AMI。可以使用脚本从头创建 AMI。流行的脚本包括: Eric Hammond 提供的基于 Ubuntu 和 Debian 的 AMI 创建脚本。可以使用他的网站上提供的预构建映像,也可以使用脚本从头创建映像。
  如果需要能够运行 Ruby on Rails 应用程序的映像,可以使用 Paul Dowman 提供的脚本创建基于 Ubuntu 的映像,这种映像可以在 EC2 上运行 Rails 应用程序。
  RightScale 提供基于 Ubuntu 和 CentOS 脚本,可以使用它们从头创建自己的映像。
  实例 实例 是使用 AMI 作为模板的正在运行的虚拟实例。可以使用 Amazon 提供的工具启动实例、查看实例的详细信息和终止实例。还可以使用用不同语言编写的许多第三方库控制实例的生命周期。 实例可以基于 32 位或 64 位平台,可以是以下类型之一。Amazon 还用 EC2 计算单位确定每个实例类型的级别。每个 EC2 计算单位 (ECU) 相当于一个 1.0-1.2 GHz 2007 Opteron 或 2007 Intel?? Xeon?? 处理器的处理能力。 小实例 (m1.small)
  1.7 GB 内存,一个 EC2 计算单位(一个虚拟核,一个 EC2 计算单位),160 GB 实例存储,32 位平台,中等 I/O 性能
  大实例 (m1.large)
  7.5 GB 内存,四个 EC2 计算单位(两个虚拟核,每个核两个 EC2 计算单位),850 GB 实例存储,64 位平台,高 I/O 性能
  超大实例 (m1.xlarge)
  15 GB 内存,八个 EC2 计算单位(四个虚拟核,每个核两个 EC2 计算单位),1,690 GB 实例存储,64 位平台,高 I/O 性能
  中等实例 (c1.medium)
  1.7 GB 内存,五个 EC2 计算单位(两个虚拟核,每个核 2.5 个 EC2 计算单位),350 GB 实例存储,32 位平台,中等 I/O 性能
  超大实例 (c1.xlarge)
  7 GB 内存,20 个 EC2 计算单位(八个虚拟核,每个核 2.5 个 EC2 计算单位),1,690 GB 实例存储,64 位平台,高 I/O 性能
  因为根据使用实例的实际时间付费,所以很容易根据应用程序当前的负载提高或降低计算需求。不需要提前保留大量计算能力。
  安全组
  在 EC2 环境中启动的所有实例都在一个安全组中运行。每个安全组定义自己的防火墙规则,为在组中运行的实例指定访问限制。可以根据 IP 地址或无类域间路由 (CIDR) 规则授予或限制访问权,CIDR 规则允许指定端口范围和传输协议。还可以控制对指定的安全组的访问,从而自动地允许或拒绝这些安全组中运行的所有实例访问您的实例。
  安全密钥对 安全密钥对是在启动实例时指定的公共/私有 SSH 密钥对。必须提供安全密钥对,才能登录启动的实例的控制台。EC2 把密钥对的公共部分添加到启动的实例中,然后用户可以使用私有密钥通过 ssh 登录实例。 安全密钥对不同于 Amazon Web Services 访问键 ID 和安全密钥;后者可以从 account information page 上获得,用于在使用 API 向 Amazon Web Services 发出请求时惟一地识别用户。安全密钥对主要用于让用户能够安全地登录实例,而不需要使用密码。
  可用区(Availability zones)
  EC2 由位于不同地理位置的多个数据中心组成,这有助于应对故障。可以把自己启动的实例放在不同的位置。位置是地理区域,其中包含可用区。当前的 EC2 版本允许访问美国东部的一个区域,其中有三个可用区。Amazon 对一个区域中的每个可用区采取隔离措施,从而避免一个可用区中的故障影响其他可用区。
  通过在不同的可用区中启动实例,可以避免应用程序受到在单一位置发生的故障的影响。如果在启动实例时没有指定可用区,Amazon 会根据当前的系统健康状态和能力自动选择可用区。
  弹性 IP 地址
  在 EC2 启动实例时,自动地为每个实例分配一个私有 IP 地址和一个公共 IP 地址。当然,可以使用公共 IP 地址通过 Internet 访问实例。但是,在每次启动实例时,这个地址都会变。如果使用某种动态 DNS 映射把 DNS 名称连接到 IP 地址,那么把变化传播到整个 Internet 花费的时间可能长达 24 小时。为了解决这个问题,EC2 引入了弹性 IP 地址的概念。弹性 IP 地址是与您的 EC2 账户相关联的静态 IP 地址,而不是与实例相关联;除非显式地把它释放回 EC2,它会一直与您的账户相关联。
  还可以在实例之间重新映射弹性 IP 地址。因此,在任何实例出现故障时,只需启动另一个实例并重新映射它(或使用现有的实例),从而快速响应实例故障。在任何时候,只能有一个实例映射到弹性 IP 地址。
  Elastic Block Store (EBS)
  EBS 是 Amazon 创建的新型持久存储,可以用它创建卷,然后把卷作为块级设备连接到正在运行的一个实例。还可以从这些卷创建快照,以后可以从快照重新创建卷。每个快照代表 一个卷在一个特定时间点的状态。一些文件和数据需要超过实例寿命的长期持久化;可以把它们存储在 EBS 卷上,然后可以把卷连接或重新连接到任何实例。
  注意,在任何时候每个 EBS 卷只能连接到一个实例。但是,一个实例可以同时连接任意数量的卷。每个 EBS 卷位于一个可用区中。卷连接的实例必须在同一个可用区中。一个账户只能有最多 20 个 EBS 卷,但是如果需要使用更多的卷,可以 请求 Amazon Web Services 提高限额。 回页首
  EC2 入门 要想开始使用 EC2,首先需要创建一个 Amazon Web Services 账户 。 本系列的 第 2 部分 详细介绍了如何创建 Amazon Web Services 账户。创建账户之后,必须按照以下步骤为账户启用 Amazon EC2 服务: 登录 Amazon Web Services 账户。
  导航到 Amazon EC2 。
  选择页面右边的 Sign Up For This Web Service 。
  提供必需的信息并完成注册过程。
  与任何 Amazon Web Services 的所有通信都要通过 SOAP 接口或查询/REST 接口。在本文中,将使用查询/REST 接口与 EC2 通信。需要获得自己的访问键,可以通过在 Web Services Account information 页面上选择 View Access Key Identifiers 获得访问键。
  现在设置了 Amazon Web Services 并为账户启用了 EC2 服务。 回页首
  与 EC2 交互 对于这个示例,我们使用 Amazon 提供的命令行工具和第三方开放源码 Ruby 库 right_aws 与 EC2 交互。在本文中,我们要: 设置本地 EC2 开发环境。
  启动一个现有的 AMI。
  定制 AMI 以安装 right_aws 库和所需的其他软件。
  重新打包 AMI,把 AMI 上传给 S3,然后注册它。
  启动新的定制 AMI。
  通过在 Ruby shell 中运行代码片段熟悉 right_aws API。
  设置本地 EC2 开发环境
  Amazon EC2 工具需要 Java?? 技术 ,所以要安装 Java。 下载 Amazon EC2 AMI Tools 和 Amazon EC2 API Tools 。
  把工具存档文件解压到您选择的目录中。
  需要设置一些环境变量并把工具目录添加到 shell 路径中,这样就可以在执行命令行命令时找到它们。清单 1 给出一个示例。
  下面的命令针对 Linux。如果您使用 Microsoft?? Windows??,可以改用等效的命令。可以从 account information page 下载 EC2 X.509 证书和 EC2 私有密钥文件。 清单 1. 设置 EC2 开发环境
  $ export EC2_HOME=path_to_the_directory_with_the_tools
  $ export JAVA_HOME=path_to_the_directory_with_your_java_sdk
  # Add the directory to your PATH
  $ export PATH=$PATH:$EC2_HOME/bin
  # Export variables with the paths to your private key file and X.509 certificate
  $ export EC2_PRIVATE_KEY=path_to_your_private_key
  $ export EC2_CERT=path_to_your_x509_certificate
  运行以下命令列出 EC2 命令行工具的版本,从而确认所有设置都是正确的。
  清单 2. 检查设置
  $ ec2-ami-tools-version
  1.3-20041 20071010
  需要创建在命令行 shell 中启动和连接实例所需的 SSH 密钥对。清单 3 中的命令创建一个新的密钥对,然后在屏幕上显示密钥对的名称、它的指纹和私有密钥数据。
  清单 3. 创建新的 SSH 密钥对
  $ ec2-add-keypair devworks
  KEYPAIR devworks 29:d1:90:7b:3d:a4:99:52:41:e0:1f:21:d5:20:97:d3:f0 :33:fd:76
  -----BEGIN RSA PRIVATE KEY-----
  MIIEowIBAAKCAQEAyxaeXt6nb+qzboVW/3ax7An8CUJjDqwNi/ PZm4lGOAzOHGnuPlDXeh1GpJ9f
  hky7Bg6VEY2VfS5G6UtmIzsGf/JlquzVl/x3uyriOzeCIw+m07 aSgUOBn3qW/74IZxYYkxCYdBci
  eZeKpr8Mpvuz2sfurRzQOkUeHyuEaiD1RRS7DGxxUXfpVYhGjP ltfNW2xRSMLTaOZzRwRdS0cHUU
  hC+GOKFDkp8nqQpd8iGUtp2G2DI1pxRN4MbeFZHWMh5tcIo1NT c7pkFPGEwrq6pO6gIsEOLqGpTL
  +2AxJY5WToZQoTWieOVwLpjJU9fnufRs0Mt/M/TP6SGK/YkrQO prOwIDAQABAoIBAFj1UGvX9dnl
  IbHAwInoUSlGelsH9GIB5XEvYFtr9xEoMsRpdk1flfNMjZwgn3 Qxeh6+Fnf438lUkwUv3M6D1WYI
  JJaJZUpM8ZlPwIcV2nBHM9k6+NOcYVQdG7VsZTvahusscssvMw +13KsLtpwSVwb3WsoDfAZ6LiaT
  Jk5in20hTiipC0pz0K9DgQ//76r20ysUFpCymj4EvQrRkk5kBt siMixsJzimpUOrSmrRHcORKEin
  FKM6y/DFE33zhP8BNDQRaDLGni0Ip+/jP3EHmia41SSbnwzRcb XMfH5fL3KAyRsCE0ocHY+cjUng
  HPYxl1ffdLZuEW3wJDQFuTS/v4ECgYEA9r7HVVnrS2303zclzC TGen/W/SVbpflSKEYJOZpa8RtQ
  uFMOewfkTbBzfavLMVBYB8uAmcWIz5JAFSzlBaKDRCnouUeeDi DJVJd8Asbn1gCE8UVETUOthy50
  R90RTtPNMmyP7AnoSMTuzsbwVORus7IJvceWHQBB4KCh652Uan sCgYEA0rSmvdquidkXf5iFpebc
  6Wh/qy+L1dkgz7+HTZIMW7kxA4EfJFnqaQRPqJ5XYcLvk2IzxN QKJlZvtBhCfVYhPJ2uB2Yqxv0p
  0LXGC01fZSyhbYGfaxVymA3HMc2ULBbaFMyhO7l7zkz+G+qkyl ych59zJBSoUxSFStpgNL7NhkEC
  gYAPJIorLMeJ64eZo1LIgoFDx1C0XHSRbQmjuxiZ1mU6YsjDZy V+W2+hbPDJh5+CuUGNyOlthnfs
  9TbFlenAPMb9iezkYgbLKyvv6xQLP5W+xm1iOTQF4d9mam1sc5 66TblMHOmAPONqg9t8CS16qEI6
  +PQsF3GY+gkQ9gq54QPYvQKBgDgwjsrQd30xVI/lV7a/Uyg3gt xe6JaVuadNN0LbcMpBH64EkA58
  oANzb97SoxDiEEuog4+40CAbKtzHH2wXPPPSROeaOkwolS8gWn kHICp19XKjf6Tp6k5cVkOUxC/h
  xDSJwXGQ7FA+vgEp2NpSSjfssKLtk1ncfhNRGxjVzS9BAoGBAL bBLS4Nbjs2Fco+okNQPNfJNSvW
  yWV7a6ngfRzW8B+BO6V1QRIR44bwv/Z74oQ7ttt8KoZENB5yzZ waVWpFlOjSO/4Nx++Ef4pY5aPS
  zNpXcXCZgUdA67qmOILvrG7bnDR60dcBZVBl7CjnpTlccg7MD4 CBsFJx+hGRPD2yIV94
  -----END RSA PRIVATE KEY-----
  把输出中从 -----BEGIN RSA PRIVATE KEY----- 开始的部分保存到一个本地文件中。这就是启动实例和用 SSH 访问实例所用的私有密钥。一定要保证这个文件不被泄露,不丢失。如果使用这个密钥启动一个实例,以后丢失了密钥,就无法再使用 shell 连接它。把密钥文件命名为 pk-devworks ,修改文件的权限以提高安全性。
  清单 4. 修改私有密钥文件的权限
  $ chmod 600 pk-devworks
  现在,开发环境已经设置好了。
  启 动第一个实例 现在,从 RightScale 提供的一个基于 CentOS 的公共映像启动第一个实例。这个映像的 AMI ID 是 ami-d8a347b1 。 清单 5. 启动实例
  $ ec2-run-instances k devworks -n 1 ami-d8a347b1
  RESERVATION r-2691404f 710193521658 default
  INSTANCE i-7f923516 ami-d8a347b1 pending
  devworks 0 m1.small 2008-09-07T18:05:34+0000
  us-east-1c aki-9b00e5f2
  刚启动的实例总是处于 pending 状态。因为这个实例仍然处于启动过程中,所以还不能访问它。在这种状态下,可以查看这个实例的相关信息: 启动时间 - 以 UTC 形式显示的实例启动时间。
  实例类型 - 在启动时没有指定实例类型,所以 EC2 自动选择默认的 m1.small 实例。
  可用区 - 在启动时没有指定可用区,所以 EC2 根据当前的系统健康状态和可用性选择一个可用区。
  内核 - 还显示这个实例使用的 Linux 内核。可以在启动时指定内核,也可以为 AMI 预先配置默认内核。
  安全组 - 这个实例放在 default 安全组中。可以创建安全组,向它们授予访问权限,把实例放在这些组中。必须在启动时指定安全组。实例启动之后,就无法改变组名,但是可以改变授予组的权 限。
  现在,可以列出正在运行的实例,检查它们当前的状态。 清单 6. 列出实例
  $ ec2-describe-instances
  RESERVATION r-2691404f 710193521658 default
  INSTANCE i-7f923516 ami-d8a347b1 ec2-67-202-28-68.compute-1.amazonaws.com
  domU-12-31-38-00-34-C8.compute-1.internal running devworks 0
  m1.small 2008-09-07T18:05:34+0000 us-east-1c aki-9b00e5f
  可以看到实例正在运行,还可以看到关于实例的更多信息,比如: 公共 DNS 名称 - 可以使用这个 DNS 名称通过 Internet 连接这个实例。
  私有 DNS 名称 - 这个 DNS 名称用于在 Amazon 数据中心环境中的 EC2 本地网络中解析这个实例。
  使用 SSH 连接第一个实例
  现在可以使用 SSH 连接实例,这需要使用私有密钥和实例的公共 DNS 名称。 清单 7. 使用 SSH 连接实例
  $ ssh -i pk-devworks root@ec2-67-202-28-68.compute-1.amazonaws.com
  The authenticity of host 'ec2-67-202-28-68.compute-1.amazonaws.com (10.252.59.54)'
  can't be established.
  RSA key fingerprint is ae:e5:00:54:75:65:1c:c5:44:53:72:b9:e0:b5:26:a9.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'ec2-67-202-28-68.compute-1.amazonaws.com,10.252.5 9.54'
  (RSA) to the
  list of known hosts.
  
  在登录之后,可能会看到一条错误消息,但是可以不理会它。这个 AMI 在启动之后要运行一些定制的 RightScale 脚本,但是没有找到它们。
  定 制实例和重新打包
  RightScale AMI 非常全面,包含基本映像所需的所有内容。它已经包含安装在 /home/ec2 目录中的 EC2 命令行工具。 添加安全证书。使用 清单 1 中使用的文件。
  清单 8. 把证书复制到实例中
  $ scp -i pk-devworks path_to_your_private_key_cert
  root@ec2-67-202-28-68.compute-1.amazonaws.com:/hom e/ec2/
  $ scp -i pk-devworks path_to_your_x509_cert
  root@ec2-67-202-28-68.compute-1.amazonaws.com:/hom e/ec2/
  设置环境变量,从而使用它作为自己私有的 EC2 映像。编辑 /etc/profile.d/env.sh 文件并设置每个变量。账号和访问键可以从 Web services account information 页面获得,证书和私有密钥是前一步中复制到实例的文件。
  清单 9. 定制实例环境
  $ vim /etc/profile.d/env.sh
  export EC2_HOME=/home/ec2
  export EC2_CERT=
  export EC2_PRIVATE_KEY=
  export AWS_ACCOUNT_NUMBER=
  export AWS_ACCESS_KEY_ID=
  export AWS_SECRET_ACCESS_KEY=
  export PATH=$PATH:/home/ec2/bin/
  # Turn off the rightscripts so you don't get the error on login.
  $ chkconfig --level 4 rightscale off
  # Change the login message
  $ echo "Welcome to my devworks test EC2 image" > /etc/motd
  这个映像已经安装了 Ruby,但是需要安装本文后面与 EC2 交互时要使用的 Ruby 库。首先,更新安装的 gems,然后安装 right_aws gems 和所需的所有依赖项。
  清单 10. 安装 Ruby gems
  $ gem update
  $ gem install right_aws
  现在可以重新打包这个实例,把它上传给 S3,向 EC2 注册它。首先,用名称 devworks-ec2 重新打包它,忽略 /mnt 和 /tmp 文件夹。还必须指定 EC2 私有密钥、EC2 安全证书和 Amazon Web Services 账号。
  清单 11. 重新打包实例
  $ ec2-bundle-vol -d /mnt -c /home/ec2/your_ec2_x509_cert
  -k /home/ec2/your_ec2_private_key -u your_aws_account_number
  -e /mnt,/tmp -s 10240 -r i386 -p devworks-ec2
  重新打包过程将在 /mnt 目录中创建一批文件。把这些文件上传到 S3,它们组成新创建的 AMI。映像将放在您指定的 bucket 中。把以下命令中的 b 参数替换为您希望存储映像文件的 bucket 的名称。
  清单 12. 把映像上传到 S3
  $ ec2-upload-bundle -b your_s3_bucket -m /mnt/devworks-ec2.manifest.xml
  -a your_aws_access_key -s your_aws_secret_key
  您的 AMI 现在存储在 S3 中了。然后需要向 EC2 注册它,从而获得 AMI 的 ID,以后可以使用这个 ID 启动映像。
  清单 13. 向 EC2 注册映像
  $ ec2-register -K /home/ec2/your_ec2_private_key
  -C /home/ec2/your_ec2_x509_cert your_s3_bucket/devworks-ec2.manifest.xml
  IMAGE ami-58c42031
  退出 SSH 会话,终止正在运行的实例。
  清单 14. 终止实例
  $ ec2-terminate-instances i-7f923516
  INSTANCE i-7f923516 running shutting-down
  在下一节中,将从刚创建的 AMI 启动一个新实例,本文后面使用这个实例和 right_aws 库体验 EC2。 回页首
  用 Ruby 体验 EC2 RightScale 提供一个 Ruby 库 right_aws ,可以使用它从 Ruby 访问 Amazon 的 EC2 服务。他们自己的产品也使用这个经过充分测试的库,这个库覆盖 EC2 的所有方面,包括最近引入的 EBS。这个库和 HTTP 库 RightScale:HttpConnection 一起打包为一个 rubygem,具有健壮的重试和错误处理功能。本文只涉及这个库提供的一部分 EC2 功能。强烈建议您阅读库提供的文档,全面了解这个 API。您应该研究 right_aws 库和支持库 right_http_connection 的各个配置选项。 我们将使用 Rightscale::Ec2 类,它提供与 EC2 交互的主要接口。使用这个 Ruby 库的中介是 irb 控制台。把消息发送给 Rightscale::Ec2 对象,然后查看 EC2 返回的响应消息。这有助于熟悉 API 和体验 EC2 概念。 从新的 AMI 启动一个实例。实例处于运行状态之后,使用 SSH 连接实例。然后,开始在这个实例中使用 irb 控制台。
  清单 15. 启动新实例并使用 SSH 连接它
  $ ec2-run-instances -k devworks -n 1 ami-58c42031
  RESERVATION r-5795443e 710193521658 default
  INSTANCE i-1a9e3973 ami-58c42031 pending devworks 0
  m1.small 2008-09-07T21:06:37+0000 us-east-1c aki-9b00e5f2
  $ ec2-describe-instances
  RESERVATION r-949544fd 710193521658 default
  INSTANCE i-5a9d3a33 ami-58c42031
  ec2-75-101-208-95.compute-1.amazonaws.com
  domU-12-31-38-00-78-04.compute-1.internal
  running devworks 0 m1.small
  2008-09-07T21:14:27+0000 us-east-1c aki-9b00e5f2
  $ ssh -i pk-devworks root@ec2-75-101-208-95.compute-1.amazonaws.com
  启动 Ruby shell 并创建一个 Rightscale::Ec2 对象。
  清单 16. 启动 Ruby shell 并创建新的 Rightscale::Ec2 对象
  $ irb
  irb(main):001:0> require 'rubygems'
  => true
  irb(main):002:0> require 'right_aws'
  => true
  irb(main):003:0> @ec2 = Rightscale::Ec2.new(
  ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
  在此之后,使用刚创建的变量 @ec2 体验 EC2。这个示例使用库的默认配置。可用配置选项的列表见文档。 获取实例的列表,这会返回一组散列,提供每个实例的相关信息。这个库的几乎所有 API 调用都产生这种格式的响应。清单 17 给出一个示例。
  清单 17. 描述实例
  irb(main):004:0> @ec2.describe_instances()
  => [{:aws_launch_time=>"2008-09-07T21:14:27.000Z", :aws_kernel_id=>"aki-9b00e5f2",
  :ssh_key_name=>"devworks", :aws_reservation_id=>"r-949544fd",
  :aws_availability_zone=>"us-east-1c",
  :aws_state=>"running", :aws_instance_id=>"i-5a9d3a33", :aws_groups=>["default"],
  :aws_image_id=>"ami-58c42031",
  :aws_product_codes=>[], :dns_name=>"ec2-75-101-208-95.compute-1.amazonaws.c om",
  :aws_state_code=>"16",
  :private_dns_name=>"domU-12-31-38-00-78-04.compute- 1.internal",
  :aws_instance_type=>"m1.small",
  :aws_reason=>"", :ami_launch_index=>"0"}]
  获取映像的列表。
  清单 18. 描述映像
  irb(main):005:0> @ec2.describe_images_by_owner([ENV['AWS_ACCOUNT_NU MBER']])
  => [{:aws_location=>"ylastic_images/devworks-ec2.manif est.xml",
  :aws_kernel_id=>"aki-9b00e5f2", :aws_state=>"available", :aws_is_public=>false,
  :aws_architecture=>"i386", :aws_id=>"ami-58c42031", :aws_image_type=>"machine"}]
  创建一个安全组,可以使用它放置实例和限制或授予访问权。
  清单 19. 创建一个新的安全组并列出组
  irb(main):006:0> @ec2.create_security_group("devworks",
  "Devworks Article Security Group")
  => true
  irb(main):008:0> @ec2.describe_security_groups()
  => [{:aws_group_name=>"devworks", :aws_description=>"Devworks Article Security
  Group",
  :aws_perms=>[]}]
  创建一个新的安全密钥对并列出账户中的所有密钥对。
  清单 20. 创建新的安全密钥对并列出密钥对
  irb(main):018:0> @ec2.create_key_pair('mykeypair')
  => {:aws_key_name=>"mykeypair",
  :aws_fingerprint=>"c6:62:22:9e:99:05:6a:17:13:06:e0 :86:f9:55:2a:78:ff:99:6b:fa",
  :aws_material=>"-----BEGIN RSA PRIVATE KEY-----
  \nMIIEpAIBAAKCAQEAyRdAvihBXDu30o2uvQ1h8xdIRLHs0RjQ WK4Yw5Y5DkaS41EEjnDwjO6sEY5l\n
  IXSuzVj1nkZ1VMPuVR3hIXHCMJLaAO77TaXZVC9yymIUAyTcQ1 +hoVLlrCuVI3dEY21WQNTEbtkI\nlI
  xMW+UhkiaKrGHmt2yYLjr754KGt7pNCpRwxPXB7brlpQ3qpapk r7XrKZppvWoG8MCmPIFx8P0K\no8Cd
  mnF9lEdns6uaJZmfs4Ls9HZHpsmn0r42GbOAkJEkj7nE5zc3rX YpmCBZhjyHus0iXjS/n9oL\nHWhV0a
  wagjvmsQgJPYqEsBeO5pDb2IOZq5okQie1YJTd1m8k8k7m9wID AQABAoIBAQCK0lWssOem\nP8fAQHVg
  J+v1wJ3wZpBhLWsvvUh1RbCvzUK8UQL/PrKh6Ga7W/0u4nmGY6 J0mJmJYhWXhyATUZBI\nrih3uoOccC
  Eff/4T/y9nmDvC+zL+xtatTA0SRdTdeu6vpPLSv1uwCUbxrbXG SnszVAbNm9dXGvsq\nMK7GCYQEB4p4
  FtJolDqGZdWAj1u5/AGjbCI+PbkbCAro55Sqnl95WAlogdQFmg xljWl9TEIsbrHf\nYZHtKHlm1lvyeB
  QdVmwLT9S7ufI1J/GAevRxrG2iEkx/IJWYGnQE0P2bXa6Ry90U yvWRPS6Zi/MD\nfWoFAxnB6Ryssr+S
  IAfpG6SGuM55AoGBAOr7yPcvg/66f/Xd3CbpmI8lIfsXBb9xki 3pIEfYAWD/\n2ToxpRYPTgrwwB1ufo
  NPr7U1QfzJvAvlTXWkfp4oUnssi5sXw1okZmm01hT0j0FNvsgM G6zD8Z/9\nmgrVrH+tBxVoYqrPM/WB
  dnYhQXEGQq+UF2uPqoKDbsl3DkftXTBrAoGBANsTdLfHmRidkL CRKfSj\nUrbJOSsU6RWGFuoqgD+DZL
  ngKBTaBTd6TVONSR2JvpVJo5hyiAXQ/jQ1XtsPAuJR6fiiRvDf gF7j\n1lp1tsFpNYx2R4+eqoLrHgIC
  Ak1Ke8tWyoD3NgQ4FO9TDfW+QHn0dpLeWdNMUd2a1GVKp4hIoJ al\nAoGBAITqMryO5eyZ9XNPMQ3Zp+
  +gI15xoVCunu7VJOs+ZVlGnsrp9eVKdux9TU3YiDsiQdMP8ulX \n+sQHyg63It+3EyCVC8qIYHmGiV9V
  aJql0rovjbB+GNFabDwBKLbkMhRt/MnBJ75SQaOmvSkImomh\n 7up9q9mtg9cbHPlcHHnW65VNAoGAKi
  +Y7jrVVFQjJJ0PgzhgGSqug4lHSQnFJ9p/T7uxjcmIblt9\nXa 2Dbm9qgPGhbYX8psKHRvdzvAH6/hvp
  5kL31xUIrCGdyqf9AvZf9uaXlTDBnvpiw0sbQC+62b9a\nD1Hr NOJl2HIkNeG8cnHsYI+etbFzgqjTqu
  TBua+iiy/RHLECgYALIDqaAcd7o4V+ws+WG1G9vTlc\nJ6/sBp u3JyKMSdJYlbgIbvHgrfbKhEYuNh/H
  XNdrI6oeW9eAruqHlH+OlUx0tCg4VIeQsz/b7kPS\nY14OMAsw uHHyqlZIqK4Xy/R6SQmsc/CUXWPk5I
  UesJk5f1V1NXIqqwv6+nlEucdjgYUd5w==\n-----END RSA PRIVATE KEY-----"}
  irb(main):020:0> @ec2.describe_key_pairs()
  => [{:aws_key_name=>"mykeypair",
  :aws_fingerprint=>"c6:62:22:9e:99:05:6a:17:13:06:e0 :86:f9:55:2a:78:ff:99:6b:fa"}]
  创建一个新的 EBS 卷。指定这个卷的可用区为 us-east-1c 。 创建之后,这个卷只能连接到在同一可用区中运行的实例。卷最初处于 "creating" 状态。创建过程完成之后,卷将处于 "available" 状态。
  清单 21. 创建新的 EBS 卷并列出卷
  irb(main):024:0> @ec2.create_volume('', 1, 'us-east-1c')
  => {:aws_status=>"creating", :aws_created_at=>Mon Sep 08 00:29:35 UTC 2008,
  :zone=>"us-east-1c", :aws_size=>1, :snapshot_id=>nil, :aws_id=>"vol-2f34d146"}
  irb(main):026:0> @ec2.describe_volumes()
  => {:aws_status=>"available", :aws_created_at=>Mon Sep 08 00:29:35 UTC 2008,
  :zone=>"us-east-1c", :aws_size=>1, :snapshot_id=>nil, :aws_id=>"vol-2f34d146"}
  把这个卷作为块设备 /dev/sdj 连接到当前实例并用 ext3 文件系统进行格式化,这样就可以实际使用它了。
  清单 22. 连接新的 EBS 卷并建立文件系统
  irb(main):031:0> @ec2.attach_volume('vol-2f34d146', 'i-5a9d3a33', '/dev/sdj')
  => {:aws_instance_id=>"i-5a9d3a33", :aws_device=>"/dev/sdj",
  :aws_attachment_status=>"attaching", :aws_id=>"vol-2f34d146",
  :aws_attached_at=>Mon Sep 08 00:34:03 UTC 2008}
  $ mkfs.ext3 /dev/sdj
  mke2fs 1.39 (29-May-2006)
  /dev/sdj is entire device, not just one partition!
  Proceed anyway? (y,n) y
  Filesystem label=
  OS type: Linux
  Block size=4096 (log=2)
  Fragment size=4096 (log=2)
  131072 inodes, 262144 blocks
  13107 blocks (5.00%) reserved for the super user
  First data block=0
  Maximum filesystem blocks=268435456
  8 block groups
  32768 blocks per group, 32768 fragments per group
  16384 inodes per group
  Superblock backups stored on blocks:
  32768, 98304, 163840, 229376
  Writing inode tables: done
  Creating journal (8192 blocks): done
  Writing superblocks and filesystem accounting information: done
  This filesystem will be automatically checked every 39 mounts or
  180 days, whichever comes first. Use tune2fs -c or -i to override.
  把刚格式化的块设备挂装到一个文件系统文件夹。
  清单 23. 把卷挂装到本地目录并使用它
  $ mount /dev/sdj /mnt/my-vol
  $ echo "Hello Devworks" > /mnt/my-vol/test.txt
  # cat /mnt/my-vol/test.txt
  Hello Devworks
  现在,可以像系统上的其他任何块设备一样使用这个 EBS 卷。可以读写这个卷。使用完之后,可以让卷脱离正在运行的实例,以后可以把它重新连接到另一个实例或同一个实例。这种持久存储可以提高 EC2 的效用。在许多方面都可以使用这种资产,比如存储数据库数据和 Web 服务器日志等需要超过实例寿命长期存在的数据。
  可以创建 EBS 卷的快照,快照包含卷在一个特定时间点的内容。快照本身自动存储在 S3 上,由 EC2 以累积方式创建。卷的第一个快照是完整的拷贝,但是以后的快照只存储更改集。当前,每个 Amazon Web Services 账户最多只能有 500 个快照。如果需要保留更多的快照,可以请求提高账户限额。 清单 24. 从 EBS 卷创建快照
  irb(main):007:0> @ec2.create_snapshot('vol-2f34d146')
  => {:aws_status=>"pending", :aws_volume_id=>"vol-2f34d146",
  :aws_started_at=>Mon Sep 08 00:49:15 UTC 2008, :aws_progress=>"",
  :aws_id=>"snap-13db3c7a"}
  EC2 在后台创建快照。可以定期列出自己的所有快照,从而确认快照创建过程已经成功完成。 清单 25. 列出 EBS 快照
  irb(main):008:0> @ec2.describe_snapshots()
  => [{:aws_status=>"completed", :aws_volume_id=>"vol-2f34d146",
  :aws_started_at=>Mon Sep 08 00:49:15 UTC 2008, :aws_progress=>"100%",
  :aws_id=>"snap-13db3c7a"}]
  最后,可以让卷脱离实例。以后可以把它重新连接到同一个实例或另一个实例。 清单 26. 脱离 EBS 卷
  irb(main):006:0> @ec2.detach_volume('vol-2f34d146')
  => {:aws_instance_id=>"i-5a9d3a33", :aws_device=>"/dev/sdj",
  :aws_attachment_status=>"detaching", :aws_id=>"vol-2f34d146",
  :aws_attached_at=>Mon Sep 08 00:34:03 UTC 2008}
  回页首
  结束语 本文介绍了 Amazon 的 EC2 服务及其基本概念。了解了 right_aws (一个用于与 EC2 交互的开放源码 Ruby 库)提供的一些功能。我们讨论了许多内容,但是 EC2 是一个非常大的复杂主题。强烈建议您通过 Amazon EC2 开发人员指南 了解更多信息。 这个 "用 Amazon Web Services 进行云计算 " 系列的 第 4 部分 讨论如何使用 Amazon Simple Queue Service (SQS) 在云中进行可靠的消息传递。 参考资料 学习
  阅读本系列的其他部分:
  第 1 部分 "简介:选择租用而不是购买 "
  第 2 部分 "用 Amazon Simple Storage Service (S3) 在云中存储数据 "
  第 4 部分 "用 SQS 进行可靠的消息传递 "
  第 5 部分 "用 SimpleDB 在云中处理数据集 "
  了解各种 Amazon Web Services 的相关信息:
  Amazon Simple Storage Service (S3)
  Amazon Elastic Compute Cloud (EC2)
  Amazon Simple Queue Service (SQS)
  Amazon SimpleDB (SDB)
  Service Health Dashboard 由 Amazon 团队负责更新,提供每个服务的当前状态。
  博客 及时提供 Amazon Web Services 的最新动态。
  注册 一个 Amazon Web Services 账户。
  可以在 Amazon Public Grid 中使用 OpenSolaris 。
  Amazon Web Services Developer Connection 提供开发人员需要的所有参考资料。
  Amazon Web Services 团队在 EC2 技术资源 上为开发人员提供技术文档、用户指南和其他参考资料。
  EC2 开发人员指南 提供 EC2 服务的各个组件的相关信息,以及高级使用方法和配置。
  在 AWS Developer Connection 网站上可以找到所有 Amazon Machine Images 的列表。
  Amazon 提供几个帮助创建和管理映像的 命令行工具 。
  在 Web 服务帐户信息页面 上,可以管理密钥和证书、重新生成它们、查看账户活动和使用情况报告以及修改个人信息。
  使用 Simple Monthly Calculator 工具计算 EC2 和其他 Amazon Web Services 的每月使用成本。
  在 developerWorks 上的体系结构专区 寻找提高体系结构方面的技能所需的参考资料。
  在 技术书店 浏览关于这些主题和其他技术主题的图书。
  获得产品和技术
  下载 IBM 产品评估版 ,试用这些来自 DB2??、Lotus??、Rational??、Tivoli?? 和 WebSphere?? 的应用程序开发工具和中间件产品。
  讨论
  参与 developerWorks blogs 并加入 developerWorks 社区 。

用 Amazon Web Services 进行云计算,第 3 部分:用 EC2 根据需要提供服务器相关推荐

  1. 用 Amazon Web Services 进行云计算,第 2 部分: 用 Amazon Simple Storage Service (S3) 在云中存储数据

    用 Amazon Web Services 进行云计算,第 2 部分: 用 Amazon Simple Storage Service (S3) 在云中存储数据 简介: 学习基本的 Amazon Si ...

  2. Amazon Web Services: Networking AWS:网络 Lynda课程中文字幕

    Amazon Web Services: Networking 中文字幕 AWS:网络 中文字幕Amazon Web Services: Networking 采用云基础架构战略包括配置满足组织需求的 ...

  3. aws部署web_运营酿酒厂解释了Amazon Web Services(AWS)

    aws部署web by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 运营酿酒厂解释了Amazon Web Services(AWS) (Amazon Web Se ...

  4. Spring和Amazon Web Services

    如今, Amazon Web Services (或AWS)是要使用和部署到的基础架构和硬件提供商的最常见选择之一. 许多Spring应用程序已经解决了集成应用程序基础结构和底层的挑战. 这些内部解决 ...

  5. 亚马逊标题自动抓取_15分钟内开始使用Amazon Web Services和全自动资源调配

    亚马逊标题自动抓取 在等待一个新项目时,我想学习一些有用的东西. 而且由于在许多项目中我们需要评估和测试正在开发的应用程序的性能,而很少有足够的硬件来生成实际负载,因此我决定学习更多有关按需在云中按需 ...

  6. 使用Amazon Web Services(EC2)

    正如我上周参加技术动手AWS培训之前所发布的. 这些天的课程当然是我以前使用过的标准EC2和S3服务. 除此之外,我们还使用了RDS , Elastic Load Balancing , SNS和VP ...

  7. 15分钟内开始使用Amazon Web Services和全自动资源调配

    在等待一个新项目时,我想学习一些有用的东西. 而且由于在许多项目中我们需要评估和测试正在开发的应用程序的性能,而很少有足够的硬件来生成实际负载,因此我决定学习更多有关按需在云中按需配置虚拟机的知识,即 ...

  8. 零基础 Amazon Web Services (AWS) 入门教程图文版(三)

    原则上WDCP安装好了,就可以直接使用了,FTP.MySQL什么的应有尽有.但是本站Amazon AWS -- 免费的午餐不好吃一文中说到过这个问题,直接用WDCP的MySQL会导致EBS的I/O急剧 ...

  9. 零基础 Amazon Web Services (AWS) 入门教程图文版(四)

    自上一篇之后,5天过去了,这篇文章总算是挤出来了... 其实看不看无所谓啦,都说了WDCP非常适合小白,随便折腾.要是折腾的时候遇到什么问题,欢迎留言探讨~ 五.新建站点 登录WDCP后台,首次登录会 ...

  10. 零基础 Amazon Web Services (AWS) 入门教程图文版(二)

    上一篇讲到,主机正常运转了.但是此时如果直接访问公网IP是打不开网页的,因为主机上没有搭建Web服务器环境,防火墙也没有开放80端口,并且我们没有上传任何网页文件.所以这一篇主要介绍服务器环境的搭建. ...

最新文章

  1. java字符串统计英文字符用什么不同_JAVA程序。输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。...
  2. RS-232 Receiver
  3. Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介
  4. IT软件开发 书籍汇总
  5. 为什么技术与产品沟通起来总是那么痛苦
  6. 用虚拟网卡(softether)共享局域网资源
  7. 【非常有用=小白也可以简单操作】越狱系统中可以让多个Kindle应用程序同时使用的办法--自己......
  8. paip.使用继承机制来实现控制反转或依赖倒置
  9. Structs2 总结
  10. win11 外接键盘个别按键(win,alt)失灵
  11. 微信自动打开外部浏览器下载apk文件
  12. 微型计算机主机内部结构,微型计算机主机由什么组成
  13. alpha版、beta版、rc版的意思
  14. 生成带二维码图片并通过微信分享
  15. 周子明:大道无疆,“驰”之以恒,在数字化时代纵横驰骋
  16. 抖音究竟是通过什么让我男朋友他爸成功刷到了我妈?,历经30天
  17. k8s二进制安装部署(详细)
  18. 玩转OSGI-ApacheFelix(一)框架启动部署
  19. 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):MPG:一种有效的自我监督框架,用于学习药物分子的全局表示以进行药物发现
  20. 数学建模--时间序列分析、模型预测

热门文章

  1. 浅析智能访客机的应用
  2. Hive报错Error during job, obtaining debugging information...
  3. java随机生成三位数
  4. Android 自定义锁屏图案 View
  5. 集合-HashTable
  6. GoldenDict:一款免费的词典工具
  7. 前端遮罩层实现_前端制作遮罩与蒙版
  8. Window系统多硬盘设置新引导盘
  9. 16S rDNA测序和宏基因组测序区别
  10. 高德地图初体验demo