using System;
using System.Configuration;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Text;
using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;
using Amazon.SimpleDB;
using Amazon.SimpleDB.Model;
using Amazon.S3;
using Amazon.S3.Model;
using System.Collections.Generic;
using System.Threading;
namespace ec2TestforAE
{
class Program
{
public static void Main(string[] args)
{
//Console.Write(GetServiceOutput());
ec2test();
Console.Read();
}
public static void ec2test()
{
String instanceID = "";
NameValueCollection appConfig = ConfigurationManager.AppSettings;
AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(appConfig["AWSAccessKey"],appConfig["AWSSecretKey"]);
// describe existed instance
DescribeInstancesRequest ec2DescribeInstancesRequest = new DescribeInstancesRequest();
try
{
DescribeInstancesResponse ec2DescribeInstancesResponse = ec2.DescribeInstances(ec2DescribeInstancesRequest);
int numOfInstances = ec2DescribeInstancesResponse.DescribeInstancesResult.Reservation.Count;
Console.WriteLine("Num of instance:" + numOfInstances);
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("sleep 2s");
Thread.Sleep(2000);
// run instance
String imageID = ""; // here should set up imageid
RunInstancesRequest ec2RunInstancesRequest = new RunInstancesRequest().WithImageId(imageID);
try
{
RunInstancesResponse ec2RunInstancesResponse = ec2.RunInstances(ec2RunInstancesRequest);
instanceID = ec2RunInstancesResponse.RunInstancesResult.Reservation.ReservationId;
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("sleep 20s");
Thread.Sleep(20000);
// start an instance
StartInstancesRequest ec2StartInstancesRequest = new StartInstancesRequest().WithInstanceId(instanceID);
try
{
StartInstancesResponse ec2StartInstancesResponse = ec2.StartInstances(ec2StartInstancesRequest);
StartInstancesResult ec2StartInstancesResult = ec2StartInstancesResponse.StartInstancesResult;
if (ec2StartInstancesResult.IsSetStartingInstances())
{
List<InstanceStateChange> instances = ec2StartInstancesResult.StartingInstances;
foreach (InstanceStateChange instance in instances)
{
instanceID = instance.InstanceId;
}
}
Console.WriteLine("Instance is started with instance ID:" + instanceID);
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("sleep 120s");
Thread.Sleep(120000);
// check running instance
RunningInstance runningInstance = new RunningInstance().WithInstanceId(instanceID);
try
{
Console.WriteLine("Private IP Address:" + runningInstance.PrivateIpAddress);
Console.WriteLine("Public DNS Address:" + runningInstance.PublicDnsName);
}
catch(Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("sleep 20s");
Thread.Sleep(20000);
// shutdown the instance
StopInstancesRequest ec2StopInstancesRequest = new StopInstancesRequest().WithInstanceId(instanceID);
try
{
StopInstancesResponse ec2StopInstancesResponse = ec2.StopInstances(ec2StopInstancesRequest);
StopInstancesResult ec2StopInstancesResult = ec2StopInstancesResponse.StopInstancesResult;
if (ec2StopInstancesResult.IsSetStoppingInstances())
{
List<InstanceStateChange> instances = ec2StopInstancesResult.StoppingInstances;
foreach (InstanceStateChange instance in instances)
{
instanceID = instance.InstanceId;
}
Console.WriteLine("Instance is stopped with instance ID:" + instanceID);
}
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("sleep 60s");
Thread.Sleep(60000);
//check number of instance
ec2DescribeInstancesRequest = new DescribeInstancesRequest();
try
{
DescribeInstancesResponse ec2DescribeInstancesResponse = ec2.DescribeInstances(ec2DescribeInstancesRequest);
int numOfInstances = ec2DescribeInstancesResponse.DescribeInstancesResult.Reservation.Count;
Console.WriteLine("Num of instance:" + numOfInstances);
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex.ToString());
}
Console.WriteLine("This is the end of EC2 test.");
}
}
}