3

是否可以以编程方式获取/部署和启动 EC2 实例?基本上选择您的实例类型、AMI 并启动它?

我看到了该StartInstance方法,但这仅适用于已在您的帐户中创建和停止的实例。

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html

本质上,发生的事情是我有一个需要多个 EC2 实例进行计算的自动化服务。我需要以编程方式创建一个新实例,选择实例类型,选择 AMI,启动它并运行一些部署脚本以使事情顺利进行。

我认为有一种方法可以使用 AWS 开发工具包做到这一点,但我只是没有看到它。

在相关说明中,还需要能够以编程方式销毁关闭实例。

4

3 回答 3

7

是的,这是可能的。

您使用RunInstances API 方法。

使用您有权访问的 AMI 启动指定数量的实例。

要完全摆脱实例,请使用TerminateInstance

关闭一个或多个实例。这个操作是幂等的;如果您多次终止一个实例,则每次调用都会成功。

该语言有点令人困惑,因为它说“关闭一个或多个实例”,但实际上它完全删除了它们。

于 2016-02-10T01:25:54.373 回答
3

您可以编写 SDK 脚本来完成这项工作(创建、更改和销毁 ec2 实例),这取决于您掌握的语言,例如 javascript、java、ruby、python 等。

但是有更简单的方法来跟进,我们称之为基础设施即代码,尝试 awscloudformation或 Hashicopy'sterraform

使用他们的模板,您可以将整个基础架构(包括 ec2、rds、vpc、安全组、子网等)部署为分钟作业。

参考:

AWS CloudFormation 模板

Terraform AWS 提供者

于 2016-02-10T01:48:39.727 回答
1

你可以试试这个。。

   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;
于 2016-02-12T09:56:52.597 回答