Îmi construiesc aplicația în AWS.
Am implementat proiectul meu de front-end Reactjs într-o instanță EC2. În loc ca utilizatorii din lumea internetului extern să-mi viziteze direct instanța EC2, vreau să o pun în spatele AWS API Gateway. Așadar, AWS API Gateway ar fi singurul punct de intrare în serviciile de front-end și backend ale aplicației mele. Acesta este planul cu care trebuie să mergeți:
lume externă ---> AWS API Gateway ---> Network Load Balancer ---> grupul meu țintă VPC / instanțe EC2
Iată ce am făcut:
Proiectul Reactjs Frontend rulează bine în instanța EC2; Pot vizita pagina web cu adresa IP publică a instanței EC2.
Grup țintă și echilibru de sarcină de rețea bine configurate. Am confirmat introducând numele DNS al NLB într-un browser, de ex. http://myapp-frontend-NLB-c11112esd43524rw.elb.ap-northeast-1.amazonaws.com
, și se încarcă/deschide cu succes pagina web frontală a aplicației mele.
Am creat un nou AWS API Gateway (REST API) și am configurat un nume de domeniu personalizat pentru acesta. (cu certificatul https luat în considerare în AWS Certificate Manager).
adică domeniul personalizat este frontend.myapp.com
;
numele de domeniu API Gateway este d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
Și am creat noi NS
înregistrare în furnizorul meu DNS pentru ei, astfel încât frontend.myapp.com
arata spre d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
Am urmat acest document aws: https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html pas cu pas și configurat linkul VPC, Resurse API, Tipul de integrare etc.
După implementarea API-ului creat, când fac clic pe deschidere URL Invoke (sub formă de https://123qwe123qe.execute-api.ap-northeast-1.amazonaws.com/[stage]
), pot vedea codul HTML returnat.
M-am așteptat la asta când mă vizitez frontend.myapp.com
în browser, DNS va conduce în cele din urmă traficul către numele de domeniu al API Gateway d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
, iar API Gateway va transmite apoi cererea către NLB și așa mai departe și, în cele din urmă, va încărca pagina web / sau va returna același cod HTML.
Cu toate acestea, când vizitez frontend.myapp.com
în browser, nu există niciun răspuns. Am crezut că înregistrarea DNS nu a funcționat. dig +trace docloud.iwg-inc.co.jp.
dă următorul rezultat:
; <<>> DiG 9.10.6 <<>> +trace frontend.myapp.com.
;; opțiuni globale: +cmd
. 3240 ÎN NS i.root-servers.net.
. 3240 ÎN NS d.root-servers.net.
. 3240 ÎN NS b.root-servers.net.
. 3240 ÎN NS m.root-servers.net.
. 3240 ÎN NS j.root-servers.net.
. 3240 ÎN NS h.root-servers.net.
. 3240 ÎN NS f.root-servers.net.
. 3240 ÎN NS g.root-servers.net.
. 3240 ÎN NS k.root-servers.net.
. 3240 ÎN NS c.root-servers.net.
. 3240 ÎN NS a.root-servers.net.
. 3240 ÎN NS l.root-servers.net.
. 3240 ÎN NS e.root-servers.net.
;; S-au primit 811 octeți de la 240d:1a:6a5:c900:e67e:66ff:fe1f:bf4c#53(240d:1a:6a5:c900:e67e:66ff:fe1f:bf4c) în 29 ms
...alte rezultate...
frontend.myapp.com. 14400 ÎN NS d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
;; S-au primit 117 octeți de la 54.68.111.244#53(ns4.jp-domains.jp) în 131 ms
;; conexiunea a expirat; niciun server nu a putut fi atins
După cum puteți vedea, frontend.myapp.com.
într-adevăr indică d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
ca o NS
record.
Cu toate acestea, se spune conexiunea a expirat; niciun server nu a putut fi atins
.
d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
este numele de domeniu personalizat al Gateway-ului meu API, pe care l-am testat cu adresa URL de invocare și este conectat la servicii.
de ce ar spune niciun server nu a putut fi atins
?
Ce inseamna asta? Cum pot să o rezolv și să completez fluxul?