Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-11-20T13:56:59+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Ec2, Node.js: Appel API situé sur le même serveur, message #2390662021-11-20T13:56:59+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239066<p>Configuration du VPC :</p>
<p><img src="https://i.imgur.com/RlS1ijh.png"></p>
<p>Configuration du subnet :</p>
<p><img src="https://i.imgur.com/SoNpQ9T.png"></p>
<figure><blockquote>
<p>Tes instances utilisent quel DNS ?</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239064">viki53</a></figcaption></figure>
<p>Je suis pas sûr de ce que tu veux dire ici car quand je regarde la configuration de l’instance j’ai une adresse DNS IPV4 Publique et une adresse DNS IPV4 Privée.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390642021-11-20T13:20:24+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239064<p>Dans ton VPC et ton subnet, ta configuration ressemble à quoi ? Tes instances utilisent quel DNS ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390632021-11-20T11:44:49+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239063<p>J’ai essayé de faire quelques modifications au DNS en modifiant le fichier <code>/etc/resolv.conf</code> manuellement seulement il est remis à défaut automatiquement.</p>
<p>Après ça j’ai suivi la solution sur <a href="https://aws.amazon.com/premiumsupport/knowledge-center/ec2-static-dns-ubuntu-debian/">cette page</a> pour Ubuntu et crée le fichier <code>/etc/netplan/99-custom-dns.yaml</code> avec le contenu suivant :</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span></div><pre><code class="hljs language-text">network:
version: 2
ethernets:
eth0:
nameservers:
addresses: [W.V.X.Y]
dhcp4-overrides:
use-dns: false
</code></pre></div>
<p>Dans <code>addresses</code>, j’ai mis l’adresse de IP de l’instance, puis re-démarré mais sans succès.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390622021-11-20T11:39:42+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239062<p>Pas de <code>;; ANSWER SECTION:</code> donc. On dirait que ton instance n’a pas les bons DNS… <img src="/static/smileys/svg/1f914.svg" alt="🤔" class="smiley"></p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390612021-11-20T11:16:03+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239061<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span></div><pre><code class="hljs language-text">dig api.exemple.com
; <<>> DiG 9.16.1-Ubuntu <<>> api.exemple.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 18892
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;api.exemple.com. IN A
;; Query time: 19 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sat Nov 20 10:13:58 UTC 2021
;; MSG SIZE rcvd: 43
</code></pre></div>Ec2, Node.js: Appel API situé sur le même serveur, message #2390602021-11-20T10:54:20+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239060<p>Alors là je commence à sécher…</p>
<p>Peut-être un problème de DNS ?</p>
<p>Tu peux faire un <code>dig <tondomaine></code> sur ton EC2 voir si ça résout bien ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390572021-11-20T07:37:34+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239057<p>Bizarement ça marche lorsque je teste une autre API externe :</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span></div><pre><code class="hljs language-text">curl https://jsonplaceholder.typicode.com/todos/1
</code></pre></div>
<p>Mais ça ne fonctionne pas si l’API est sur le même serveur.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390492021-11-19T18:33:25+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239049<p>Si ça fonctionne depuis ton ordi ça ressemble à un problème de config réseau…</p>
<p>Tu aurais pas un firewall sur ton instance qui bloquerait le trafic sortant ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390472021-11-19T17:55:42+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239047<p>Oui, ça fonctionne depuis mon ordi. Qu’est-ce qu’il faudrait faire pour configurer le LB ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390462021-11-19T17:53:44+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239046<p>Et depuis ton ordi tu peux taper sur l’URL sans problème ?</p>
<p>Si non ton LB n’est probablement pas bien configuré pour rediriger le trafic.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390452021-11-19T17:50:51+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239045<p>Si je fait un curl ça fonctione si j’utilise l’IP, mais ça fonctionne pas si j’utilise l’URL:</p>
<p><code>curl 1.1.1.1/v1/api/status // OK</code></p>
<p><code>curl https://api.exemple.com/v1/api/status // Pas OK</code></p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390442021-11-19T17:43:04+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239044<p>Si tu autorises tout en sortie et tout en entrée j’ai du mal à voir ce qui pourrait bloquer, là je t’avoue <img src="/static/smileys/svg/1f914.svg" alt="🤔" class="smiley"></p>
<p>Ton LB redirige bien vers le port exposé de ton app ? </p>
<p>Si tu te connectes en SSH sur l’instance tu peux faire un <code>curl</code> à la main pour voir ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390432021-11-19T17:36:02+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239043<p>Ok. J’ai supprimé l’adresse de l’instance. C’est le même security group pour le load balancer et l’instance mais ça ne fonctionne pas <img src="/static/smileys/svg/triste.svg" alt=":(" class="smiley"></p>
<p>ufw est également installé et activé sur le serveur avec les port 80 et 443 ouverts.</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span></div><pre><code class="hljs language-text">Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
</code></pre></div>Ec2, Node.js: Appel API situé sur le même serveur, message #2390422021-11-19T17:20:53+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239042<p>Alors si tu autorises déjà <code>0.0.0.0/0</code> en entrée, pas besoin de préciser l’adresse de l’instance vu que tu autorises toute les IP en entrée. <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"> </p>
<p>Ça c’est les règles du security-group de ton instance, et ton load-balancer il a quoi comme <abbr title="Security Group">SG</abbr> ?</p>
<p>Pour info il vaut mieux avoir un <abbr title="Security Group">SG</abbr> pour ton LB qui autorise 80+443 de partout et un <abbr title="Security Group">SG</abbr> pour ton instance qui n’autorise que son port HTTP (qui peut être custom si besoin) en entrée depuis le <abbr title="Security Group">SG</abbr> du load-balancer.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390412021-11-19T17:16:12+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239041<p>Oui, j’ai un load balancer et donc j’ai un enregistrement A qui pointe vers ce load balancer.</p>
<p>L’instance est dans un subnet public et les règles du security group ressemblent à ça :</p>
<p><img src="https://i.imgur.com/shzAri4.png"></p>
<p>En rouge c’est l’adresse IP de l’instance EC2.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390402021-11-19T14:59:56+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239040<p>Tu as un load-balancer devant ou c’est juste un champ <code>A</code> dans tes DNS qui pointe vers ton instance EC2 ?</p>
<p>Tes règles de security group ressemblent à quoi exactement pour tout ça ?</p>
<p>Tes instances sont dans un sous-réseaux public ou privé ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390392021-11-19T14:55:37+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239039<figure><blockquote>
<p>Et <code>process.env.URL</code> contient quoi ? L’IP du serveur ? Ou l’URL d’un load-balancer ?</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239038">viki53</a></figcaption></figure>
<p>C’est l’adresse de l’API. Ex: <code>https://api.exemple.com/v1</code></p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390382021-11-19T14:40:35+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239038<p>Et <code>process.env.URL</code> contient quoi ? L’IP du serveur ? Ou l’URL d’un load-balancer ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390372021-11-19T14:37:32+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239037<blockquote>
<p>Tu as mis quoi comme règles dans ton security group exactement ?</p>
</blockquote>
<p>J’ai autorisé l’IP du serveur EC2.</p>
<figure><blockquote>
<p>Pourquoi ne pas utiliser <code>localhost</code> sinon pour taper directement sur l’instance locale ?</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239018">viki53</a></figcaption></figure>
<p>J’ai besoin de vérifier que la requête est bien appelée depuis le même serveur et pour cela je vérifie le header 'x-forwarded-for’. Le problème c’est que lorsque j’utilise localhost ce header n’existe pas.</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390182021-11-17T18:44:07+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239018<p>Tu as mis quoi comme règles dans ton security group exactement ?</p>
<p>Pourquoi ne pas utiliser <code>localhost</code> sinon pour taper directement sur l’instance locale ?</p>Ec2, Node.js: Appel API situé sur le même serveur, message #2390042021-11-17T14:55:11+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/15854/ec2-nodejs-appel-api-situe-sur-le-meme-serveur/?page=1#p239004<p>Bonjour,</p>
<p>j’ai une API express installé sur un serveur EC2. Pour certaines routes, il me faut appeler cette API depuis le serveur lui-même mais lorsque je le fait j’ai toujours une erreur :</p>
<div class="hljs-code-div hljs-code-bash"><div class="hljs-line-numbers"><span data-count="1"></span></div><pre><code class="hljs language-bash">getaddrinfo ENOTFOUND
</code></pre></div>
<p>J’ai vérifié un nombre de fois incalculable et l’adresse appelée est correcte.</p>
<p>Voici un example de code ou je fait ça (httpUtil est basé sur axios):</p>
<div class="hljs-code-div hljs-code-js"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span></div><pre><code class="hljs language-js"><span class="hljs-keyword">try</span> {
<span class="hljs-keyword">const</span> httpUtil = <span class="hljs-built_in">require</span>(<span class="hljs-string">'../utils/http.util'</span>)();
<span class="hljs-keyword">const</span> apiStatus = <span class="hljs-keyword">await</span> httpUtil.get(<span class="hljs-string">`<span class="hljs-subst">${process.env.URL}</span>api/status`</span>);
<span class="hljs-built_in">console</span>.log(apiStatus.data);
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-keyword">if</span> (e.response) {
<span class="hljs-built_in">console</span>.log(e.response.data);
} <span class="hljs-keyword">else</span> {
<span class="hljs-built_in">console</span>.log(e);
}
}
</code></pre></div>
<p>En faisant mes recherches j’ai lu que je devais ajouter des règles inbound et outbound dans le security group de mon serveur EC2. J’ai ajouté des règles contenant l’IP du serveur mais sans succès.</p>
<p>Est-ce que quelqu’un a déjà eu affaire à une situation similaire ?</p>