Назад | Перейти на главную страницу

Как получить токен клиента AWS для использования с экземплярами запуска aws ec2?

Как описано здесь https://aws.amazon.com/blogs/aws/new-amazon-ec2-feature-idempotent-instance-creation/ AWS CLI обеспечивает идемпотентность aws ec2 run-instances --cli-input-json команда. К сожалению, нет документации о том, как генерируется клиентский токен.

Я обнаружил, что есть ClientToken поле в aws ec2 describe-instances результаты, но, конечно, вы все равно получите следующую ошибку, если попытаетесь ее использовать:

An error occurred (IdempotentParameterMismatch) when calling the RunInstances operation: Arguments on this idempotent request are inconsistent with arguments used in previous request(s).

Как получить токен для использования с --client-token?

Вы придумали!

Ввод любой строки <64 символа будет работать. Вызов описания просто возвращает вам строку токена клиента, используемую для создания экземпляра.

Идея тогда в том, что вы справляетесь с подобными сбоями.

  1. Сгенерируйте клиентский токен, то есть «экземпляр Bobs»
  2. Сделайте успешный вызов экземпляра запуска с токеном клиента
  3. Что-то идет не так на клиенте, например, сценарий не работает или время ожидания истекло.
  4. Ваш код запускается снова и генерирует тот же токен клиента (трюк в том, чтобы это произошло)
  5. Вы получаете успех, но фактически получаете тот же ответ с тем же идентификатором бронирования, который вы получили в первый раз, когда вы сделали запрос, и второй экземпляр не создается

Предлагаю прочитать http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html для получения дополнительной информации об идемпотентности.

Прошло много времени с тех пор, как я кодировал это, но я считаю, что когда я это сделал, мои рабочие использовали идентификатор сообщения SQS в качестве токена клиента, поэтому, если мои рабочие терпят неудачу или sqs доставляются дважды, я не буду утечка экземпляров.