如何用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
- 在Lambda仓库部署时,将ARN写入SSM:
- 第三步:部署API Gateway仓库,完成关联。
关键注意事项
- 确保API Gateway与Lambda处于同一AWS区域,跨区域调用会增加延迟且需额外配置。
- 验证权限:API Gateway需拥有
lambda:InvokeFunction权限,Lambda的执行角色需允许API Gateway作为调用方。 - 测试流程:先单独测试Lambda函数(用
serverless invoke命令),再测试API Gateway端点。
内容的提问来源于stack exchange,提问作者jayant
相关产品推荐
相关产品推荐

