以编程方式创建和部署按需 EC2
Posted
技术标签:
【中文标题】以编程方式创建和部署按需 EC2【英文标题】:Programmatically create and deploy On-Demand EC2 【发布时间】:2016-05-20 05:12:37 【问题描述】:是否可以以编程方式获取/部署和启动 EC2 实例?基本上选择您的实例类型、AMI 并启动它?
我看到了StartInstance
方法,但这仅适用于已在您的帐户中创建和停止的实例。
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html
基本上,发生的事情是我有一个需要多个 EC2 实例进行计算的自动化服务。我需要以编程方式创建一个新实例,选择实例类型,选择 AMI,启动它并运行一些部署脚本来让事情顺利进行。
我认为有一种方法可以使用 AWS 开发工具包做到这一点,但我只是没有看到它。
在相关说明中,还需要能够以编程方式销毁关闭实例。
【问题讨论】:
【参考方案1】:您可以编写 SDK 脚本来完成这项工作(创建、更改和销毁 ec2 实例),这取决于您掌握的语言,例如 javascript、java、ruby、python 等。
但有更简单的跟进方式,我们称之为infrastructure as code,试试aws cloudformation
或Hashicopy的terraform
使用他们的模板,您可以将整个基础架构(包括 ec2、rds、vpc、安全组、子网等)部署为分钟作业。
参考:
AWS CloudFormation templates
Terraform AWS PROVIDER
【讨论】:
+1 表示 CloudFormation 服务。我从来不知道它的存在。我需要看看它是否符合我们的需求,因为我们真正需要做的就是启动一个特定的 AMI 并运行一些脚本。谢谢! @JakeWilson 你最后做了什么?效果如何?【参考方案2】:你可以试试这个..
AmazonEC2Client amazonEc2client = GetAmazonClient(ConfigurationManager.AppSettings["AwsRegionEndPint"]);
var launchRequest = new RunInstancesRequest()
ImageId = YOUR IMAGE ID,
InstanceType = YOUR INSTANCE TYPE,
MinCount = 1,
MaxCount = 1,
KeyName = your keyPairName,
SecurityGroupIds =your groups,
SubnetId = your subnet Id,
;
RunInstancesResponse runInstancesResponse = amazonEc2client.RunInstances(launchRequest);
//用于分配标签名称的代码
var InstanceId = runInstancesResponse.Reservation.Instances[0].InstanceId;
var trequest = new CreateTagsRequest();
trequest.Resources=new List<string>()InstanceId;
List<Tag> tags=new List<Tag>();
Tag tag=new Tag("Name","TestCodeFinal");
tags.Add(tag);
trequest.Tags = tags;
amazonEc2client.CreateTags(trequest);
Reservation reservation = runInstancesResponse.Reservation;
【讨论】:
【参考方案3】:是的,这是可能的。
您使用RunInstances API 方法。
使用您拥有权限的 AMI 启动指定数量的实例。
要完全摆脱实例,请使用TerminateInstance。
关闭一个或多个实例。这个操作是幂等的;如果您多次终止一个实例,则每次调用都会成功。
该语言有点令人困惑,因为它说“关闭一个或多个实例”,但实际上它完全删除了它们。
【讨论】:
谢谢,这与RequestSpotInstances
有何不同?
RequestSpotInstance 允许您以当前现货市场价格为可用实例出价。如果您的出价至少等于市场价格,这将成功。如果当前的市场价格后来超过您愿意支付的价格,此类实例可以在不通知的情况下关闭。现货市场通常用于 CPU(或 GPU)密集型任务,其中需要尽可能便宜的多个实例,工作在所有可用实例之间分配,并且架构可以承受一些即将消失的实例。
好的,所以RunInstances
打算以当前的每小时 AWS 价格启动按需实例?如果是这样,那就是我正在寻找的,谢谢。以上是关于以编程方式创建和部署按需 EC2的主要内容,如果未能解决你的问题,请参考以下文章
在 Nodejs 中以编程方式连接到 Mongodb Amazon EC2 实例