使用 AWS 控制台创建跨区域 APIGateway v2 Http 集成(其中 API 网关位于一个区域而 Lambda 位于另一区域)非常简单,因为可以选择“AWS 区域”来查找现有 Lambda 函数.
此外,在 CDK 中,可以使用直接取自
AWS CDK 文档的以下示例代码创建
HttpLambdaIntegration
。
鉴于上述情况,似乎应该可以通过其 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,或者可能需要上述方法的替代方法?
谢谢!
如果您的 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 堆栈)中的资源。