【问题标题】:Programmatically create and deploy On-Demand EC2以编程方式创建和部署按需 EC2
【发布时间】:2016-05-20 05:12:37
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation terraform


    【解决方案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 价格启动按需实例?如果是这样,那就是我正在寻找的,谢谢。
      猜你喜欢
      • 2020-11-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多