Установите группы безопасности в ALB aws

#python #amazon-web-services #aws-cdk

Вопрос:

Я пытаюсь настроить несколько групп безопасности для своего ALB. Это код, который я написал:

 def set_alb_security_group(cfd_sg):
    global ALB_ARN
    
    client = boto3.client('elb', 'eu-central-1')
    result = client.apply_security_groups_to_load_balancer(
        LoadBalancerName='Jenkins-ELB',
        SecurityGroups=['sg-088257e3c09954802', 'sg-0f99e3a27f7ceb393', 'sg-0c262b4c866c7258a']
    )
    logging.info(result)
 

К сожалению, это не работает, и вот код, который я получаю:

 {
  "errorMessage": "An error occurred (LoadBalancerNotFound) when calling the ApplySecurityGroupsToLoadBalancer operation: There is no ACTIVE Load Balancer named 'Jenkins-ELB'",
  "errorType": "AccessPointNotFoundException",
  "stackTrace": [
    "  File "/var/task/lambda.py", line 44, in lambda_handlern    update_security_groups(cf_ranges)n",
    "  File "/var/task/lambda.py", line 58, in update_security_groupsn    rangeToUpdate = get_security_groups_for_update(client, True)n",
    "  File "/var/task/lambda.py", line 245, in get_security_groups_for_updaten    return create_security_groups(client, response)n",
    "  File "/var/task/lambda.py", line 227, in create_security_groupsn    set_alb_security_group(created_sgs)n",
    "  File "/var/task/lambda.py", line 279, in set_alb_security_groupn    result = client.apply_security_groups_to_load_balancer(n",
    "  File "/var/runtime/botocore/client.py", line 386, in _api_calln    return self._make_api_call(operation_name, kwargs)n",
    "  File "/var/runtime/botocore/client.py", line 705, in _make_api_calln    raise error_class(parsed_response, operation_name)n"
  ]
}
 

Я на 100% уверен, что у меня есть балансировщик нагрузки с точно таким именем.
Что я здесь делаю не так? Спасибо!

Ответ №1:

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

client = boto3.client('elb', 'eu-central-1')

Документация:

Эта ссылка охватывает API 2012-06-01, который поддерживает классические балансировщики нагрузки


Чтобы создать клиент, работающий с балансировщиками нагрузки приложений, необходимо указать elbv2 тип клиента:

client = boto3.client('elbv2, 'eu-central-1')

Документация:

Эта ссылка охватывает следующие типы балансировщиков нагрузки:

Балансировщик нагрузки приложений — Работает на уровне приложений (уровень 7) и поддерживает HTTP и HTTPS.

Балансировщик сетевой нагрузки — Работает на транспортном уровне (уровень 4) и поддерживает TCP, TLS и UDP.

Балансировщик нагрузки шлюза — Работает на сетевом уровне (уровень 3).

Ответ №2:

Вы используете «elb» в качестве клиента, который используется только для «классических» балансировщиков нагрузки. Поскольку вы используете ALB, вы должны использовать «elbv2» в качестве клиента