【问题标题】:How to use one APIGateway to multiple lambda如何使用一个 APIGateway 到多个 lambda
【发布时间】:2022-07-28 18:34:04
【问题描述】:

我有两个lambda 函数。

现在我想为这两个使用一个 api。

那我的代码是这样的

const api = new apigateway.RestApi(this, 'ServerlessRestApi', {
    restApiName: `AWSCDKTest-${systemEnv}`,
    cloudWatchRole: false
});

api.root.addMethod('GET', new apigateway.LambdaIntegration(helloLambda));
api.root.addMethod('GET', new apigateway.LambdaIntegration(happyLambda));

它说GET 是双倍的。

所以我做了两个API

const api = new apigateway.RestApi(this, 'ServerlessRestApi_hello', {
    restApiName: `AWSCDK-Viral-${systemEnv}`,
    cloudWatchRole: false
});
api.root.addMethod('GET', new apigateway.LambdaIntegration(helloLambda));

const api2 = new apigateway.RestApi(this, 'ServerlessRestApi_happy', { cloudWatchRole: false });
api2.root.addMethod('GET', new apigateway.LambdaIntegration(happyLambda));

它可以工作,但它有两个 API。

将一个 API 用于两个 lambda 的最佳做法是什么?

【问题讨论】:

  • 你能发布确切的错误信息吗?
  • 我以前从未使用过 CDK,但我认为它与其他配置方法具有相同的结构。所以不要直接将方法添加到根资源,您应该创建2个资源(路径),然后将方法GET添加到每个资源,例如docs.aws.amazon.com/cdk/api/v1/docs/…。

标签: amazon-web-services aws-lambda aws-api-gateway aws-cdk


【解决方案1】:

API 根目录: GET "https://example_api_endpoint/" 调用 helloLambda 然后在此 lambda 函数中调用 AWS-SDK lambda API 方法 invoke() 以在第一次调用中触发happyLambda 的执行顺序。否则,一个 API 资源不能有两个 lambda 函数。进一步阅读:AWS Lambda 扇出模式。

【讨论】:

    【解决方案2】:

    一个 lambda 不能链接到完全相同的 API 路径 + Http 动词。这里有一些替代方案 -

    a) 有不同的 api 路径,每个调用不同的 lambda

    b) 有一个由 API 网关触发的 lambda,它会触发您需要的其他 lambda(在其代码中)

    c) 将 lambda 集成到向 SNS 发送消息的端点,并有多个 lambda 通过 SQS 订阅 SNS。

    【讨论】:

      【解决方案3】:

      试试这个

      this.api = new RestApi(this, 'ServerlessRestApi', { restApiName: "myapi", 云观察角色:假 });

      this.api.root.addResource(resource).addMethod('GET', new LambdaIntegration(func));

      【讨论】:

        猜你喜欢
        • 2018-09-30
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 2021-05-14
        • 2020-08-05
        • 1970-01-01
        • 2019-10-14
        • 1970-01-01
        相关资源
        最近更新 更多