web-dev-qa-db-fra.com

Délai d'expiration de la passerelle AWS Elastic Beanstalk 504

J'ai un serveur Node exécuté sur AWS Elastic Beanstalk. L'un de mes points de terminaison accepte une énorme charge utile et la fonction elle-même est assez lente et longue et peut prendre plus de 10 minutes.

En raison des exigences de l'entreprise, il doit rester en tant que HTTP unique POST et ne peut pas être divisé pour être plus petit.

Sur les appels plus importants, j'obtiens un DÉLAI D'APPROVISIONNEMENT 504, toujours autour de la barre des 60 secondes. J'ai essayé de jouer avec les paramètres de délai d'attente dans la section Elastic Beanstalk Load Balancer en vain, il semble que la durée de délai d'attente la plus longue soit de 60 secondes de toute façon.

J'ai vu une solution prometteuse dans les documents sur https://docs.aws.Amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html

Pour vous assurer que les opérations longues telles que les téléchargements de fichiers ont le temps de se terminer, envoyez au moins 1 octet de données avant que chaque période d'inactivité ne se soit écoulée

Cela ressemble exactement à ce dont j'ai besoin, mais je ne sais pas comment accomplir

1) Comment puis-je "envoyer au moins 1 octet de données" depuis mon application Node pour m'assurer que la session est maintenu en vie et ne s'arrête pas après une minute

11
Joshua Ohana

504 Les délais d'expiration sur les environnements ElasticBeanstalk peuvent être résolus en définissant vos stratégies ELB. La mise à jour des configurations de délai d'expiration Nginx peut également être requise.

  • Stratégies ELB: définissez le délai d'inactivité de votre équilibreur de charge élastique sur la valeur de votre choix (par défaut 60 s). Pour ce faire, créez un dossier . Ebextensions à la racine de votre projet. Dans ce dossier, créez un autre fichier avec une extension de fichier . Config et définissez le délai d'inactivité ELB sur la valeur de votre choix (par exemple 300 secondes):

    option_settings:
      - namespace: aws:elb:policies
        option_name: ConnectionSettingIdleTimeout
        value: 300
    

    Ou si vous utilisez un équilibreur de charge d'application:

    option_settings:
      - namespace: aws:elbv2:loadbalancer
        option_name: IdleTimeout
        value: 300
    
  • Configuration de Nginx: définissez Nginx avec la valeur de temporisation souhaitée: send_timeout, proxy_connect_timeout, proxy_read_timeout, proxy_Send_timeout tous par défaut à 60s (les spécifications supplémentaires à vérifier peuvent être: client_header_timeout, client_body_timeout, keepalive_timeout). Les valeurs de délai d'attente par défaut dans Nginx sont spécifiées dans les fichiers spécifications et de configuration (par exemple les fichiers . Config sous /etc/nginx). Dans le .ebextensions dossier créer un nouveau fichier (ou mettre à jour dans le fichier .config ci-dessus), et ajouter le contenu suivant à l'intérieur du fichier (ajouter ou supprimer les paramètres pertinents en fonction des délais d'attente observés):

    files:
      "/etc/nginx/conf.d/nginx.custom.conf":
          mode: "644"
          owner: "root"
          group: "root"
          content: |
            client_header_timeout   300;
            client_body_timeout     300;
            keepalive_timeout       300;
            send_timeout            300;
            proxy_connect_timeout   300;
            proxy_read_timeout      300;
            proxy_send_timeout      300;
    
    container_commands:
      01_restart_nginx:
        command: "Sudo service nginx reload"
    

    Il existe plusieurs autres façons d'ajouter cette configuration. En savoir plus ici et ici .

20
asaf am