有没有办法创建跨区域的APIGateway v2 Http集成?

问题描述 投票:0回答:1

使用 AWS 控制台创建跨区域 APIGateway v2 Http 集成(其中 API 网关位于一个区域而 Lambda 位于另一区域)非常简单,因为可以选择“AWS 区域”来查找现有 Lambda 函数.

enter image description here

此外,在 CDK 中,可以使用直接取自

AWS CDK 文档
的以下示例代码创建 HttpLambdaIntegration

enter image description here

鉴于上述情况,似乎应该可以通过其 ARN 加载来使用另一个区域中的 Lambda 函数简单地创建

HttpLambdaIntegration
。但是,当尝试在另一个区域使用 Lambda(使用 Lambda 构造库中的“fromFunctionArn”方法加载)时,CDK 将抛出以下错误:

CREATE_FAILED | AWS::Lambda::Permission | myApi/GET--test/testIntegration-Permission
Resource handler returned message: "Functions from 'ap-southeast-3' are not reachable in this region ('ap-southeast-1')
(Service: Lambda, Status Code: 404, Request ID: -)" (RequestToken: -, HandlerErrorCode: NotFound)

是否可能需要参数或其他配置设置才能在 CDK 中使用跨区域 Lambda,或者可能需要上述方法的替代方法?

谢谢!

aws-lambda aws-cdk aws-api-gateway-v2
1个回答
0
投票

如果您的 Lambda 堆栈是在 us-east-2 中创建的,并且您希望 API Gateway 堆栈在 us-east-1 中创建的,则可以通过在 bin 文件夹中实例化堆栈时设置 crossRegionReferences: true 选项来实现此目的。这可以实现堆栈之间的跨区域引用。

这是一个例子:

const uatWebLayerLGIntegration = new WebLayerIntegration(PatternApp, `${client}WebLayerIntegrationStack-${stage}`, {
    userPool: CognitoStack.userPool,
    webLayerLambda: uatWebLayerFuction.webLayerLambda,
    clientPrefix: client,
    env: { account: deploymentAccount, region: 'us-east-1' }, // API Gateway region
    crossRegionReferences: true, // Enables cross-region references
    stage: stage, });

要点:

env 属性指定堆栈部署的 AWS 账户和区域。这里,API网关明确设置为部署在us-east-1中。 crossRegionReferences: true 选项确保 us-east-1(API 网关)中的资源可以引用 us-east-2(Lambda 堆栈)中的资源。

© www.soinside.com 2019 - 2024. All rights reserved.