0

我有以下设置

  • 单个 VPC
  • 2 个跨 2 个可用区的公共子网(包含 AWS Beanstalk 应用程序并公开一个 api)
  • 跨 2 个 AZ 的 2 个私有子网(包含 Lambda 函数)
  • 1 个 Elastic beanstalk 接口 VPC 端点(服务名称 com.amazonaws.us-east-2.elasticbeanstalk)

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

公共子网具有允许 Web 流量的安全组(端口 80/443)

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

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

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

我复制了端点 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 应用程序可通过 Internet 获取,网址为http://sample-app-dev.******.us-east-2.elasticbeanstalk.com/

我在这里想念什么?

4

1 回答 1

2

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

我这么说是因为为了从 VPC 公开您的 EB 应用程序,首先您必须创建一个连接到网络负载均衡器的端点服务。EB 应用程序需要注册为此负载均衡器的目标(如果您有EB 的应用程序负载均衡器,这很容易)。这将为您提供服务名称,您可以从中在另一个 VPC(消费者 VPC)中创建一个端点,您可以在其中按名称找到服务:

在此处输入图像描述

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

不过,如果您的两个 VPC 都在同一个 AWS 账户中,那么通过 PrivateLink 公开服务可能是矫枉过正。可能VPC 对等互连就足够了。

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

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

  2. 对于负载均衡器的目标组,新建一个并选择 Application Load Balancer。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

  1. 等到负载均衡器提供。应该是active状态。

在此处输入图像描述

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

在此处输入图像描述

  1. 获取端点服务名称:

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

  1. 创建Endpoints

在此处输入图像描述

它可能需要接受,所以返回Endpoint Service并接受请求。

在此处输入图像描述

这也应该从pendingavailable

  1. 此时,您应该能够使用来自Endpoint.
于 2021-11-07T16:21:48.020 回答