一、背 景
巧妙结合 VPC 对等连接和网络负载均衡器技术,将 Bedrock 的端点高效代理。通过采用 'Cold Potato' 路由策略,我们确保绝大部分流量在 AWS 全球骨干网上传输,显著提升网络性能和稳定性。这一方案可以针对全球不同地区的用户访问Bedrock的体验进行优化。
二、方案概述
以用新加坡 nlb 暴露 us-east-1 region bedrock-runtime endpoint 为例: 1. 2. 由于新加坡的 NLB 做了反向代理,在 us-east-1 Bedrock endpoint 处看到的 source IP 是新加坡 NLB的 IP 访问流量绝大部分走在 AWS 骨干网上,走在公网上的距离越短整体网络越稳定(客户端 ↔ 新加坡 AWS)
三、环境配置
1、创建vpc
[us-east-1] subnet 10.1.0.0/16(注意不要和新加坡 subnet overlap), 2 AZ,0 public subnet,None NAT,None S3 Gateway(只有内网)
2、创建 Endpoints
[us-east-1] 服务选择:com.amazonaws.us-east-1.bedrock-runtime,选两个 az, Designate IP addresses 分别为 10.1.128.66,10.1.144.66,security group 选择默认即可。
3、添加安全组入站规则
[us-east-1] bedrock endpoint 的 security group 添加 inbound rule,443 allow all(只有内网)
4、配置vpc peering
[us-east-1]创建vpc peering填入 ap-southeast-1 vpcid vpc-0f5be337a7da46ec1
[ap-southeast-1] peering connections accpet
[us-east-1] bedrock-transit VPC 中的两个 subnet 添加路由,10.5.0.0/16 下一跳 peering connect
5、创建目标组
[ap-southeast-1]
类型: IP address,
目标组名称: us-east-1-bedrock
协议 端口:tcp 443,
vpc:slq-t1-vpc (选择上面和美东区域连通的vpc)
ip地址: other private IP,10.1.128.66 & 10.1.144.66
6、创建nlb
[ap-southeast-1] NLB 的 subnet 必须是 public subnet,否则没有 IGW 返回不了客户端。
同时确认 NLB turn off preserve client IP(默认就 turn off),否则 bedrock-runtime endpoint 回包直接返回给了 client IP,而不走 VPC peering
四
使用lambda验证
1、创建lambda
2、验证代码
注意:该代码需要在bedrock已经启用anthropic.claude-3-5-sonnet 模型,需要修改runtime url为nlb dns
import
urllib3
import
json
import
boto3
def
lambda_handler(x,y):
urllib3.disable_warnings()
bedrock_runtime
=
boto3.client(service_name
=
'bedrock-runtime'
,
region_name
=
'us-east-1'
,
# 如果使用美西2的代理,请改成us-west-2
endpoint_url
=
' https://bedrock-nlb-xxxx.elb.ap-southeast-1.amazonaws.com'
,
# endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com',
verify
=
False
)
MODEL_ID
=
"anthropic.claude-3-5-sonnet-20240620-v1:0"
# IMAGE_NAME = "wind-generation.png"
# with open(IMAGE_NAME, "rb") as f:
# image = f.read()
user_message
=
"test"
messages
=
[
{
"role"
:
"user"
,
"content"
: [
# {"image": {"format": "png", "source": {"bytes": image}}},
{
"text"
: user_message},
],
}
]
response
=
bedrock_runtime.converse(
modelId
=
MODEL_ID,
messages
=
messages,
)
response_text
=
response[
"output"
][
"message"
][
"content"
][
0
][
"text"
]
print
(response_text)
3、授予lambda角色bedrock权限
4、执行lambda
可以在下面看到正确输出,测试成功。
5、sourceIPAddress验证
在cloudtrail服务查看调用的sourceIPAddress是否改变