Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中以编程方式启动AmazonEC2实例_C#_.net_Amazon Ec2_Amazon - Fatal编程技术网

C# 如何在.NET中以编程方式启动AmazonEC2实例

C# 如何在.NET中以编程方式启动AmazonEC2实例,c#,.net,amazon-ec2,amazon,C#,.net,Amazon Ec2,Amazon,我一直在尝试在C#中启动一个EC2实例,但运气不好 当传入实例id以启动实例时,我得到一个错误,即尽管我传入了从object属性获得的实例id,但找不到该实例 我将非常感谢任何与此相关的提示或指针。尝试类似的方法来启动“图像id”的新实例: (注意:.WithUserData()是可选的,上面用于传递一个简短的shell脚本。) 如果调用成功,响应应包含实例列表。您可以使用类似的方法创建“实例ID”列表: if(response.isseTrunInstanceResult()&&respons

我一直在尝试在C#中启动一个EC2实例,但运气不好

当传入实例id以启动实例时,我得到一个错误,即尽管我传入了从object属性获得的实例id,但找不到该实例


我将非常感谢任何与此相关的提示或指针。

尝试类似的方法来启动“图像id”的新实例:

(注意:.WithUserData()是可选的,上面用于传递一个简短的shell脚本。)

如果调用成功,响应应包含实例列表。您可以使用类似的方法创建“实例ID”列表:

if(response.isseTrunInstanceResult()&&response.runInstanceResult.IsSetReservation()&&response.runInstanceResult.Reservation.IsSetRunningInstance())
{
列表实例_id=new List();
foreach(响应中的RunningInstance ri.RunInstanceResult.Reservation.RunningInstance)
{
实例id.Add(ri.InstanceId);
}
//使用实例ID执行某些操作
...
}

亚马逊做出巨大努力,将其AWS Cloud.Net SDK集成到VS2008和VS2010中

  • 1-下载并安装msi
  • 2-创建AWS控制台项目,输入您的凭据
    (可从右上角登录名菜单下的AWS控制台获得)
  • 3-添加以下代码(参见下图)
  • 4-你的任务完成了。这很简单
    您可以通过刷新AWS控制台屏幕来检查编程启动/停止成功

您只需将“i-00000000”替换为实例Id(可在AWS管理控制台中获得)


希望这有助于那些在谷歌上搜索并在这个问题上结结巴巴的人(就像我自己一样)尽快开始。通过这些向导遵循这些简单的步骤会让你省去很多麻烦。

请注意,亚马逊AWS实例只存在于一个地区。。如果您的实例id i-12345位于EU-West-1地区,您只需创建一个新的EC2Client并告诉客户端启动i-12345,它可能会抱怨找不到该实例,因为客户端启动于us-east-1地区,而该地区没有i-12345实例

创建cient的调用应该指定区域,如果它不是默认区域(我不知道哪个AWS区域是默认区域,所以每次都指定):

试试这个

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;
                    }
                }
var startRequest=新的StartInstanceRequest
{
instanceId=新列表(){instanceId}
};
bool-isError=true;
StartInstanceResponse StartInstanceResponse=null;
while(isError)
{
尝试
{
StartInstanceResponse=amazonEc2client.StartInstances(startRequest);
isError=错误;
}
捕获(例外情况除外)
{
Console.WriteLine(例如Message+“\n”+例如StackTrace);
isError=真;
}
}

好的,这是完整的端到端说明。 1.使用Nuget软件包管理器安装AWSSDK.Core和AWSSDK.EC2。
2.然后将整个课程复制到你的项目中。AccessKey和Secret是在AWS IAM中获得的。您需要确保您创建的用户具有“AmazonEC2FullAccess”(您可能可以使用较低级别的权限策略,我在这里很懒:D)。区域是您的AW S EC2实例区域。实例ID可以在EC2仪表板列表中找到。简单,工作完美。。。您还可以编写额外的代码来管理响应对象。 3.请注意,如果您使用的是代理,则必须对其进行配置(我在这里没有包含代码)

公共类AWSClass:IDisposable
{
Amazon.EC2.AmazonEC2Client\u客户端;
公共AWSClass(字符串区域、字符串访问密钥、字符串机密)
{
RegionEndpoint=RegionEndpoint.GetBySystemName(区域);
Amazon.Runtime.BasicAWSCredentials=new Amazon.Runtime.BasicAWSCredentials(AccessKey,Secret);
_客户端=新的AmazonEC2Client(凭据、端点);
}
公共空间处置()
{
_client=null;
}
公共void StopInstance(字符串InstanceID)
{
StopInstanceResponse=\u client.StopInstances(新的StopInstancesRequest
{
InstanceID=新列表{InstanceID}
});
//也可以对响应对象执行某些操作
}
公共无效起始状态(字符串实例ID)
{
StartInstanceResponse=\u客户端.StartInstances(新的StartInstanceRequest
{
InstanceID=新列表{InstanceID}
});
}
}
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();
//Start Your Instance
ec2.StartInstances(new StartInstancesRequest().WithInstanceId("i-00000000"));
//Stop it
ec2.StopInstances(new StopInstancesRequest().WithInstanceId("i-00000000"));
AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
 new Amazon.EC2.AmazonEC2Config().WithServiceURL("https://eu-west-1.ec2.amazonaws.com")
); 
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;
                    }
                }
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 }
            });

        }

    }