我一直在尝试使用C#启动EC2实例,但是没有成功。
当传递实例ID以启动实例时,我会收到一个错误,指出无法找到该实例,即使我已经从对象属性中获取了实例ID并传递给了函数。
我一直在尝试使用C#启动EC2实例,但是没有成功。
当传递实例ID以启动实例时,我会收到一个错误,指出无法找到该实例,即使我已经从对象属性中获取了实例ID并传递给了函数。
Amazon付出了巨大的努力,将其AWS云.NET SDK集成到VS2008和VS2010中。
AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client();
//Start Your Instance
ec2.StartInstances(new StartInstancesRequest().WithInstanceId("i-00000000"));
//Stop it
ec2.StopInstances(new StopInstancesRequest().WithInstanceId("i-00000000"));
只需要将“i-00000000”替换为您的实例ID(在AWS管理控制台中可用)。
希望这能帮助那些通过谷歌搜索并偶然查看此问题(正如我自己所做的)快速开始。通过这些向导遵循这些简单步骤将为您节省相当多的麻烦。
使用AWSSDK,您可以尝试以下操作来启动“镜像 ID”的新实例:
RunInstancesResponse response = Client.RunInstances(new RunInstancesRequest()
.WithImageId(ami_id)
.WithInstanceType(instance_type)
.WithKeyName(YOUR_KEYPAIR_NAME)
.WithMinCount(1)
.WithMaxCount(max_number_of_instances)
.WithUserData(Convert.ToBase64String(Encoding.UTF8.GetBytes(bootScript.Replace("\r", ""))))
);
if (response.IsSetRunInstancesResult() && response.RunInstancesResult.IsSetReservation() && response.RunInstancesResult.Reservation.IsSetRunningInstance())
{
List<string> instance_ids = new List<string>();
foreach (RunningInstance ri in response.RunInstancesResult.Reservation.RunningInstance)
{
instance_ids.Add(ri.InstanceId);
}
// do something with instance_ids
...
}
AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
new Amazon.EC2.AmazonEC2Config().WithServiceURL("https://eu-west-1.ec2.amazonaws.com")
);
好的,这是完整的端到端指令。
1.使用Nuget包管理器安装AWSSDK.Core和AWSSDK.EC2。
2.然后将整个类复制到您的项目中。AccessKey和Secret在AWS IAM中获取。您需要确保创建的用户具有“AmazonEC2FullAccess”(您可能可以使用较低级别的权限策略,在这里我只是懒惰:D)。region是您的AW S EC2实例区域。实例ID可以在EC2仪表板列表中找到。简单易行,完美运作...您还可以编写额外的代码来管理响应对象。
3.如果您在代理后面,请注意您必须进行配置(我没有在此处包含代码)。
public class AWSClass : IDisposable
{
Amazon.EC2.AmazonEC2Client _client;
public AWSClass(string region, string AccessKey, string Secret)
{
RegionEndpoint EndPoint = RegionEndpoint.GetBySystemName(region);
Amazon.Runtime.BasicAWSCredentials Credentials = new Amazon.Runtime.BasicAWSCredentials(AccessKey, Secret);
_client = new AmazonEC2Client(Credentials, EndPoint);
}
public void Dispose()
{
_client = null;
}
public void StopInstance(string InstanceID)
{
StopInstancesResponse response = _client.StopInstances(new StopInstancesRequest
{
InstanceIds = new List<string> {InstanceID }
});
//Can also do something with the response object too
}
public void StartInstance(string InstanceID)
{
StartInstancesResponse response = _client.StartInstances(new StartInstancesRequest
{
InstanceIds = new List<string> { InstanceID }
});
}
}
试一试。
var startRequest = new StartInstancesRequest
{
InstanceIds = new List<string>() { instanceId }
};
bool isError = true;
StartInstancesResponse startInstancesResponse = null;
while (isError)
{
try
{
startInstancesResponse=amazonEc2client.StartInstances(startRequest);
isError = false;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
isError = true;
}
}