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
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 .