AWS beantalk PrivateLink 未连接
AWS beanstalk PrivateLink not connecting
我有以下设置
- 单个 VPC
- 2 Public 个跨 2 个可用区的子网(包含 AWS Beanstalk 应用程序并公开 api)
- 跨 2 个可用区的 2 个私有子网(包含 Lambda 函数)
- 1 Elastic beanstalk 的接口 VPC 端点(服务名称 com.amazonaws.us-east-2.elasticbeanstalk)
我不想为我的 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 设置的简短教程:
在部署您的 EB 应用程序的 VPC 中创建网络负载均衡器。这将要求您创建一个目标组,因此打开 link 创建一个。
为负载均衡器的目标组创建一个新目标组和 select 应用程序负载均衡器。
- 将负载均衡器从 EB 应用程序注册到目标组。
- 确保您 select 之前为网络负载均衡器创建的目标组。
- 等到负载平衡器提供。它应该处于
active
状态。
- 转到
VPC
-> Endpoint Service
并创建一个新的 Endpoint Service
(PrivateLink)。您必须在此处提供负载均衡器的名称:
- 获取端点服务名称:
- 转到
Endpoints
并搜索端点名称:
- 为
Endpoint
附加安全组,允许来自 VPC 的 HTTP/HTTPS 入站流量:
- 创建
Endpoints
:
可能需要接受,因此请返回 Endpoint Service
并接受请求。
这也应该从 pending
到 available
。
- 此时您应该能够使用来自
Endpoint
的 DNS 访问 EB 应用程序。
我有以下设置
- 单个 VPC
- 2 Public 个跨 2 个可用区的子网(包含 AWS Beanstalk 应用程序并公开 api)
- 跨 2 个可用区的 2 个私有子网(包含 Lambda 函数)
- 1 Elastic beanstalk 的接口 VPC 端点(服务名称 com.amazonaws.us-east-2.elasticbeanstalk)
我不想为我的 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 设置的简短教程:
在部署您的 EB 应用程序的 VPC 中创建网络负载均衡器。这将要求您创建一个目标组,因此打开 link 创建一个。
为负载均衡器的目标组创建一个新目标组和 select 应用程序负载均衡器。
- 将负载均衡器从 EB 应用程序注册到目标组。
- 确保您 select 之前为网络负载均衡器创建的目标组。
- 等到负载平衡器提供。它应该处于
active
状态。
- 转到
VPC
->Endpoint Service
并创建一个新的Endpoint Service
(PrivateLink)。您必须在此处提供负载均衡器的名称:
- 获取端点服务名称:
- 转到
Endpoints
并搜索端点名称:
- 为
Endpoint
附加安全组,允许来自 VPC 的 HTTP/HTTPS 入站流量:
- 创建
Endpoints
:
可能需要接受,因此请返回 Endpoint Service
并接受请求。
这也应该从 pending
到 available
。
- 此时您应该能够使用来自
Endpoint
的 DNS 访问 EB 应用程序。