Постановка проблемы: при регистрации нового 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?
@ShaykiAbramczyk Как проверить это локально? Поскольку IP-адреса регистрируются в AWS, и мой рабочий процесс на GitHub запускается всякий раз, когда в ветке происходит что-либо push
.
Выполните аутентификацию в своей учетной записи aws со своего ноутбука и выполните команды.
@ShaykiAbramczyk Конечно, я тоже проверю и проверю таким же образом и сообщу вам результат.
@ShaykiAbramczyk - я пытался отменить регистрацию IP-адреса моего Mac с помощью aws cli. Эта команда aws elbv2 deregister-targets --target-group-arn $AWS_TARGET_GROUP_ARN --targets Id=$IP
выполнена успешно и не вызвала никаких ошибок. Но в группе AWS tagrget IP-адрес не отменяется или не удаляется.
Несмотря на то, что политика подстановочных знаков разрешает все действия, попробуйте указать необходимые разрешения.
{
"Version": "****-**-**",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DeregisterTargets"
],
"Resource": "*"
}
]
}
Я попробовал этот способ, но он не работает.
Убедитесь, что идентификаторы целей, которые вы пытаетесь отменить, имеют правильный формат. Иногда идентификаторы могут содержать дополнительные символы или иметь неверный формат.
Я могу решить эту проблему, добавив порт в конце команды deregister-targets
.
Действительно ли команда локально (не в действиях github) отменяет регистрацию IP?