AWS beanstalk PrivateLink 未连接
Posted
技术标签:
【中文标题】AWS beanstalk PrivateLink 未连接【英文标题】:AWS beanstalk PrivateLink not connecting 【发布时间】:2021-12-20 16:43:25 【问题描述】:我有以下设置
单个 VPC 跨 2 个可用区的 2 个公共子网(包含 AWS Beanstalk 应用程序并公开一个 api) 跨 2 个可用区的 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 级别启用。
我复制了 Endpoint 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/
我在这里错过了什么?
【问题讨论】:
【参考方案1】:如果我理解正确,您设法创建了一个 VPC 终端节点,它可以让您访问 Elastic Beanstalk AWS 服务(您可以在其中对您的 EB 实例进行管理)。您没有公开使用 Elastic Beanstalk 部署的应用程序本身。
我这么说是因为为了从 VPC 公开您的 EB 应用程序,首先您必须创建一个连接到网络负载均衡器的 Endpoint Service。 EB 应用程序需要注册为此负载均衡器的目标(如果您有Application Load Balancer for EB,这很容易)。 这将为您提供服务名称,您可以从中在另一个 VPC(消费者 VPC)中创建一个 Endpoint,您可以在其中按名称找到该服务:
如果您找到您的服务,您可以将 Endpoint 放置到您可以连接的消费者 VPC 中。
尽管如此,如果您的两个 VPC 都在同一个 AWS 账户中,那么通过 PrivateLink 公开服务可能会有点过头了。可能VPC peering 就足够了。
更新 - PrivateLink 设置的简短教程:
在部署您的 EB 应用程序的 VPC 中创建一个网络负载均衡器。这将要求您创建一个目标组,因此请打开链接以创建一个。
为负载均衡器的目标组创建一个新的并选择应用程序负载均衡器。
-
将负载均衡器从 EB 应用程序注册到目标组。
-
确保选择之前为网络负载平衡器创建的目标组。
-
等待负载平衡器配置。它应该处于
active
状态。
-
转到
VPC
-> Endpoint Service
并创建一个新的Endpoint Service
(PrivateLink)。您必须在此处提供负载均衡器的名称:
-
获取端点服务名称:
-
转到
Endpoints
并搜索端点名称:
-
为
Endpoint
附加一个安全组,允许来自 VPC 的 HTTP/HTTPS 入站流量:
-
创建
Endpoints
:
这可能需要接受,因此请返回Endpoint Service
并接受请求。
这也应该从pending
到available
。
-
此时您应该能够使用 DNS 从
Endpoint
访问 EB 应用程序。
【讨论】:
我有一个带有应用程序负载均衡器的 EB 应用程序。我是否需要创建一个网络负载均衡器,或者如果您可以扩展您的解释或指向我的教程会很棒 我设法创建了一个将 EB 应用程序负载均衡器注册为目标的网络负载均衡器。我找不到服务名称 我已经更新了答案。 @user2650277 管理我的意思是使用aws cli
和eb cli
。如果您没有 Internet 连接到 VPC,并且由于某种原因想要使用 Elastic Beanstalk API,您可以为com.amazonaws.us-east-2.elasticbeanstalk
放置一个端点。
DynamoDB 是一项公共服务,它并不存在于您的 VPC 中。如果您无法访问 Internet,或者您不希望您的流量通过公共 Internet,则您需要一个端点。其他公共服务有 S3、SNS、SQS、CloudWatch 等。以上是关于AWS beanstalk PrivateLink 未连接的主要内容,如果未能解决你的问题,请参考以下文章
如何在中国区域的AWS beanstalk实例上部署美国区域的AWS beanstalk实例