2014-07-09 219 views
1

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

基于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的更新版本?

+0

只是为了进行仔细的检查,你确定你'只为根卷创建1 BlockDeviceMapping? –

+0

@HyperAnthony是的,我很确定。在使用“标准”EBS卷(我正在尝试更改)的生产代码中,我甚至没有在RunInstancesRequest中指定根设备,只有第二个“xvdf”设备。 –

+0

您可以使用已经配置了GP2卷的2012R2 Windows AMI之一吗?您可以使用以下命令(假设您已安装适用于Windows Powershell的AWS Tools)获取可用AMI的列表 - Get-EC2ImageByName - 名称Windows_Server-2012-R2_RTM-English-64Bit-GP2 * –

回答

2

使用下面的代码和AWS SDK用于.NET的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); 
+0

这也适用于我。有趣的是,DeviceName似乎是关键。 “sda1”会抛出,但“/ dev/sda1”通过。非常感谢! –