Операция PutLifecycleHook: невозможно опубликовать тестовое сообщение для цели уведомления (FIFO)
Есть много документов, объясняющих, как устранить эту ошибку. Проверял многие из них и пробовал. Однако следование им не решает для меня эту проблему.
Я получаю ошибку
Произошла ошибка (ValidationError) при вызове операции PutLifecycleHook: невозможно опубликовать тестовое сообщение для цели уведомления arn:aws:sqs:xxxxx:XXXXX:kubeeventsqueue.fifo с использованием роли IAM arn:aws:iam::XXXXXXXXX:role/kubeautoscaling. Пожалуйста, проверьте свою цель и конфигурацию ролей и попробуйте снова установить ловушку жизненного цикла.
Я использую следующую команду:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name terminate --auto-scaling-group-name mygroupname --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING --role-arn arn:aws:iam:: XXXXXX: role / kubeautoscaling --notification-target-arn arn:aws:sqs:xxxxx: XXXXXXX: kubeeventsqueue.fifo
Обратите внимание, что я заменил XXXXX на действительные идентификаторы, указанные выше.
Соответствующая роль (arn:aws:iam::XXXXXX:role/kubeautoscaling
) имеет доверительные отношения с autoscaling.amazonaws.com. К нему также прикреплена политика "AutoScalingNotificationAccessRole".
Во время тестирования я также попытался добавить разрешение "Разрешить всем" для всех действий SQS (SQS:*). (Хотя после тестирования удалил).
Я также попытался сначала создать очередь SQS, а затем настроить --notification-target-arn
, безуспешно.
Любая помощь по этому поводу была бы очень полезной.
2 ответа
Похоже, вы используете очередь Amazon SQS FIFO (first-in-first-out).
Очереди FIFO несовместимы с обработчиками жизненного цикла.
Я не знаю, является ли это причиной вашей текущей ошибки, но это помешает работе желаемой конфигурации.
Да, очереди FIFO определенно не поддерживаются LifeCycleHooks. Я потратил много времени на работу с разрешениями и настройкой очереди только для того, чтобы наконец обнаружить, что FIFO не поддерживается. Было бы хорошо, если бы это было более заметно в документации, потому что 1) это неочевидно или интуитивно понятно и 2) полученное сообщение об ошибке предполагает, что это разрешения или что-то в этом роде. Как насчет явного указания "Очереди FIFO не поддерживаются" вместо "Не удалось отправить тестовое сообщение..." НЕДОСТАТОЧНО!