Развертывание API AWS - PullRequest
       9

Развертывание API AWS

0 голосов
/ 24 января 2019

Я создал шаблон облачной информации для создания шлюза API / ресурса / метода / функции на платформе AWS, а также связал лямбда-функцию с моим API.Как только я создаю стек, я получаю URL, чтобы поразить мой API AWS.Всякий раз, когда я нажимаю эту ссылку, я получаю внутреннюю ошибку сервера.Я не уверен, в чем может быть причина, но если я переключаюсь между двумя лямбда-функциями из консоли aws для запроса интеграции и развертывания, он начинает работать как положено.Я не хочу делать это вручную, поскольку развертывание должно выполняться во время создания стека.

Ниже приведен шаблон, который я использовал для создания ресурсов

Resources:
  RestApi:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: !Sub 'testing'
      EndpointConfiguration:
        Types: 
          - 'EDGE'

  ApigwResource:
    Type: AWS::ApiGateway::Resource
    Properties: 
      RestApiId: !Ref RestApi
      ParentId: !GetAtt RestApi.RootResourceId


  # lambda function
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Role: 'lambda_role'
      Handler: lambda_s3.lambda_handler
      Code:
        S3Bucket: { 'Fn::ImportValue': !Sub '${S3Bucket}-S3AppsBucketId' }
        S3Key: 'lambda_source_code'
      Runtime: python3.7
      MemorySize: 128
      Timeout: 60
      FunctionName: !Sub 'lambda_function'

  ApiGatewayMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: PUT
      ResourceId: !Ref ApigwResource
      RestApiId: !Ref RestApi
      AuthorizationType: AWS_IAM
      MethodResponses:
        - ResponseModels: { 'application/json' : 'Empty' }
          StatusCode: 200
      Integration:
        Type: AWS
        IntegrationHttpMethod: PUT
        IntegrationResponses:
          - StatusCode: 200
        Uri: !Sub
          - 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations'
          - lambdaArn: !GetAtt LambdaFunction.Arn

  ApiGatewayDeployment:
    Type: AWS::ApiGateway::Deployment
    DependsOn:
      - 'ApiGatewayMethod'
    Properties:
      RestApiId: !Ref RestApi
      StageName: !Ref Environment

1 Ответ

0 голосов
/ 31 января 2019

Я обнаружил проблему, у моего шлюза api не было разрешения вызывать лямбда-функцию.Когда я вручную переключал лямбда-функции, он предоставлял необходимые разрешения для моего шлюза API, поэтому эта работа работала.Я добавил ниже кусок в мой шаблон облачной информации, чтобы сделать эту работу.

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - RestApi
    - LambdaFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref LambdaFunction
      Principal: apigateway.amazonaws.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...