簡體   English   中英

如何在.NET中以編程方式啟動Amazon EC2實例

[英]How to start an Amazon EC2 instance programmatically in .NET

我一直試圖在C#中啟動EC2實例,但沒有走運。

傳入實例ID來啟動實例時,我收到一個錯誤,盡管我傳入的是從對象屬性獲得的實例ID,但找不到該實例。

我將不勝感激與此有關的任何提示或指示。

亞馬遜付出了巨大的努力將其AWS Cloud .Net SDK集成到VS2008和VS 2010中

  • 1-下載並安裝AWS開發工具包 msi
  • 2-創建一個AWS Console項目,輸入您的憑證
    (可從右上角登錄名菜單下的AWS控制台訪問)
  • 3-添加以下代碼(請參見下圖)。
  • 4-完成。 非常簡單。
    您可以通過刷新AWS控制台屏幕來檢查編程啟動/停止成功。

在此處輸入圖片說明

在此處輸入圖片說明

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client();
//Start Your Instance
ec2.StartInstances(new StartInstancesRequest().WithInstanceId("i-00000000"));
//Stop it
ec2.StopInstances(new StopInstancesRequest().WithInstanceId("i-00000000"));

您只需要用實例ID替換“ i-00000000”(在您的AWS管理控制台中可用)

希望這有助於那些使用谷歌搜索和絆倒這個問題的人(就像我自己做的那樣)迅速開始。
通過這些向導執行這些簡單的步驟將為您省去很多麻煩。

請注意,Amazon AWS實例僅存在於一個區域。.如果您的實例ID i-12345位於EU-West-1區域,而您只是創建了一個新的EC2Client並告訴客戶端啟動i-12345,則可能會抱怨它找不到該實例,因為客戶端是在沒有i-12345實例的us-east-1地區啟動的

您創建cient的電話應該指定區域,如果它不是默認區域(我不知道哪個AWS區域是默認區域,那么我每次都指定):

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
 new Amazon.EC2.AmazonEC2Config().WithServiceURL("https://eu-west-1.ec2.amazonaws.com")
); 

嘗試使用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", ""))))
);

(注意:.WithUserData()是可選的,並且在上面用於傳遞簡短的shell腳本。)

如果調用成功,則響應應包含實例列表。 您可以使用類似這樣的方法來創建“實例ID”列表:

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
     ...
}

嘗試這個。

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

好的,這是完整的端到端指令。 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 }
            });

        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM