云计算与Amazon EC2服务的自动化部署

近年来,云计算技术已经成为信息技术领域的一大热点,它不仅是一种炒作,更是一种可能使企业运营更快速、更智能且成本更低的重大变革。为了消除混淆,下面将给出云计算的定义:

按需服务:服务必须能够根据请求随时、随地提供。

自助服务:云服务的用户必须能够管理自己的工作流。如果需要填写繁琐的表格、提交请求或请求服务工作,那么这就不是云计算

细粒度计费:服务必须仅根据使用量进行计费。在许多情况下,使用量是按小时计费的。

Amazon EC2是市场上最成熟的平台云计算服务之一。本文将展示如何通过浏览器创建EC2机器并使用RDP连接到它们。代码是用ASP.NET编写的,以帮助那些最终希望编写自己的发行框架作为基于浏览器的解决方案的公司。

Amazon EC2是一个成熟的云计算平台,它允许在云中配置自己的Windows、Linux或Unix机器,并且可以按每小时低至8美分的价格计费。Amazon服务也以SOAP API的形式公开,允许从自己的C#应用程序中创建和管理基础设施。

尽管SOAP接口相对容易使用,但发现许多人在涉及的基本概念上存在困惑。人们最常见的问题包括:

  • 对私钥的困惑以及如何使用它们。
  • 在Windows实例上登录时获取密码的困难。
  • 访问问题,几乎总是由于安全组配置错误。
  • 为了读取Windows密码和查看机器日志,数据格式转换的挑战。

本文的其余部分将讨论一个非常基础的包装器和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);

启动的每台机器都依赖于:

  • 密钥对:这是生成的公钥/私钥对。公钥将被Amazon用来加密镜像和Windows密码,而私钥则由用来解密Windows密码。这非常重要!如果丢失了私钥,那么没有人能从云中恢复EC2实例的密码。
  • 安全组:这些是环境的防火墙访问规则。

下面是一个密钥对生成的示例。注意它返回一个包含私钥的字符串。如上所述,不要丢失这个值。

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];

可能认为这是容易的部分,但事实并非如此:

  • 实例启动需要时间,在此期间没有太多信息可用。
  • 可以尝试使用GetConsoleOutput检索一些日志信息。需要反复调用此方法以确保获得了最新的日志数据(或任何数据)。
  • Windows密码是加密的。当可用时,需要使用GetPasswordData检索它,然后使用之前生成的PEM私钥进行解密。
  • 附加的代码还允许使用即时生成的RDP文件连接到实例:
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();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485