簡體   English   中英

.Net AWS 服務器管理器

[英].Net AWS Server Manager

我正在嘗試構建一個簡單的應用程序來啟動、停止和更改 AWS 實例的實例類型。

最終目標:實例類型 - 增加或減少實例類型(t1.micro、t1.large 等)啟動/停止實例 -

我目前的問題是關於下面的代碼:

InstanceState Start(RunningInstance instance)
        {
            using (var client = CreateClient())
            {
                var confirmStart = MessageBox.Show("Are you sure you want to START this server?", "Start Server", MessageBoxButtons.YesNo);
                if (confirmStart == DialogResult.Yes)
                {
                    var doubleCheck = MessageBox.Show("Start the Server?", "Are you sure?", MessageBoxButtons.YesNo);
                    if (doubleCheck == DialogResult.Yes)
                    {
                        var request = new StartInstancesRequest();
                        request.InstanceId.Add(instance.InstanceId);
                        var response = client.StartInstances(request);
                        return response.StartInstancesResult.StartingInstances[0].CurrentState;
                    }
                    else
                        return null;

                }
                else
                    return null;
            }
        }

基本上,仔細檢查是否要“啟動”服務器。 如果用戶決定他們不想啟動服務器,我需要它“什么都不做”,對於沒有任何變化的方面返回空“工作”; 但是,我收到了 NullReferenceException(預期)。 為了在不使用 Null 的情況下“什么都不做”或保持當前狀態,我可以返回什么?

附帶說明 - 我仍然是 AWS .Net SDK 的新手,所以任何提示都將不勝感激。

在我看來,即使您沒有啟動它,您也可以在所有情況下簡單地檢索實例的當前狀態。

要獲取您不打算啟動的實例的實例狀態,您需要調用另一個描述該實例的 API。 有幾種可以返回實例狀態,以下是針對不同用例的一些建議:

  • 如果您還打算返回實例元數據,或者不確定您可能需要哪些所有信息並想要一個完整的 RunningInstance 對象,請使用 DescribeInstances。
  • 如果您只需要狀態,DescribeInstanceStatus 將返回一個較小的響應。

DescribeInstanceStatus 示例

這是您可以從兩個 else 語句調用的最小示例函數。 在您沒有啟動實例的情況下,您將使用它來提供 InstanceState。

private InstanceState getInstanceState(string instanceId)
{
    using (IAmazonEC2 client = new AmazonEC2Client())
    {
        var statusResponse = client.DescribeInstanceStatus(new DescribeInstanceStatusRequest()
        {
            InstanceIds = new List<string>() { instanceId }
        });

        return statusResponse?.InstanceStatuses?.FirstOrDefault(
            x => x.InstanceId == instanceId).InstanceState;
    }
}

錯誤處理

請注意,如果輸入的 InstanceId 無效,DescribeInstanceStatus 將拋出狀態代碼為 400 BadRequest 的AmazonEC2Exception 您似乎已經在驗證實例的存在,但是如果打算讓一個層像這樣直接使用 AWS API,您可能希望將該層包裝在 try/catch 中,捕獲 AmazonEC2Exception,並優雅地處理來自AWS API 以這種方式。

例如,調用 DescribeInstanceStatus 可能僅僅是因為 InstanceId 無效,但也可能只是暫時性故障,甚至可能是由於您所在地區的 EC2 服務出現故障。 如果 EC2 服務不可用,您的應用程序同樣將無法做很多事情,因此請確保您捕獲該服務並通過優雅的錯誤處理將其傳達給您的用戶。

進一步閱讀

暫無
暫無

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

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