AWS beantalk PrivateLink 未连接

AWS beanstalk PrivateLink not connecting

我有以下设置

我不想为我的 lambda 函数创建 NAT 网关以便能够通过 Internet 访问 AWS Beanstalk 应用程序 apis,我想创建一个 VPC 端点以便我可以在 AWS 中访问 aws beanstalk来自我的 lambda 函数的内部网络。

public 子网具有允许网络流量(端口 80/443)的安全组

VPC 端点与私有子网关联,其安全组允许网络流量(端口 80/443)。

lambda 函数也与私有子网关联,其安全组允许网络流量(端口 80/443)。

在 VPC 级别启用 DNS 解析和 DNS 主机名。

我复制了端点 dns 名称以形成 lambda 函数正在调用的 url,但出现超时

即使我尝试了上述所有步骤,AWS Lambda 也无法访问 beanstalk 应用程序 api。

简化的 lambda 函数:

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!')
    }

Elastic beanstalk 应用程序可通过互联网在 http://sample-app-dev.******.us-east-2.elasticbeanstalk.com/

上获得

我在这里错过了什么?

如果我理解正确的话,您成功创建了一个 VPC 端点,它可以让您访问 Elastic Beanstalk AWS 服务(您可以在其中管理您的 EB 实例)。您没有公开使用 Elastic Beanstalk 部署的应用程序本身。

我这么说是因为为了从 VPC 公开您的 EB 应用程序,首先您必须创建一个 Endpoint Service which connects to a Network Load Balancer. The EB application needs to be registered as a target for this load balancer (which is easy if you have an Application Load Balancer for EB)。 这将为您提供服务名称,您可以从中在另一个 VPC(消费者 VPC)中创建端点,您可以在其中按名称找到服务:

如果您找到了您的服务,您可以将端点放入您可以连接的消费者 VPC 中。

然而,如果您的两个 VPC 都在同一个 AWS 账户中,则通过 PrivateLink 公开服务可能有点矫枉过正。可能 VPC peering 就足够了。

更新 - PrivateLink 设置的简短教程:

  1. 在部署您的 EB 应用程序的 VPC 中创建网络负载均衡器。这将要求您创建一个目标组,因此打开 link 创建一个。

  2. 为负载均衡器的目标组创建一个新目标组和 select 应用程序负载均衡器。

  1. 将负载均衡器从 EB 应用程序注册到目标组。

  1. 确保您 select 之前为网络负载均衡器创建的目标组。

  1. 等到负载平衡器提供。它应该处于 active 状态。

  1. 转到 VPC -> Endpoint Service 并创建一个新的 Endpoint Service (PrivateLink)。您必须在此处提供负载均衡器的名称:

  1. 获取端点服务名称:

  1. 转到 Endpoints 并搜索端点名称:

  1. Endpoint 附加安全组,允许来自 VPC 的 HTTP/HTTPS 入站流量:

  1. 创建 Endpoints:

可能需要接受,因此请返回 Endpoint Service 并接受请求。

这也应该从 pendingavailable

  1. 此时您应该能够使用来自 Endpoint 的 DNS 访问 EB 应用程序。