【问题标题】:How can I configure a gp2 boot volume for my Windows EC2 instances?如何为我的 Windows EC2 实例配置 gp2 启动卷?
【发布时间】:2014-07-10 07:49:06
【问题描述】:

我想使用新的“gp2”卷类型作为我的 Windows 实例的启动卷,使用来自 Amazon 的开箱即用的 Windows AMI(例如 ami-527b823a)和适用于 .NET 的 AWS 开发工具包(v2.1.7 - 2014 年 7 月 9 日最新)。如何配置我的运行实例请求?

基于the post on the AWS blog,我尝试设置一个BlockDeviceMapping:

new RunInstancesRequest {
    ...
    BlockDeviceMappings = {
        BlockDeviceMapping {
            DeviceName = "sda1",
            Ebs = new EbsBlockDevice { VolumeType = VolumeType.Gp2 }
        },
        new BlockDeviceMapping {
            DeviceName = "xvdf",
            Ebs = new EbsBlockDevice {
                SnapshotId = SNAPSHOT_ID
                DeleteOnTermination = true,
                VolumeType = VolumeType.Gp2
            }
        }
        ...
    }
}

但这不起作用,我遇到了一个不足为奇的异常:

Amazon.EC2.AmazonEC2Exception: The device 'sda1' is used in more than one
block-device mapping ---> System.Net.WebException: The remote server
returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.GetResponse()
   ...

是否可以将我的 Windows 实例的启动(根)卷设置为 gp2?还是我需要等待 SDK 的更高版本?

【问题讨论】:

  • 只是为了进行健全性检查,您确定您只为根卷创建 1 个 BlockDeviceMapping 吗?
  • @HyperAnthony 是的,我确定。在我使用“标准”EBS 卷(我正在尝试更改)的生产代码中,我什至没有在 RunInstancesRequest 中指定根设备,只指定第二个“xvdf”设备。
  • 您能否使用已经配置了 GP2 卷的 2012R2 Windows AMI 之一?您可以使用以下命令获取可用 AMI 的列表(假设您已安装适用于 Windows Powershell 的 AWS 工具)- Get-EC2ImageByName -Names Windows_Server-2012-R2_RTM-English-64Bit-GP2*
  • @WadeMatveyenko 我正在使用 2008R2,并且需要在可预见的未来继续这样做。我希望我可以使用 -GP2 AMI,但在实例上运行的软件不支持 2012R2。

标签: .net amazon-web-services amazon-ec2 amazon-ebs


【解决方案1】:

使用以下代码和适用于 .NET 的 AWS 开发工具包 2.1.7 版,我能够使用 GP2 EBS 根卷成功启动:

BlockDeviceMapping mapping = new BlockDeviceMapping
{
    DeviceName = "/dev/sda1",
    Ebs = new EbsBlockDevice
    {
        VolumeType = VolumeType.Gp2,
        VolumeSize = 30
    }
};
var request = new RunInstancesRequest
{
    BlockDeviceMappings = { mapping },
    ImageId = "ami-527b823a",
    InstanceType = InstanceType.M1Small,
    MinCount = 1,
    MaxCount =1
};
var ec2Client = new AmazonEC2Client(RegionEndpoint.USEast1);
ec2Client.RunInstances(request);

【讨论】:

  • 这也适用于我。有趣的是,DeviceName 似乎是这里的关键。 “sda1”抛出,但“/dev/sda1”轻而易举地通过。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 2010-09-24
  • 2018-07-14
  • 1970-01-01
相关资源
最近更新 更多