ฉันมีสภาพแวดล้อม Elastic Beanstalk อินสแตนซ์เดียวที่ใช้ Docker สองตัว (หนึ่งรายการสำหรับการแสดงละครและอีกรายการสำหรับการผลิต)
ฉันต้องการย้ายแอปพลิเคชัน (Elastic Beanstalk) ไปนั่งหลังตัวโหลดบาลานเซอร์ (โดยหลักแล้วจะใช้ประโยชน์จาก ผู้จัดการใบรับรอง AWS).
ปัจจุบันผมใช้ .ebextensions เพื่อปรับแต่งการกำหนดค่า Nginx ให้ตรงตามข้อกำหนดการกำหนดเส้นทางการรับส่งข้อมูลของแอปพลิเคชันของฉัน:
- สำหรับเส้นทาง
/xyz/
การรับส่งข้อมูลควรไปที่แอปผ่านพอร์ต 80 (เช่น HTTP)
- สำหรับคำขออื่นๆ ทั้งหมดไปยังพอร์ต 80 ควรส่งการตอบสนองการเปลี่ยนเส้นทาง (301) ไปยังพอร์ต 443 (HTTPS)
- คำขอทั้งหมดบนพอร์ต 443 (HTTPS) ควรส่งผ่านไปยังแอป
ดังนั้นคำถามของฉันคือ: ฉันจะบรรลุข้อกำหนดการกำหนดเส้นทางเหล่านั้นโดยใช้โหลดบาลานเซอร์ต่อหน้าหนึ่งในสภาพแวดล้อม Elastic Beanstalk ของฉันได้อย่างไร ฉันคิดว่าจะมีโหลดบาลานเซอร์หนึ่งตัวต่อสภาพแวดล้อม เพื่อความยืดหยุ่น
ฉันพบวิธีแก้ปัญหาที่เป็นไปได้ต่อไปนี้ (ไม่มีวิธีใดที่ดูดีเลย):
- ตั้งค่าสภาพแวดล้อมใหม่ของ Elastic Beanstalk ด้วยสภาพแวดล้อมเฉพาะ แอปพลิเคชัน Load Balancer จากนั้นแก้ไขตัวฟังและกฎของโหลดบาลานเซอร์ผ่านบริการคอนโซล EC2 (คล้ายกับอะไร นี้ รายการเอกสารประกอบของ Elastic Beanstalk ดูเหมือนจะแนะนำภายใต้ "เปลี่ยนเส้นทางการรับส่งข้อมูล HTTP ไปยัง HTTPS > กำหนดค่าโหลดบาลานเซอร์")
- ตั้งค่า Application Load Balancer ใหม่ผ่านบริการคอนโซล EC2 สร้างสภาพแวดล้อม Elastic Beanstalk ใหม่ที่เชื่อมต่อกับ Application Load Balancer ใหม่เป็น Application Load Balancer ที่ใช้ร่วมกัน จากนั้นทำตามคำแนะนำเหล่านี้ (นี้ และ นี้) เพื่อ (หวังว่าจะ?) ตรวจสอบให้แน่ใจว่าโหลดบาลานเซอร์และสภาพแวดล้อมของ Elastic Beanstalk ซิงค์กัน (ในแง่ของการจัดการอินสแตนซ์และการกำหนดเส้นทางการรับส่งข้อมูล)
- ตั้งค่าสภาพแวดล้อม Elastic Beanstalk ใหม่ด้วย Application Load Balancer เฉพาะ จากนั้นปรับเปลี่ยนแอปพลิเคชันเพื่อให้รับข้อมูลบนพอร์ตสามพอร์ต (พอร์ตหนึ่งสำหรับ
/xyz/
ทราฟฟิกหนึ่งอันสำหรับการเปลี่ยนเส้นทาง HTTP -> HTTPS และอีกอันสำหรับทราฟฟิก HTTPS) ซึ่ง docs ที่นี่ ดูเหมือนจะบอกให้ฉันทำ (แต่ไม่ได้พูดถึงวิธีรับพอร์ตการฟังหลายพอร์ตในแอปเดียว)
ตัวเลือกที่หนึ่งและสองเกี่ยวข้องกับการ "ย้อนกลับ" ของ Elastic Beanstalk เพื่อแก้ไขทรัพยากรพื้นฐาน (ซึ่งฉันลังเลที่จะทำ) และตัวเลือกที่สามต้องการให้ฉันแก้ไขแอปพลิเคชันของฉัน (ซึ่งฉันอยากลองและหลีกเลี่ยง)
มีตัวเลือกเหล่านี้หรือไม่?
มีตัวเลือกที่ดีกว่านี้หรือไม่?