AWS::Lambda::Permission和AWS::IAM::Role是AWS CloudFormation中的两个资源类型,用于授予API Gateway调用Lambda函数的权限。下面是一个解决方法的示例代码:
首先,创建一个AWS::IAM::Role资源,用于定义Lambda函数的执行角色。角色需要包含允许Lambda函数执行所需的权限。
Resources:
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: MyLambdaExecutionRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: LambdaExecutionPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:*:*:*
接下来,创建一个AWS::Lambda::Permission资源,用于授予API Gateway调用Lambda函数的权限。该资源需要指定Lambda函数的名称、ARN和所需的权限。
Resources:
LambdaPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: MyLambdaFunction
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
SourceArn: arn:aws:execute-api:*:*:*/GET/path/to/endpoint
在上面的代码中,替换MyLambdaExecutionRole为Lambda函数执行角色的名称,MyLambdaFunction为Lambda函数的名称,以及/GET/path/to/endpoint为API Gateway端点的ARN和HTTP方法。
这样,通过AWS CloudFormation创建堆栈时,将同时创建Lambda执行角色和API Gateway调用Lambda函数的权限。