如何使用AWS SDK for .Net为我拥有的实例创建图像? (AMI)

时间:2015-04-07 15:12:37

标签: c# amazon-web-services sdk

我有一个Amazon EC2实例,我需要能够以编程方式从中创建AMI(图像)。我正在尝试以下方法:

CreateImageRequest rq = new CreateImageRequest();

rq.InstanceId = myInstanceID;
rq.Name = instance.KeyName;
rq.Description = "stam";
rq.NoReboot = true;

IAmazonEC2 ec2;
AmazonEC2Config ec2conf = new AmazonEC2Config();
ec2 = AWSClientFactory.CreateAmazonEC2Client(ec2conf);
// CreateImageResponse imageResp;
Amazon.EC2.Model.CreateImageResponse imageResp = null;
try
{
    imageResp = ec2.CreateImage(rq);
}
catch (AmazonServiceException ase)
{
    MessageBox.Show(ase.Message);
}

结果始终是AmazonServiceException,表示存在NameResolutionFailure。

我如何克服这个问题?我尝试了不同的可能" name"可能性,但找不到合适的。

2 个答案:

答案 0 :(得分:1)

string amiID = ConfigurationManager.AppSettings[AmazonConstants.AwsImageId];
                string keyPairName = ConfigurationManager.AppSettings[AmazonConstants.AwsKeyPair];
                List<string> groups = new List<string>() { ConfigurationManager.AppSettings[AmazonConstants.AwsSecurityGroupId] };
                var launchRequest = new RunInstancesRequest()
                {
                    ImageId = amiID,
                    InstanceType = ConfigurationManager.AppSettings[AmazonConstants.AwsInstanceType],
                    MinCount = 1,
                    MaxCount = 1,
                    KeyName = keyPairName,
                    SecurityGroupIds = groups,
                    SubnetId = ConfigurationManager.AppSettings[AmazonConstants.AwsSubnetId]
                };
                RunInstancesResponse runInstancesResponse = amazonEc2client.RunInstances(launchRequest);
                RunInstancesResult runInstancesResult = runInstancesResponse.RunInstancesResult;
                Reservation reservation = runInstancesResult.Reservation;

答案 1 :(得分:0)

问题最终解决了!

事实证明,一些代码行正在做已经完成的事情并删除了这部分:

IAmazonEC2 ec2;
AmazonEC2Config ec2conf = new AmazonEC2Config();
ec2 = AWSClientFactory.CreateAmazonEC2Client(ec2conf);
// CreateImageResponse imageResp;
Amazon.EC2.Model.CreateImageResponse imageResp = null;

让事情更清晰,没有错误的重复发生!现在它有效!