gpt4 book ai didi

c# - 使用 C# SDK 创建 Amazon AMI 但仅包含根卷

转载 作者:行者123 更新时间:2023-11-30 22:12:03 24 4
gpt4 key购买 nike

我已经编写了使用 C# SDK 创建 AMI 的代码,但无法创建仅包含根卷的 AMI。默认情况下,它会创建 AMI,并将所有 EBS 卷附加到实例。例如。如果它有 4 个卷,它将创建一个具有 4 个关联快照的 AMI,而我只需要包含 C:\drive(根驱动器)。我知道您必须使用 BlockDeviceMapping 来指定音量,但不确定实现方式,我们将不胜感激。

public static void CreateAMI(string InstanceID, string AMIName, string AMIDescription)
{
try
{

Console.WriteLine("Creating AMI for InstanceID" + InstanceID);

AmazonEC2Config config = new AmazonEC2Config();
config.ProxyHost = ConfigurationManager.AppSettings["PROXYHOST"];
config.ProxyPort = Convert.ToInt32(ConfigurationManager.AppSettings["PROXYPORT"])
config.ServiceURL = "https://ec2." + Program.options.Region + ".amazonaws.com";

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(Program.options.AccessKey, Program.options.SecretKey, config);

CreateImageRequest rq = new CreateImageRequest();

rq.InstanceId = InstanceID;
rq.Name = AMIName;
rq.Description = AMIDescription;
rq.NoReboot = true;

/* BlockDeviceMapping BMapping = new BlockDeviceMapping();
BMapping.DeviceName = "/dev/sda1";
rq.BlockDeviceMapping.Add(BMapping); */

CreateImageResponse rs = ec2.CreateImage(rq);
string AMIid = rs.CreateImageResult.ImageId;
Console.WriteLine("AMI Created with AMIid: " + AMIid);
Console.ReadLine();
}
catch (Exception err)
{
Console.WriteLine(err.Message + "/n" + err.StackTrace);
}

}

最佳答案

我认为您需要将其他设备的 EBS 属性指定为 Null 并将 NoDevice 属性指定为某些内容,以使它们不属于您的 AMI。您的代码应如下所示。

//Create Drive Mapping List
var blockDeviceMappingList = new List<BlockDeviceMapping>();

//Create Mappings
var blockDeviceMapping = new BlockDeviceMapping();
var blockDeviceMapping2 = new BlockDeviceMapping();

//Specif a mount point of the drive you want (root)
blockDeviceMapping.DeviceName = "/dev/sda1";
var ebsBlockDevice = new EbsBlockDevice();

//Set something other than null constructor or u get an error about EBS not set. Likely has to do with how they build the request to send to the server
ebsBlockDevice.VolumeType = VolumeType.Standard;
blockDeviceMapping.Ebs = ebsBlockDevice;

//Specif a mount point of the unwanted drive and set EBS to null and NoDevice
blockDeviceMapping2.DeviceName = "/dev/sdf";
blockDeviceMapping2.Ebs = null;
blockDeviceMapping2.NoDevice = string.Empty;

//Add the mappings to the list
blockDeviceMappingList.Add(blockDeviceMapping);
blockDeviceMappingList.Add(blockDeviceMapping2);

//Setup Request
createImageRequest.BlockDeviceMappings = blockDeviceMappingList;

=)

关于c# - 使用 C# SDK 创建 Amazon AMI 但仅包含根卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com