Использование C # для запроса AWS EC2 SpotInstance завершается неудачно с Value () для параметра groupId недопустим - PullRequest
0 голосов
/ 27 февраля 2019

Я следую этому уроку:

https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/how-to-spot-instances.html

И создал функцию C # Lambda для тестирования создания точечного экземпляра.Рассматриваемая функция:

public async static Task<SpotInstanceRequest> RequestSpotInstance(
      AmazonEC2Client ec2Client,
      string amiId,
      string securityGroupName,
      InstanceType instanceType,
      string spotPrice,
      int instanceCount)
{
    var request = new RequestSpotInstancesRequest();

    request.SpotPrice = spotPrice;
    request.InstanceCount = instanceCount;

    var launchSpecification = new LaunchSpecification();
    launchSpecification.ImageId = amiId;
    launchSpecification.InstanceType = instanceType;

    launchSpecification.SecurityGroups.Add(securityGroupName);

    request.LaunchSpecification = launchSpecification;

    var result = await ec2Client.RequestSpotInstancesAsync(request);
    return result.SpotInstanceRequests[0];
}

Однако выполнение функции завершается неудачно с:

START RequestId: c64ea78d-d350-4f24-974c-09f31d16c5fd Version: $LATEST
One or more errors occurred. (Value () for parameter groupId is invalid. The value cannot be empty): AggregateException
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at lambda_method(Closure , Stream , Stream , LambdaContextInternal )

Я подтвердил, что ссылаюсь на группу безопасности, которая является действительной и существует.Я пробовал groupId, имя группы и «Имя» для vale securityGroupId, но возникает та же ошибка.Куда я здесь не так?Я выполнил некоторые поиски, и они указывают, что эта ошибка может быть вызвана использованием идентификатора группы безопасности вместо имени группы, но я попробовал все доступные ссылки для группы безопасности с тем же результатом.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Хорошо, похоже, пример кода неправильный.Я немного поэкспериментировал и обнаружил, что вы должны ссылаться на группу безопасности следующим образом:

    GroupIdentifier group = new GroupIdentifier { GroupName = "InSite App SG" };
    launchSpecification.AllSecurityGroups = new List<GroupIdentifier> { group };

Кажется, это верно и работает.Не уверен, что это актуально или нет, но я также указал подсеть для полноты.Поэтому я думаю, что пример кода AWS должен быть обновлен, чтобы отразить, что вместо того, чтобы использовать строку для имени группы, вы должны создать экземпляр экземпляра GroupIdentifier, добавить его в список GroupIdentifier, а затем передать его в LaunchSpecification.

0 голосов
/ 27 февраля 2019

С LaunchSpecification Class |AWS SDK для .NET V3 , похоже, что SecurityGroups имеет тип System.Collections.Generic.List<System.String>.

Пример кода может быть неправильным.Попробуйте сначала создать список, а затем добавить к нему группу безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...