Joh*_*ohn 4 amazon-web-services aws-cloudformation aws-lambda aws-api-gateway aws-cdk
这个问题与我在这里遇到的一个问题有关:AWS CDK 如何根据 OpenApi 规范创建由 Lambda 支持的 API 网关?。
我使用 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());
Run Code Online (Sandbox Code Playgroud)
然后,在重新部署 API 之前,当我尝试调用 API 端点时,会收到 500 错误“Lambda 函数的权限无效”。当我使用 APIG 控制台测试 lambda 时没有问题。
如何让ApiGateway自动工作而无需人工干预?即我如何确保我的 lambda 拥有必要的权限?
小智 8
使用 OpenAPI 规范配置 API 网关有点困难。您确实需要谨慎设置正确的 URI 和凭据。此外,凭证似乎无法替代。确保您的 lambda 和角色也已部署。
对我有用的是定义角色并在规范中设置以下内容:
const apiRole = new Role(scope, 'apiRole', {
roleName: 'apiRole',
assumedBy: new ServicePrincipal('apigateway.amazonaws.com'),
});
apiRole.addToPolicy(new PolicyStatement({
resources: ['*'],
actions: ['lambda:InvokeFunction'] }));
Run Code Online (Sandbox Code Playgroud)
并在规范中:
x-amazon-apigateway-integration:
uri: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:optionsApi/invocations"
passthroughBehavior: "when_no_match"
httpMethod: "POST"
type: "aws_proxy"
credentials: "arn:aws:iam::111111122222:role/apiRole"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19703 次 |
| 最近记录: |