Привет, ребята, поэтому я пытаюсь создать API-шлюз, который использует лямбду, но у меня проблема с недопустимыми разрешениями. Я нашел некоторую информацию в Интернете, но я не смог ее выяснить. Вот некоторая соответствующая информация из моего файла yaml:
ApiGatewayUploadImageMethod:
Type: AWS::ApiGateway::Method
Properties:
ApiKeyRequired: false
AuthorizationType: NONE
HttpMethod: "POST"
OperationName: "uploadImage"
ResourceId: !Ref ImagesApiResource
RestApiId: !Ref ImagesApiGateway
Integration:
ConnectionType: INTERNET
Credentials: !GetAtt LambdaRole.Arn
IntegrationHttpMethod: POST
PassthroughBehavior: WHEN_NO_MATCH
TimeoutInMillis: 29000
Type: AWS_PROXY
Uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myLambdaFunction.Arn}/invocations'
LambdaRole:
Type: AWS::IAM::Role
Properties:
ManagedPolicyArns:
- Ref: LogPolicy
- Ref: LambdaPolicy
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- sts:AssumeRole
Principal:
Service:
- appsync.amazonaws.com
- apigateway.amazonaws.com
- lambda.amazonaws.com
LambdaPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- lambda:*
Resource:
- !GetAtt MyLambdaFunction.Arn
- !Sub ${MyLambdaFunction.Arn}:*
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/project-images
Handler: post.handler
Role: !GetAtt XrS3Role.Arn
Runtime: nodejs10.x
Timeout: 60
Под ApiGateway: Method doc указано L Use the AWS::Lambda::Permission resource to grant API Gateway permission to invoke your Lambda function.
, поэтому я считаю, что мой виновник таков:
LambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref MyLambdaFunction
Principal: apigateway.amazonaws.com
Я видел, как онлайн люди добавляли sourcerArn, но я не уверен, какой формат использовать. Я также понимаю, что sourceArn ограничивает доступ только к предоставляемым услугам. Я что-то упустил в своем разрешении лямбда? или я что-то упускаю или делаю не так?
Я должен также упомянуть, что я тестировал свой API-шлюз с использованием HTTPie. Оттуда я получаю ошибку 500 и вижу ошибку Invalid Lambda Permissions при проверке журналов шлюза API.
Заранее спасибо за помощь!
Редактировать: Я добавил лямбда-код. Я попытался использовать AWS :: Lambda :: Function, но он выдал ту же ошибку.