AWS API Deployment



我创建了一个云形成模板,用于在 AWS 平台上创建 api 网关/资源/方法/函数,并将 lambda 函数与我的 API 相关联。创建堆栈后,我会收到一个 url 来访问我的 aws api。每当我点击此网址时,我都会收到内部服务器错误。我不确定可能是什么原因,但是如果我在 aws 控制台中的 2 个 lambda 函数之间切换以进行集成请求和部署,它将开始按预期工作。我不想手动执行此操作,因为部署应该在创建堆栈时完成。

下面是我用来创建资源的模板

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

我发现了问题,我的 api 网关无权调用 lambda 函数。当我手动切换 lambda 函数时,它曾经为我的 api 网关提供必要的权限,因此这个解决方法正在发挥作用。我在云形成模板中添加了以下部分以完成这项工作。

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - RestApi
    - LambdaFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref LambdaFunction
      Principal: apigateway.amazonaws.com

相关内容

  • 没有找到相关文章

最新更新