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

如何用Serverless将独立仓库的AWS Lambda关联至API Gateway?

实现跨仓库API Gateway与Lambda关联的方案

1. 独立部署Lambda(单独仓库)

在Lambda专属仓库中,用Serverless框架仅部署Lambda函数,不要包含任何API Gateway配置。示例serverless.yml:

service: order-processing-lambda
provider:
  name: aws
  runtime: nodejs20.x
  region: us-east-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:PutItem
        - dynamodb:GetItem
      Resource: "arn:aws:dynamodb:us-east-1:123456789012:table/Orders"

functions:
  orderHandler:
    handler: src/orderHandler.main
    environment:
      TABLE_NAME: Orders

部署后,记录该Lambda的ARN(可通过AWS控制台或serverless info命令获取)。

2. 在API Gateway仓库关联外部Lambda

在统一管理API Gateway的仓库中,通过指定Lambda的ARN来关联外部函数,无需在该仓库定义Lambda逻辑。示例serverless.yml配置:

service: central-api-gateway
provider:
  name: aws
  region: us-east-1

# 占位函数仅用于兼容Serverless语法,实际调用外部Lambda
functions:
  externalOrderLambda:
    handler: dummy.handler
    name: order-processing-lambda-orderHandler # 外部Lambda的函数名(或直接填ARN)
    role: arn:aws:iam::123456789012:role/order-processing-lambda-us-east-1-lambdaRole # 外部Lambda的执行角色

events:
  - http:
      path: /orders/create
      method: post
      integration: lambda
      # 用外部Lambda的ARN指定调用目标
      uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:order-processing-lambda-orderHandler/invocations
      cors: true
      authorization: none

# 显式配置API Gateway调用Lambda的权限(避免手动操作)
resources:
  Resources:
    APIGatewayInvokePermission:
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName: arn:aws:lambda:us-east-1:123456789012:function:order-processing-lambda-orderHandler
        Action: lambda:InvokeFunction
        Principal: apigateway.amazonaws.com
        SourceArn: arn:aws:execute-api:us-east-1:123456789012:${self:custom.apiGatewayId}/*/POST/orders/create

其中custom.apiGatewayId可从API Gateway控制台获取,或通过Serverless部署后的输出变量动态引用。

3. 部署流程与变量管理

  • 第一步:先部署Lambda仓库,确保函数正常运行并获取其ARN、执行角色ARN。
  • 第二步:用AWS SSM参数存储管理Lambda ARN,避免硬编码:
    • 在Lambda仓库部署时,将ARN写入SSM:
      # Lambda仓库的serverless.yml
      custom:
        ssmLambdaArnPath: /lambda/arn/order-processing
      resources:
        Resources:
          StoreLambdaArn:
            Type: AWS::SSM::Parameter
            Properties:
              Name: ${self:custom.ssmLambdaArnPath}
              Type: String
              Value: !Ref OrderHandlerFunction
      
    • 在API Gateway仓库中读取SSM参数:
      # API Gateway仓库的serverless.yml
      custom:
        orderLambdaArn: ${ssm:/lambda/arn/order-processing}
      events:
        - http:
            uri: arn:aws:apigateway:${self:provider.region}:lambda:path/2015-03-31/functions/${self:custom.orderLambdaArn}/invocations
      
  • 第三步:部署API Gateway仓库,完成关联。

关键注意事项

  • 确保API Gateway与Lambda处于同一AWS区域,跨区域调用会增加延迟且需额外配置。
  • 验证权限:API Gateway需拥有lambda:InvokeFunction权限,Lambda的执行角色需允许API Gateway作为调用方。
  • 测试流程:先单独测试Lambda函数(用serverless invoke命令),再测试API Gateway端点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:39