近年来,云计算技术已经成为信息技术领域的一大热点,它不仅是一种炒作,更是一种可能使企业运营更快速、更智能且成本更低的重大变革。为了消除混淆,下面将给出云计算的定义:
按需服务:服务必须能够根据请求随时、随地提供。
自助服务:云服务的用户必须能够管理自己的工作流。如果需要填写繁琐的表格、提交请求或请求服务工作,那么这就不是云计算。
细粒度计费:服务必须仅根据使用量进行计费。在许多情况下,使用量是按小时计费的。
Amazon EC2是市场上最成熟的平台云计算服务之一。本文将展示如何通过浏览器创建EC2机器并使用RDP连接到它们。代码是用ASP.NET编写的,以帮助那些最终希望编写自己的发行框架作为基于浏览器的解决方案的公司。
Amazon EC2是一个成熟的云计算平台,它允许在云中配置自己的Windows、Linux或Unix机器,并且可以按每小时低至8美分的价格计费。Amazon服务也以SOAP API的形式公开,允许从自己的C#应用程序中创建和管理基础设施。
尽管SOAP接口相对容易使用,但发现许多人在涉及的基本概念上存在困惑。人们最常见的问题包括:
本文的其余部分将讨论一个非常基础的包装器和ASP.NET应用程序,它将帮助通过浏览器启动自己的Amazon EC2机器,并通过RDP连接到它们。
在云中启动机器的基础。
下载Amazon SDK并将其添加为项目引用。SDK提供了一个包装器,将SOAP接口暴露为一组C#方法调用。从下载它。
要使用Amazon,需要使用访问密钥和秘密访问密钥初始化AmazonEC2服务调用。这些参数实际上是访问Web服务的用户名和密码。使用帮助EC2注册和访问密钥:
AmazonEC2 service = new AmazonEC2Client(AWSAccessKey, AWSSecretAccessKey);
DescribeImagesRequest request = new DescribeImagesRequest();
request.WithOwner("self");
service.DescribeImages(request);
启动的每台机器都依赖于:
下面是一个密钥对生成的示例。注意它返回一个包含私钥的字符串。如上所述,不要丢失这个值。
CreateKeyPairRequest request = new CreateKeyPairRequest();
request.KeyName = keyName;
CreateKeyPairResponse response = service.CreateKeyPair(request);
return response.CreateKeyPairResult.KeyPair.KeyMaterial;
启动EC2实例非常简单。需要密钥对、安全组和机器标识符。什么是机器标识符?Amazon为云中可用的每个镜像分配一个随机ID。可以在搜索感兴趣的镜像。
一旦启动了一个实例,将收到一个实例标识符。这个值可以用来检索实例的未来信息,例如DNS地址和机器状态。
注意:实例完全可用可能需要相当长的时间。机器在启动过程中会进行配置和重启,在此期间,只能等待...
RunInstancesRequest request = new RunInstancesRequest();
request.ImageId = ami;
request.MaxCount = 1;
request.MinCount = 1;
request.KeyName = keyName;
request.SecurityGroup = securityGroups;
request.InstanceType = type;
RunInstancesResponse response = service.RunInstances(request);
RunningInstance runningInstance = response.RunInstancesResult.Reservation.RunningInstance[0];
可能认为这是容易的部分,但事实并非如此:
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.ContentType = "Content-Type=application/x-rdp rdp;charset=ISO-8859-1";
Response.AddHeader("Content-Length", content.Length.ToString());
Response.Write(content);
Response.End();