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

我已经了解了很多可用于AWS的工具以及资源(机器实例,安全组,数据库等)的自动化设置以及AWS云中虚拟机实例的自动自定义的许多知识。 我想简要介绍一下AWS,并简要概述这些工具和自动化选项。 如果您熟悉AWS / EC2,则可能需要直接将介绍跳到自动化部分。

为什么选择AWS?

亚马逊是“基础设施即服务”的领先提供商,并且正在不断为其产品增加新的服务。 AWS允许您按需创建虚拟机,对其进行负载平衡,将其连接到“数据库即服务”(与手动管理的数据库相比具有多个优点)以及各种其他服务(例如通知,电子邮件和排队服务) 。 您可以访问内置的监视功能,并且可以将应用程序部署到基于它们的“平台即服务”,同时保留对这些较低级资源的控制权。

关注官方AWS博客以了解新服务,功能等。

AWS入门

要创建一个AWS账户,您将需要一部电话和一张信用卡(如果您使用任何付费服务或超出任何免费使用限制,都将收费)。 在注册过程中请务必小心,因为UI不能完全防错。 您的帐户可能需要最多两个小时才能正常运行。

下一步要做的是浏览AWS管理控制台 ,该控制台可让您创建和配置各种服务和资源,最有趣的是Elastic Compute Cloud(EC2),您可以在其中启动新的虚拟机。 管理控制台很容易解释,尽管不像我希望的那样易于使用。 您可能需要查看这些屏幕快照,以显示如何在管理控制台中创建EC2实例 。

简要概述

AWS的核心规则是,您仅需支付使用费用,即实例的运行时间和流量-请参阅AWS Simple Monthly Calculator 。

最重要的资源是EC2,因为它允许您创建称为“实例”的虚拟机。 关于它们的内存和计算能力,存在不同类型的实例 。 默认情况下,它们是瞬态的,一旦停止使用它们就会被丢弃(终止)。 您可能还拥有一个由弹性块存储(EBS)支持的实例,该实例使您能够以任何状态和已保存的更改再次停止和启动该实例,Amazon对此收取每月$ 0.10 / GB的费用。 如果只需要保留一些数据,也可以将EBS存储作为卷安装到实例。 没有快速的方法可以重新创建终止的实例,您必须再次执行向导-这是命令行工具和自动化变得很方便的地方。

设置EC2实例时,您可能还需要将它们分配到同一安全组中,并配置对安全组中的哪些人开放的端口(默认情况下,您甚至无法通过SSH进入)。

如果您想了解有关EC2的全部信息,请转到Amazon EC2用户指南 。

除了EC2,还有许多其他有趣的服务,例如Elastic Beanstalk(PaaS,当前用于Java Webapp,使用Tomcat),分布式存储S3等。还有一些其他服务,例如Amazon CloudWatch ,这是一项(性能)针对您的AWS基础架构的监控工具。 (可以通过New Relic监视来补充,以更深入地了解应用程序。)

利用亚马逊免费套餐

亚马逊免费为新客户提供一定数量的资源,为期一年,如果您消耗的资源更多,则只需要付费即可。 它包括例如由EBS支持的不停止运行的微型EC2实例(即它是持久的,您可以停止并再次启动它),15 GB流量,10 GB EBS存储,5 GB S3存储,10个CloudWatch指标等不幸的是,尽管它们在Amazon SimpleDB (NoSQL键值存储)中提供了1GB的空间,但它不包括Amazon管理的MySQL / Oracle数据库( RDS )。

这意味着您可以免费拥有一个持续运行的EC2 Micro实例(613 MB内存)。 您可以将其用作云中的基础,例如,因为两个EC2实例之间的流量更快/更便宜,并且由于它可以完全访问同一安全组内的计算机。

最佳选择可能是将您的实例基于Amazon Linux AMI ,它是针对AWS优化的RedHat Linux的变体,配备了大多数AWS API命令行工具和CloudInit,用于自动系统设置(稍后描述)。 建议您浏览用户指南 ,该指南描述了可用的工具以及如何使用CloudInit。

自动化呢?

如果您是第一次执行某项操作,则AWS Management Console很棒,但是对于重复任务而言,向导太耗时。 特别是如果您需要设置多个实例,比如说RDS数据库实例,EC2计算机实例以及相应的安全组或许多相同的实例。 我们将研究如何自动执行此操作。

除了设置基础结构外,通常还需要自定义EC2实例(至少通过安装和启动所需的EC2实例软件)。 您可以通过SSH登录它们,但是能够自动化它不是很好,特别是如果您需要多个类似的实例吗?

请注意,我现在只关注自动化AWS用户的工作。 也可以将AWS配置为在需要时(例如,当负载超过限制时) 自动启动新的EC2实例 ,但这是另一回事。
概述:

  • 基础架构配置自动化:
    • AWS API命令行工具(或AWS Java API或第三方工具/库)
    • AWS CloudFormation
  • 实例操作系统和软件设置自动化:
    • Canonical CloudInit(Ubuntu和Amazon Linux AMI)–也许利用Puppet或Chef
    • 创建定制的AMI

自动化基础架构配置

在没有AWS管理控制台的情况下,有两个突出的选项可用于创建EC2实例和其他资源:AWS API命令行工具和AWS CloudFormation。

AWS API命令行工具

亚马逊为其大多数服务(例如EC2和RDS)提供命令行工具。
EC2 :Robert Sosinovski早在2008年就发布了关于使用Amazon EC2命令行工具 (尽管其名称并非特定于Mac OS X)的非常好的说明,但它们仍然有效,因此只需关注它们,就没有必要重复它们在这里(基本上是下载,解压缩,设置环境变量,提供凭据)。 或者,您可以转到下载页面并按照官方说明进行操作 。 我建议您创建一个文件夹以包含所有工具=> $ AWS_FOLDER / ec2 /等,而不是〜/ .ec2 /。

如果要使用除默认us-east-1之外的其他AWS区域,则还需要设置环境变量EC2_URL,请参阅区域端点列表或命令ec2-describe-regions 。 例如 (我的URL中间有ec2,与端点列表相反,但显然也可以):

export EC2_URL=https://eu-west-1.ec2.amazonaws.com

其他工具的身份验证设置 :虽然EC2工具的文档仅描述了通过X.509证书(环境变量EC2_PRIVATE_KEY,EC2_CERT)进行的身份验证,但其他工具(至少是RDS,CloudFormation)支持通过环境变量AWS_CREDENTIAL_FILE指向统一身份验证到包含您的AWS Access Key ID和密钥的文件(可以在您的AWS帐户中的 “安全性凭证-访问密钥”下找到)中,配置在工具的自述文件中进行了描述。

RDS :RDS命令行工具的设置与EC2非常相似,只需下载它们并添加环境变量,如随附的readme.txt中所述。

与EC2一样,您可能需要更改默认的RDS区域 :

export RDS_URL=https://eu-west-1.rds.amazonaws.com
Vaadin测试设置中的示例

我最初的计划是尝试使用Amazon Web Services进行Vaadin可伸缩性测试中描述的性能测试,不幸的是,事实证明这是不可能的,因为测试应用程序无法运行。 在此过程中,我已自动完成了各个设置步骤,如下所示。 您可能需要查看博客文章以了解上下文。

我不需要通过管理控制台创建安全组并允许通过命令行访问它。 您可以按以下方式打开SSH端口:

ec2-authorize  -p 22

创建两个EC2实例:

ec2-run-instances ami-1a0f3d6e -t m1.large -k VaadinAS --instance-count 2 -z eu-west-1c -g quick-start-1
  • -k指定将与该实例相关联的现有密钥对的名称(管理控制台为您提供了在首次创建实例时创建的密钥对)的名称,从而无需密码即可进行ssh登录
  • -z指定区域内的可用区(AZ)(在Mgmt Console中创建实例时,您可以看到可用区),最好将所有资源都放在同一AZ中
  • -g指定一个现有的安全组(再次在控制台中创建); 我相信默认是“默认”

ec2-run-instances命令还支持–user-data或–user-data-file属性,以将设置指令传递给CloudInit,如稍后所述。

要登录实例,您将需要它们的公共域名/ IP(在命令完成时打印)和用户名,这取决于所使用的AMI(最简单:在Mgmt Console中右键单击该实例,然后选择“连接”以获取)完整的SSH connect命令)和密钥文件(在我的情况下为./VaadinAS.pem)。 因此,我将以如下方式登录我的第一个实例(前提是我已经打开了安全组中的端口22):

ssh -i VaadinAS.pem ubuntu@ec2-46-137-136-253.eu-west-1.compute.amazonaws.com

使用MySQL创建RDS实例(启动完成可能需要几分钟):

rds-create-db-instance quicktickets --allocated-storage 5 -c db.m1.large  -e MySQL5.1 -u quicktickets -p V3ryS3cr3t  -z eu-west-1c --backup-retention-period 0 --db-name quicktests
  • quicktickets将是实例的名称
  • 最大 大小为5 GB(以后可以更改)
  • -c –它基于db.m1.large实例
  • -e –数据库类型为MySQL,-u用户名快捷票,-p密码V3ryS3cr3t
  • -z eu-west-1c将其置于与EC2实例相同的可用区中
  • –backup-retention-period 0 –不保留备份(默认:1天)
  • –db-name quicktests –连接到它所需

接下来,我需要使数据库可以从我的EC2实例(在安全组quick-start-1中)访问:

rds-authorize-db-security-group-ingress default --ec2-security-group-name quick-start-1 --ec2-security-group-owner-id
  • 您可以找到您的AWS账户ID在AWS帐号的安全凭据下

要查找实例的主机名,请执行rds-describe-db-instance ,它还会告诉您实例是仍在启动还是已经在运行。
现在,您可以从安全组中的EC2实例连接到数据库:

mysql -h quicktickets.cpokd2djuazy.eu-west-1.rds.amazonaws.com -u quicktickets --password=V3ryS3cr3t quicktickets

AWS CloudFormation

CloudFormation是Amazon提供的一项新的(2/2011)免费服务,使您能够以文本格式描述所需的资源及其依赖项,并可以通过以下方式使用此“模板”实例化这些资源(“创建堆栈”): AWS管理控制台或通过CloudFormation命令行工具 。 您还可以共享您的模板,并使用和组合其他人创建的模板。 模板还支持UserData属性,您可以使用该属性将设置说明传递给CloudInit,如稍后所述。 查看此基于屏幕截图的文章,有关通过管理控制台设置CF堆栈 。
模板文件示例:

{  "AWSTemplateFormatVersion": "2010-09-09","Description" : "One EC2 instance with a security group open for SSH","Parameters": {"KeyName": {"Description" : "Name of an existing EC2 KeyPair to enable SSH access","Type": "String"},"InstanceType": {"Default": "m1.large",  "Type": "String"}},"Resources": {"EC2SecurityGroup": {"Properties": {"SecurityGroupIngress": [{"FromPort": "22","CidrIp": "0.0.0.0/0","ToPort": "22","IpProtocol": "tcp"}],"GroupDescription": "SSH access"},"Type": "AWS::EC2::SecurityGroup"},"Ec2Instance": {"Properties": {"SecurityGroups": [{"Ref": "EC2SecurityGroup"}],"ImageId": { "Fn::FindInMap": ["AWSRegionArch2AMI",{"Ref": "AWS::Region"}, "64"]},"UserData": {"Fn::Base64": { "Fn::Join": ["", ["#!/bin/bash -v\n","# you init bash script here...\n"]]} },"KeyName": { "Ref": "KeyName" },"InstanceType": { "Ref": "InstanceType" }},"Type": "AWS::EC2::Instance"}},"Mappings": {"AWSInstanceType2Arch" : {"m1.large"    : { "Arch" : "64" }, "m1.xlarge"   : { "Arch" : "64" }, ...}},"Outputs" : {"InstanceId" : {"Description" : "InstanceId of the newly created EC2 instance","Value" : { "Ref" : "Ec2Instance" }},"AZ" : {"Description" : "Availability Zone of the newly created EC2 instance","Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }},"PublicIP" : {"Description" : "Public IP address of the newly created EC2 instance","Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }}}
}
  • 4:如您所见,您可以定义属性(具有默认值),当从模板创建新堆栈时可以为其提供值
  • 16、31:接下来,它定义了两个资源:安全组和EC2实例(使用某些映射,因为AMI的名称因地区而异)
  • 38:可以通过base64编码的UserData将设置说明提供给CloudInit
  • 56:您还可以通过DescribeStacks函数定义哪些信息可用(命令行:cfn-describe-stacks)

通过CloudFormation,您可以定义任何资源(EC2实例,RDS实例,负载平衡器,安全组等),它们的依存关系,以及通过CloudInit定义各种启动时操作,如SW安装。 模板是有效的JSON文档。

示例: 使用CloudFormation和Cloud-Init安装和启动RoR应用程序 (具有WaitCondition功能)–它不太长,描述了模板文件的各个部分。 您也可以浏览公共模板文件 ,例如: 具有Amazon RDS数据库实例的单个EC2实例Web服务器 。

2011年6月,亚马逊还启动了CloudFormer ,这是一个原型工具,使您可以从帐户中的现有AWS资源创建CloudFormation模板。

如果您仍需要更多信息,请阅读《 CloudFormation用户指南》 。

使用CloudFormation元数据和帮助程序脚本自定义实例

从通过AWS CloudFormation引导应用程序 :

AWS CloudFormation允许您通过模板中的元数据定义软件包,文件和操作系统服务的集合。 此外,它还提供了辅助功能

解释元数据并对其执行操作,安装软件包,创建文件以及在实例上启动或重新启动服务。 AWS CloudFormation脚本基于基本CloudInit功能构建,使您能够创建通用的简单CloudInit启动脚本,该脚本通过元数据进行数据驱动。 您在元数据中描述了主机上需要安装的内容,AWS CloudFormation负责此操作。

有关如何使用元数据和帮助程序脚本(例如cfn-init)的说明,请参阅该文档,该脚本将安装软件包,下载和解压缩归档文件,启动服务以及根据元数据部分中的数据创建文件。 它还提到了CloudFormation和Chef或Puppet的集成,在将AWS CloudFormation与Opscode Chef 集成以及将AWS CloudFormation与Puppet集成的白皮书中对此进行了详细描述。 如果您打算使用CloudFormation,则应绝对阅读此22页的指南。

(注意: cfn-init支持下载和解压缩软件包,可用于例如获取GitHub按需提供的应用程序的最新源代码。)

您可以在此模板中看到利用元数据和帮助程序脚本的用法示例。

其他选择

  • AWS Java API(命令行工具使用它,它基于Web服务调用)
  • 第三方工具/库,例如Ruby gem Fog 。
  • Chef + Knife和Puppet(我相信他们为AWS WS调用提供了自己的包装器并利用CloudInit)

自动化EC2实例OS / SW设置

要在EC2实例及其配置中自定义软件,您可以创建自定义的AMI,也可以将Canonical的CloudInit与支持它的AMI(Amazon Linux和Ubuntu以及其他)一起使用。 如果使用CloudFormation,则还有另一种基于CloudInit的可能性,如上文CF部分所述。

Canonical CloudInit和实例用户数据

您可以通过“ 用户数据”属性(最大16KB)将任何文本数据传递到新实例,然后可以从实例中的http://169.254.169.254/latest/user-data获得数据(您也可以访问各种元数据 )。 CloudInit是由Ubuntu背后的公司Canonical开发的Linux实用程序,可在启动时(大约在rc.local运行时)读取这些数据并处理其中嵌入的所有指令。 例如,如果它以#开头! 然后在根目录下作为shell脚本运行。

CloudInit在用户数据中接受不同类型的指令,以第一行区分:脚本(#!…),云配置数据,即要安装的软件包等(#cloud-config),要处理的文件的URL(#include…) ,#upstart-job向/ etc / init(每次启动时运行)中添加一些内容。 它甚至可以处理gzip压缩的用户数据和多部分数据,结合几种指令类型(请参阅cloud-utils和命令write-mime-multipart )。

#cloud-config类型非常有用,因为它是安装软件包和执行命令的一种比bash脚本更简单的方法。 它包含YAML格式的指令f.ex。 “ runcmd”运行命令行工具,“ packages”通过操作系统的软件包管理器安装软件包。 示例: 使用 #cloud-config 安装Jenkins CI 。

CloudInit的文档还不够完善,您可能有时需要阅读Python源代码 。 如果出现问题,可以检查实例的/var/log/cloud-init.log中的日志。

除了官方文档外,您可能还想查看Xebia的CloudInit简介演示文稿,并阅读Amazon Linux AMI 用户指南中有关CloudInit的部分。

创建自定义的Amazon Machine Image

CloudInit在启动时安装和配置软件,因此实例需要更长的时间才能完全可用。 如果这是一个问题,那么您可能更喜欢使用已安装和配置的所有软件来创建自己的自定义Amazon Machine Image (AMI)。 例如,在本摘要中描述了如何从现有版本 (2007)或官方AMI定制文档中 创建新的AMI ,您可能还想看看EC2 AMI命令行工具 。 然后,您将基于定制的AMI创建新的EC2实例。

一些相关的东西

如果您的EC2实例需要进行通信并使用要求它们位于同一子网中的技术,则可以使用Amazon Virtual Private Cloud (VPC;免费),甚至可以通过VPN将其连接到数据中心(每小时$ 0.05)。 例如,对于运行多个JMeter实例,这可能是必需的。

关于JMeter,JörgKalsbach创建了一个AMI,该AMI简化了JMeter主从服务器场的创建(3/2010): JMeter In The Cloud –基于云的负载测试环境 (请阅读文档)。 (技巧是,主实例启动从属实例,从而知道其IP。我想可以使用CloudFormation,Auto Scale和用户数据/ CloudInit来完成类似的操作。)

摘要

AWS是一个动态开发的平台,具有不断改进的工具和不断增长的服务提供。 使用基于Web的管理控制台非常容易上手,但是很快将变得更加方便,可以迁移到更自动化的界面,例如命令行工具甚至整个基础架构堆栈设置的CloudFormation。 通过创建自定义图像或在启动时通过CloudInit和/或CloudFormation的元数据和脚本对实例进行自定义的支持非常好,人们已经将其与自己喜欢的DevOps工具Chef和Puppet结合在一起。

我建议您先使用管理控制台开始使用AWS,然后在熟悉这些概念和用法后切换到命令行工具和CloudInit。 如果需要重复供应多个资源,则应使用CloudFormation及其元数据和帮助程序脚本(也许还利用Puppet / Chef)。

参考: The Holy Java博客上的JCG合作伙伴 Jakub Holy 提供了15分钟的Amazon Web Services和全自动资源供应入门 。

相关文章 :

  • 测试技巧–不编写测试
  • 在云中开发和测试
  • 晴间多云
  • 用Scala测试

翻译自: https://www.javacodegeeks.com/2011/12/getting-started-with-amazon-web.html

15分钟内开始使用Amazon Web Services和全自动资源调配相关推荐

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

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

  2. vr设备应用程序_在15分钟内构建一个VR Web应用程序

    vr设备应用程序 在15分钟内,您可以开发一个虚拟现实应用程序,并在Web浏览器,VR头盔或Google Daydream上运行它. 关键是A-Frame ,这是Mozilla VR Team构建的开 ...

  3. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 开发人员 ...

  4. 服务器创建多个dhcp服务_如何在15分钟内创建无服务器服务

    服务器创建多个dhcp服务 by Charlee Li 通过李李 如何在15分钟内创建无服务器服务 (How to create a serverless service in 15 minutes) ...

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

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

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

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

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

    现在小站唯一的流量都靠AWS这个关键词了,刚好要用AWS重新建站,所以从头开始记录一遍吧. 所谓零基础,就是你可以没有任何AWS使用经历,仍然能够按照教程操作下去.所谓图文版,就是建议手机用户在没有连 ...

  8. mvc移动创建oracle表,使用 ASP.NET MVC (C#)在15分钟内创建电影数据库应用程序 | Microsoft Docs...

    使用 ASP.NET MVC 在 15 分钟内创建电影数据库应用程序 (C#)Create a Movie Database Application in 15 Minutes with ASP.NE ...

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

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

最新文章

  1. Oracle编程入门经典 第1章 了解Oracle
  2. EXCEL 打开 csv乱码问题
  3. Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
  4. linux windows 动态库导出查看 ld -r
  5. python技巧 计算字符串中字母出现的次数并取出最大
  6. discuz! 7.2 manyou插件暴路径Get Webshell 0day
  7. xlrd,xlwt操作Excel实例
  8. lduan server 2012 RMS 群集安装 上(十四)
  9. Hibernate上路_18-Hibernate查询方式
  10. 服务器lsass占用内存_服务器内存跑满是什么原因造成的呢?
  11. 怎么理解java面向对象
  12. 小米官网服务器维修无法刷机,小米手机无法刷机的解决方法
  13. H3CV7交换机WEB登录设备方法
  14. linux 文件大小单位显示
  15. 快速刷通PWN的第一天
  16. 赵雅智_名片夹(4)_Android中listview可折叠伸缩仿手风琴效果(静态)
  17. Learun FrameWork,基于.NET的智能化开发工具
  18. I.MX6 Linux mipi配置数据合成
  19. dell 1u服务器型号,戴尔_PowerEdge R240_1U机架式服务器_小型企业服务器选购 | Dell 中国大陆...
  20. 学生系统的java代码_java学生信息管理系统源代码

热门文章

  1. java 哈希算法_选择Java密码算法第1部分-哈希
  2. thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用
  3. junit 静态方法_预期异常规则和模拟静态方法– JUnit
  4. 某人想在h小时内钓到_为某人命名以重新连接到您的服务器
  5. jmeter 采样器作用_实施自定义JMeter采样器
  6. java restful_Java EE中的RESTful计时器
  7. 部署gradle_使用Gradle消除开发重新部署
  8. 只读副本和Spring Data第4部分:配置只读存储库
  9. apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据
  10. c++返回指针时候注意提防_编写干净的测试–提防魔术