【发布时间】:2020-09-23 20:55:47
【问题描述】:
这个问题与我在这里遇到的一个问题有关:AWS CDK how to create an API Gateway backed by Lambda from OpenApi spec?。
我使用 OpenAPI 规范和 AWS CDK 创建了一个 API 网关。 API 由 Lambda 支持,APIG 需要权限才能调用 Lambda。
当我授予 APIG 调用我的 lambda 的权限时:
myLambda.addPermission("PermitAPIGInvocation", Permission.builder()
.action("lambda:InvokeFunction")
.principal(ServicePrincipal.Builder.create("apigateway.amazonaws.com")
.build())
.sourceArn(mySpecRestApi.arnForExecuteApi())
.build());
然后,当我尝试调用 API 端点时,我收到 500 错误“Lambda 函数的权限无效”,直到我重新部署了 API。使用 APIG 控制台测试 lambda 时没有问题。
如何让 ApiGateway 自动运行而无需人工干预?即如何确保我的 lambda 具有必要的权限?
【问题讨论】:
-
您能说明如何将 lambda 附加到 CDK 项目中的 apigw 吗?
-
本身没有附件,APIG 是通过
SpecRestApi创建的,并且在 OAS 规范的x-amazon-apigateway-integration节中,uri属性指向 APIG 调用 ARN 和credentials属性具有允许调用所有 lambdas 的角色。 -
使用 CDK 创建 APIGW 并将 lambda 附加到它时...据我所知,CDK 会为您添加 invokeFunction 权限。
-
是的,当你使用
RestApi时似乎是这样,但当你使用SpecRestApi时不是这样。 -
这会很奇怪,因为 SpecRestApi 以及 RestApi 扩展了 RestApiBase。而且我在 RestApi 类中看不到任何特殊权限处理。对不起。无法帮助您解决这个问题,因为我没有可用的 APIGW 测试堆栈。
标签: amazon-web-services aws-lambda amazon-cloudformation aws-api-gateway aws-cdk