一、背景

巧妙结合 VPC 对等连接和网络负载均衡器技术,将 Bedrock 的端点高效代理。通过采用 'Cold Potato' 路由策略,我们确保绝大部分流量在 AWS 全球骨干网上传输,显著提升网络性能和稳定性。这一方案不仅优化了全球用户的访问体验,更突破性地实现了中国大陆及港澳台地区用户对 Bedrock的低延迟访问,为跨境 AI 应用开辟了新的可能

二、方案概述

以用新加坡 nlb 暴露 us-east-1 region bedrock-runtime endpoint 为例:由于新加坡的 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

[ap-southeast-1] bedrock-vpc VPC 中的两个 subnet 添加路由,10.1.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是否改变

自我判定




1在各搜索引擎中是否能找到知识信息(包括但不限于Google、百度、Bing)
2是否需要代码集成开发