使用 API 创建 Amazon EC2 实例

Posted

技术标签:

【中文标题】使用 API 创建 Amazon EC2 实例【英文标题】:Create Amazon EC2 Instance with API 【发布时间】:2011-06-27 04:15:44 【问题描述】:

com.amazonaws.services.ec2 是否包含从现有 AMI 创建全新 EC2 实例的方法?我希望通过 Java SDK 而非 Web 管理控制台来执行此操作。

【问题讨论】:

清晰而简单的文章:codeflex.co/java-aws-sdk-create-and-run-ec2-instance 【参考方案1】:

以下是使用 Amazon AWS SDK for Java 创建 EC2 实例的示例:

// CONNECT TO EC2

InputStream credentialsAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("AwsCredentials.properties");
Preconditions.checkNotNull(credentialsAsStream, "File 'AwsCredentials.properties' NOT found in the classpath");
AWSCredentials credentials = new PropertiesCredentials(credentialsAsStream);

AmazonEC2 ec2 = new AmazonEC2Client(credentials);
ec2.setEndpoint("ec2.eu-west-1.amazonaws.com");

// CREATE EC2 INSTANCES
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
    .withInstanceType("t1.micro")
    .withImageId("ami-62201116")
    .withMinCount(2)
    .withMaxCount(2)
    .withSecurityGroupIds("tomcat")
    .withKeyName("xebia-france")
    .withUserData(Base64.encodeBase64String(myUserData.getBytes()))
;

RunInstancesResult runInstances = ec2.runInstances(runInstancesRequest);

// TAG EC2 INSTANCES
List<Instance> instances = runInstances.getReservation().getInstances();
int idx = 1;
for (Instance instance : instances) 
  CreateTagsRequest createTagsRequest = new CreateTagsRequest();
  createTagsRequest.withResources(instance.getInstanceId()) //
      .withTags(new Tag("Name", "travel-ecommerce-" + idx));
  ec2.createTags(createTagsRequest);

  idx++;

源代码(创建 RDS、EC2 和 ELB 实例)可在http://code.google.com/p/xebia-france/source/browse/training/xebia-spring-travel/trunk/xebia-spring-travel-amazon-aws/src/main/java/fr/xebia/demo/amazon/aws/AmazonAwsInfrastructureMaker.java?spec=svn1781&r=1781获取

希望这会有所帮助,

西里尔

【讨论】:

【参考方案2】:

RunInstances 是方法,应该在 SDK 中。

【讨论】:

非常感谢。我还需要能够将我开始的实例与所有其他实例区分开来。你知道这样做的好方法吗? 您有几个选择。最简单的方法是使用 CreateTags 为您在代码中创建的实例添加标签(不过,每个实例的标签总数限制为 10 个);然后这些从 DescribeInstances 与您的实例一起返回(也可以在 Web 控制台中查看)【参考方案3】:
 var launchRequest = new RunInstancesRequest()
                
                    ImageId = amiID,
                    InstanceType = ConfigurationManager.AppSettings["AwsInstanceType"],
                    MinCount = 1,
                    MaxCount = 1,
                    KeyName = keyPairName,
                    SecurityGroupIds = groups,
                    SubnetId = ConfigurationManager.AppSettings["AwsSubnetId"],

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

【讨论】:

以上是 C# 而不是 Java。

以上是关于使用 API 创建 Amazon EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

创建新实例时如何保护来自 Amazon EC2 实例的数据?

确定 Amazon EC2 实例创建日期/时间

具有弹性 IP 的 Amazon EC2 自动扩展实例

在 Windows 中使用 PuTTY SSH 到 Amazon EC2 实例

仅从 ELB 访问 Amazon EC2 实例

使用 Amazon EC2 实例发送邮件