AWS: отмена регистрации нездоровых IP-адресов из зарегистрированных целей (целевая группа) с помощью рабочего процесса действий GitHub не работает

Постановка проблемы: при регистрации нового IP-адреса в ELB Fargate в разделе «Целевая группа» старый IP-адрес перешел в статус Unhealthy. Я хочу Deregister старый IP автоматически с помощью рабочего процесса действий Github.

Что я пробовал до сих пор?

Это three шаги, которые я добавил в существующий файл рабочего процесса (добавлены описательные комментарии к шагам ниже для большего пояснения).

name: List Targets
id: list-targets <!-- Assigns an ID to this step for reference in later steps. -->
env:
  AWS_TARGET_GROUP_ARN: ${{ inputs.AWS_TARGET_GROUP_ARN }}
run: |
  aws elbv2 describe-target-health --target-group-arn $AWS_TARGET_GROUP_ARN > targets.json <!-- Executes an AWS CLI command to retrieve the target health descriptions for the specified target group and saves the output to targets.json. -->
cat targets.json <!-- Prints the content of `targets.json` to the log for debugging purposes. -->


name: Filter Unused IPs
id: filter-unused-ips <!-- Assigns an ID to this step for reference in later steps. -->
run: |
  jq -r '.TargetHealthDescriptions[] | select(.TargetHealth.State == "unhealthy") | .Target.Id' targets.json > unused-ips.txt <!-- Here, Filter targets where the health state is "unhealthy". Then, Extract the IP addresses of these targets and write the unused IPs to unused-ips.txt. -->
  cat unused-ips.txt <!-- Prints the content of unused-ips.txt to the log for debugging purposes. -->
  if [[ -s unused-ips.txt ]]; then <!-- Checks if unused-ips.txt is non-empty and sets an environment variable unused-ips to true or false accordingly using $GITHUB_ENV. -->
    echo "unused-ips=true" >> $GITHUB_ENV
  else
    echo "unused-ips=false" >> $GITHUB_ENV
  fi


name: Deregister Unused IPs
if: env.unused-ips == 'true' <!-- This step will only run if the environment variable unused-ips is set to true. -->
env:
  AWS_TARGET_GROUP_ARN: ${{ inputs.AWS_TARGET_GROUP_ARN }}
run: |
  while IFS= read -r IP; do <!-- It reads each IP address from unused-ips.txt and deregisters it from the target group using the AWS CLI. -->
    echo "Deregistering $IP"
    aws elbv2 deregister-targets --target-group-arn $AWS_TARGET_GROUP_ARN --targets Id=$IP || echo "Failed to deregister $IP"
  done < unused-ips.txt

Все эти этапы рабочего процесса выполняются нормально, без каких-либо проблем, и я также вижу этот оператор печати Deregistering <IP> в конце, но почему-то IPs не отменяю регистрацию из целевых групп.

Кроме того, я попытался отменить его регистрацию через aws-cli со своего ноутбука, и команда выполнена успешно, но IP по-прежнему не отменяет регистрацию/очистку в консоли AWS.

echo "Attempting to deregister <IP> from <AWS_TARGET_GROUP_ARN>"
result=$(aws elbv2 deregister-targets --target-group-arn <AWS_TARGET_GROUP_ARN> --targets Id=<IP> 2>&1)
echo "Command result: $result"

Из приведенных выше команд он печатает $result как пустой и не показывает никаких ошибок.

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

Эта политика прикреплена к пользователю, и я не думаю, что есть какие-либо проблемы с разрешениями.

{
    "Version": "****-**-**",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

Может ли кто-нибудь помочь мне понять, почему нездоровые IP-адреса целевой группы не отменяются от регистрации в консоли AWS?

Действительно ли команда локально (не в действиях github) отменяет регистрацию IP?

Shayki Abramczyk 27.06.2024 16:11

@ShaykiAbramczyk Как проверить это локально? Поскольку IP-адреса регистрируются в AWS, и мой рабочий процесс на GitHub запускается всякий раз, когда в ветке происходит что-либо push.

Rohìt Jíndal 27.06.2024 16:49

Выполните аутентификацию в своей учетной записи aws со своего ноутбука и выполните команды.

Shayki Abramczyk 27.06.2024 17:57

@ShaykiAbramczyk Конечно, я тоже проверю и проверю таким же образом и сообщу вам результат.

Rohìt Jíndal 27.06.2024 18:48

@ShaykiAbramczyk - я пытался отменить регистрацию IP-адреса моего Mac с помощью aws cli. Эта команда aws elbv2 deregister-targets --target-group-arn $AWS_TARGET_GROUP_ARN --targets Id=$IP выполнена успешно и не вызвала никаких ошибок. Но в группе AWS tagrget IP-адрес не отменяется или не удаляется.

Rohìt Jíndal 28.06.2024 09:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Несмотря на то, что политика подстановочных знаков разрешает все действия, попробуйте указать необходимые разрешения.

{
  "Version": "****-**-**",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticloadbalancing:DescribeTargetHealth",
        "elasticloadbalancing:DeregisterTargets"
      ],
      "Resource": "*"
    }
  ]
}

Я попробовал этот способ, но он не работает.

Rohìt Jíndal 28.06.2024 10:39

Убедитесь, что идентификаторы целей, которые вы пытаетесь отменить, имеют правильный формат. Иногда идентификаторы могут содержать дополнительные символы или иметь неверный формат.

kundan Antyakula 28.06.2024 20:10
Ответ принят как подходящий

Я могу решить эту проблему, добавив порт в конце команды deregister-targets.

Другие вопросы по теме