AWS Время ожидания лямбда-запроса после неактивности - PullRequest
1 голос
/ 03 апреля 2020

В настоящее время у меня есть Django Лямбда-функция REST API, запущенная в VP C, которая обращается к кластеру Aurora Serverless внутри того же VP C. API используется приложением React. API работает так, как задумано, и я могу подключиться, но иногда запросы истекают примерно через 30 секунд. Этот тайм-аут происходит только после того, как API не использовался в течение минуты. После того, как я несколько раз обновлю sh страницу, которая, как я предполагаю, прогревает лямбду, запросы go проходят, и я могу получить данные. После некоторого бездействия запросы снова истекают, и мне нужно обновить sh. Хотя обновление работает, это определенно не то, что я хочу для своего приложения, и это очень утомительно.

Вот файл YAML, который я использовал для создания VP C в облачной информации:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  pubPrivateVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.31.0.0/16
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  publicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref pubPrivateVPC
      AvailabilityZone:
        Fn::Select:
         - 0
         - Fn::GetAZs: ""
      CidrBlock: 172.31.0.0/24
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Join ["-", [!Ref "AWS::StackName","public-subnet"]]
  privateSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref pubPrivateVPC
      AvailabilityZone:
        Fn::Select:
         - 0
         - Fn::GetAZs: ""
      CidrBlock: 172.31.3.0/24
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Join ["-", [!Ref "AWS::StackName","private-subnet-a"]]
  privateSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref pubPrivateVPC
      AvailabilityZone:
        Fn::Select:
         - 1
         - Fn::GetAZs: ""
      CidrBlock: 172.31.2.0/24
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Join ["-", [!Ref "AWS::StackName","private-subnet-b"]]
  internetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Join ["-", [!Ref "AWS::StackName","gateway"]]
  gatewayToInternet:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref pubPrivateVPC
      InternetGatewayId: !Ref internetGateway
  publicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref pubPrivateVPC
  publicRoute:
    Type: AWS::EC2::Route
    DependsOn: gatewayToInternet
    Properties:
      RouteTableId: !Ref publicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref internetGateway
  publicSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref publicSubnet1
      RouteTableId: !Ref publicRouteTable
  natGateway:
    Type: AWS::EC2::NatGateway
    DependsOn: natPublicIP
    Properties:
      AllocationId: !GetAtt natPublicIP.AllocationId
      SubnetId: !Ref publicSubnet1
  natPublicIP:
    Type: AWS::EC2::EIP
    DependsOn: pubPrivateVPC
    Properties:
      Domain: vpc
  privateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref pubPrivateVPC
  privateRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref privateRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref natGateway
  privateSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref privateSubnet1
      RouteTableId: !Ref privateRouteTable
  privateSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref privateSubnet2
      RouteTableId: !Ref privateRouteTable
  s3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Principal: "*"
          Action:
            - "s3:*"
          Resource:
            - "*"
      RouteTableIds:
        - !Ref privateRouteTable
      ServiceName: !Sub com.amazonaws.${AWS::Region}.s3
      VpcId: !Ref pubPrivateVPC
Outputs:
  pubPrivateVPCID:
    Description: VPC ID
    Value: !Ref pubPrivateVPC
    Export:
      Name: !Join ["-", [!Ref "AWS::StackName","vpc"]]
  publicSubnet1ID:
    Description: Public Subnet A ID
    Value: !Ref publicSubnet1
    Export:
      Name: !Join ["-", [!Ref "AWS::StackName","public-subnet-a"]]
  privateSubnet1ID:
    Description: Private Subnet A ID
    Value: !Ref privateSubnet1
    Export:
      Name: !Join ["-", [!Ref "AWS::StackName","private-subnet-a"]]
  privateSubnet2ID:
    Description: Private Subnet B ID
    Value: !Ref privateSubnet2
    Export:
      Name: !Join ["-", [!Ref "AWS::StackName","private-subnet-b"]]
  privateVPCSecurityGroup:
    Description: Default security for Lambda VPC
    Value: !GetAtt pubPrivateVPC.DefaultSecurityGroup
    Export:
      Name: !Join ["-", [!Ref "AWS::StackName","vpc-sg"]]

Когда я использую попытку сделать вызовы выборки с моим интерфейсом React, я получаю этот ответ:

status: 504
via: 1.1 [cloudfront url].cloudfront.net (CloudFront)
x-amzn-errortype: InternalServerErrorException
x-cache: Error from cloudfront

Я предполагаю, что это проблема холодного запуска лямбда-функции, поскольку время ожидания истекает через 30 секунд, что является максимальным временем запроса функции. У меня есть событие Cloudwatch, чтобы поддерживать функцию в тепле каждую минуту, но это не помогло. Я также увеличил память функции Lamdba до 1408 МБ, но это тоже не помогло. Любая помощь в ускорении соединения или помощь в холодных запусках будет принята с благодарностью Спасибо!

...