AWS beanstalk PrivateLink не подключается
У меня следующая установка
- Один VPC
- 2 общедоступные подсети в 2 AZ (содержащие приложение AWS Beanstalk с предоставлением API)
- 2 частные подсети в 2 AZ (содержащие лямбда-функцию)
- 1 Интерфейс конечной точки VPC для эластичного beanstalk (имя сервиса com.amazonaws.us-east-2.elasticbeanstalk)
Вместо создания шлюза NAT для моей лямбда-функции, чтобы иметь возможность доступа к API-интерфейсу приложения AWS Beanstalk через Интернет, я хочу создать конечную точку VPC, чтобы иметь доступ к aws beanstalk во внутренней сети AWS из моей лямбда-функции.
В общедоступной подсети есть группы безопасности, которые разрешают веб-трафик (порт 80/443).
Конечная точка VPC связана с частными подсетями, а ее группы безопасности разрешают трафик веб-трафика (порт 80/443).
Лямбда-функция также связана с частными подсетями, а ее группы безопасности разрешают трафик веб-трафика (порт 80/443).
Разрешение DNS и имена хостов DNS включены на уровне VPC.
Я скопировал имя DNS конечной точки, чтобы сформировать URL-адрес, который вызывается лямбда-функцией, и я получаю тайм-аут
Даже после того, как я испробовал все вышеперечисленные шаги, AWS Lambda не может получить доступ к API-интерфейсу приложения beanstalk.
Упрощенная лямбда-функция:
def lambda_handler(event, context):
http = urllib3.PoolManager()
r = http.request('GET', 'http://vpce-**********.elasticbeanstalk.us-east-2.vpce.amazonaws.com/')
print(r.data)
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Приложение Elasticbeanstalk доступно в Интернете по адресу
http://sample-app-dev.******.us-east-2.elasticbeanstalk.com/
Что мне здесь не хватает?
1 ответ
Если я правильно понимаю, вам удалось создать конечную точку VPC, которая позволит вам получить доступ к сервису AWS Elastic Beanstalk (где вы можете выполнять администрирование своих экземпляров EB). Вы не раскрывали само приложение, развернутое с помощью Elastic Beanstalk.
Я говорю это, потому что для того, чтобы открыть ваше EB-приложение из VPC, сначала вам нужно создать Endpoint Service, который подключается к Network Load Balancer. Приложение EB необходимо зарегистрировать в качестве целевого объекта для этого балансировщика нагрузки (что легко, если у вас есть балансировщик нагрузки приложения для EB). Это даст вам и имя службы, из которого вы можете создать конечную точку в другом VPC (потребительском VPC), где вы можете найти службу по имени:
Если вы нашли свою службу, вы можете разместить конечную точку в своем клиентском VPC, к которому вы сможете подключиться.
Тем не менее, если оба ваших VPC находятся в одной учетной записи AWS, предоставление доступа к сервису через PrivateLink может быть излишним. Вероятно, будет достаточно пиринга VPC .
Обновление - краткое руководство по настройке PrivateLink:
Создайте балансировщик сетевой нагрузки в VPC, в котором развернуто ваше EB-приложение. Вам будет предложено создать целевую группу, поэтому откройте ссылку, чтобы создать ее.
Для целевых групп для балансировщика нагрузки создайте новую и выберите Application Load Balancer.
- Зарегистрируйте балансировщик нагрузки из приложения EB в целевой группе.
- Убедитесь, что вы выбрали целевую группу, созданную ранее для балансировщика сетевой нагрузки.
- Подождите, пока не подготовится балансировщик нагрузки. Это должно быть в
active
штат.
- Перейти к
VPC
-> and create a new (PrivateLink). You will have to give the name of the load balancer here:
- Grab the Endpoint Service name:
- Go to and search for the endpoint name:
- Attach a security group for the which allows HTTP/HTTPS inbound traffic from the VPC:
- Create the
Endpoints
:
It might require acceptance, so go back to the
Endpoint Service
and accept the request.
This should also go from
pending
to
available
.
- At this point you should be able to access the EB application using the DNS from the
Endpoint
.