You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建指向AWS API Gateway的目标组以实现ALB前置架构?

解决ALB前置API Gateway的路径转发问题

你遇到的核心问题是:ALB的目标组不支持直接指向API Gateway的HTTP端点——目标组仅支持实例、IP、Lambda或其他ALB作为后端,而APIGW是托管服务,没有固定可绑定的IP,也不属于上述目标类型。

下面给你三个可行的解决方案,按复杂度和适用性排序:

方案1:用Lambda作为ALB与APIGW的中转层

这是最贴合你原有ALB架构的方案,通过Lambda把ALB的请求转发到对应APIGW:

  1. 创建转发Lambda函数
    每个APIGW对应一个Lambda,负责接收ALB的请求并转发到目标APIGW。以Python为例,代码如下(需处理请求的方法、头、体和响应):

    import requests
    import base64
    
    # 替换为你的Service1 API Gateway地址
    APIGW_URL = "https://your-service1-api.execute-api.us-east-1.amazonaws.com/prod"
    
    def lambda_handler(event, context):
        # 提取ALB请求核心信息
        http_method = event['requestContext']['http']['method']
        path = event['rawPath']
        headers = event['headers']
        body = event.get('body')
        is_base64 = event.get('isBase64Encoded', False)
    
        # 构建转发请求,移除ALB自带的Host头,使用APIGW的Host
        req_url = f"{APIGW_URL}{path}"
        req_headers = {k: v for k, v in headers.items() if k.lower() != 'host'}
        req_body = base64.b64decode(body) if is_base64 and body else body
    
        # 发送请求到APIGW
        response = requests.request(
            method=http_method,
            url=req_url,
            headers=req_headers,
            data=req_body,
            allow_redirects=False
        )
    
        # 格式化响应返回给ALB
        return {
            'statusCode': response.status_code,
            'headers': dict(response.headers),
            'body': response.text,
            'isBase64Encoded': False
        }
    

    注意:需给Lambda配置出网权限(比如附加AWSLambdaBasicExecutionRole,并配置VPC公网访问或NAT网关)。

  2. 创建Lambda类型的目标组
    在EC2控制台的目标组页面,选择Lambda function类型,分别关联两个转发Lambda函数。

  3. 配置ALB监听规则
    在ALB的监听器中添加两条规则:

    • 路径匹配 /someValue/*,转发到Service1对应的Lambda目标组
    • 路径匹配 /anotherValue/*,转发到Service2对应的Lambda目标组

方案2:直接用API Gateway自定义域名+路径映射(推荐,无额外组件)

如果可以放弃ALB,这个方案最简洁——直接通过APIGW的自定义域名功能实现同一域名下的路径分流:

  1. 准备SSL证书
    在AWS Certificate Manager(ACM)中申请或导入覆盖你的自定义域名的证书(需在APIGW所在区域或CloudFront的us-east-1区域)。

  2. 配置APIGW的基础路径映射

    • 打开Service1的API Gateway控制台,进入自定义域名页面,添加你的自定义域名,在基础路径映射中:
      • 基础路径填 /someValue
      • 选择对应的API和阶段(比如prod)
    • 对Service2的APIGW重复上述操作,基础路径填 /anotherValue
  3. Route53指向APIGW自定义域名
    在Route53中创建A记录,选择别名,目标指向APIGW自定义域名对应的CloudFront分配(APIGW自定义域名会自动关联一个CloudFront分配)。

注意:如果你的APIGW原有端点已经是/someValue开头,需要调整API的资源路径为/*,因为基础路径映射会把/someValue/*转发到APIGW的/*。如果不想调整API结构,可以用方案3的CloudFront路径重写。

方案3:用CloudFront作为统一入口(适合需要CDN/WAF的场景)

CloudFront天然支持多路径分流到不同后端,还能提供缓存、WAF、全球加速等功能:

  1. 创建CloudFront分发

    • 添加两个原点:分别指向Service1和Service2的APIGW域名(比如xxxx.execute-api.region.amazonaws.com)
    • 添加两个行为:
      • 路径模式 /someValue/*,关联Service1的原点,可配置路径重写(比如把/someValue/替换为空,转发到APIGW的/*)
      • 路径模式 /anotherValue/*,关联Service2的原点,同理配置路径重写
  2. 配置CloudFront自定义域名
    在CloudFront分发中添加自定义域名,关联ACM的SSL证书。

  3. Route53指向CloudFront域名
    创建Route53 A记录,别名指向CloudFront分发的域名。

方案对比

方案复杂度成本适用场景
Lambda中转中等低(Lambda调用成本+ALB成本)必须保留ALB架构的场景
APIGW自定义域名映射低最低(仅APIGW成本)无需ALB,仅需路径分流的场景
CloudFront中等中(CloudFront流量成本)需要CDN、缓存、WAF或全球加速的场景

内容的提问来源于stack exchange,提问作者Alterino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:47:01