ฉันมีสภาพแวดล้อม Elastic Beanstalk อินสแตนซ์เดียวที่ใช้ Docker สองตัว (หนึ่งรายการสำหรับการแสดงละครและอีกรายการสำหรับการผลิต)

ฉันต้องการย้ายแอปพลิเคชัน (Elastic Beanstalk) ไปเป็นโหลดบาลานเซอร์ (โดยหลักแล้วเพื่อใช้ประโยชน์จากAWS Certificate Manager )

ขณะนี้ฉันกำลังใช้ . ebextensionsเพื่อปรับแต่งการกำหนดค่า Nginx ให้เป็นไปตามข้อกำหนดการกำหนดเส้นทางการรับส่งข้อมูลของแอปพลิเคชันของฉัน:

  • สำหรับ path /xyz/การรับส่งข้อมูลควรไปที่แอปผ่านพอร์ต 80 (เช่น HTTP)
  • สำหรับคำขออื่น ๆ ทั้งหมดที่ส่งไปยังพอร์ต 80 ควรส่งการตอบสนองการเปลี่ยนเส้นทาง (301) ไปยังพอร์ต 443 (HTTPS)
  • คำขอทั้งหมดที่พอร์ต 443 (HTTPS) ควรส่งผ่านไปยังแอป

ดังนั้น คำถามของฉันคือฉันจะบรรลุข้อกำหนดการกำหนดเส้นทางเหล่านั้นโดยใช้ตัวโหลดบาลานซ์หน้าสภาพแวดล้อม Elastic Beanstalk ของฉันได้อย่างไร ฉันกำลังคิดว่าจะมีโหลดบาลานเซอร์หนึ่งตัวต่อสภาพแวดล้อม เพื่อความยืดหยุ่น

ฉันพบวิธีแก้ปัญหาที่เป็นไปได้ต่อไปนี้แล้ว (ซึ่งดูเหมือนจะไม่เหมาะ):

  1. ตั้งค่าสภาพแวดล้อม Elastic Beanstalk ใหม่ด้วยApplication Load Balancerโดยเฉพาะจากนั้นแก้ไข Listener และกฎของตัวโหลดบาลานซ์ผ่านบริการคอนโซล EC2 (คล้ายกับที่รายการเอกสารของ Elastic Beanstalk นี้ดูเหมือนว่าจะแนะนำ ภายใต้ "เปลี่ยนเส้นทางการรับส่งข้อมูล HTTP เป็น HTTPS > กำหนดค่า โหลดบาลานเซอร์")
  2. ตั้งค่า Application Load Balancer ใหม่ผ่านบริการคอนโซล EC2 สร้างสภาพแวดล้อม Elastic Beanstalk ใหม่ที่เชื่อมต่อกับ Application Load Balancer ใหม่เป็นShared Application Load Balancerจากนั้นทำตามคำแนะนำเหล่านี้ ( thisและthis ) เพื่อ (หวังว่า?) ตัวโหลดบาลานซ์และสภาพแวดล้อมของ Elastic Beanstalk มีการซิงค์กัน (ในแง่ของการจัดการอินสแตนซ์และการกำหนดเส้นทางการรับส่งข้อมูล)
  3. ตั้งค่าสภาพแวดล้อม Elastic Beanstalk ใหม่ด้วย Application Load Balancer โดยเฉพาะ จากนั้นแก้ไขแอปพลิเคชันเพื่อให้รับฟังบนสามพอร์ต (พอร์ตหนึ่งสำหรับการรับ/xyz/ส่งข้อมูลอีกพอร์ตหนึ่งสำหรับการเปลี่ยนเส้นทาง HTTP -> HTTPS และอีกพอร์ตสำหรับการรับส่งข้อมูล HTTPS) ซึ่งเอกสารที่นี่ดูเหมือนจะบอกให้ฉันทำ (แต่ไม่ต้องพูดถึงวิธีการรับพอร์ตการฟังหลายพอร์ตในแอปเดียว)

ตัวเลือกที่หนึ่งและสองเกี่ยวข้องกับ "ย้อนกลับ" ของ Elastic Beanstalk เพื่อแก้ไขทรัพยากรพื้นฐาน (ซึ่งฉันลังเลที่จะทำ) และตัวเลือกที่สามจะทำให้ฉันต้องแก้ไขแอปพลิเคชันของฉัน (ซึ่งฉันต้องการลองและหลีกเลี่ยง)

แนะนำตัวเลือกเหล่านี้หรือไม่? มีทางเลือกที่ดีกว่านี้ไหม?

answer

หลังจากติดต่อฝ่ายสนับสนุนด้านเทคนิคของ AWS เกี่ยวกับเรื่องนี้ ฉันสามารถยืนยันได้ว่า:

  • รองรับตัวเลือกที่สองและคำแนะนำที่ฉันพูดถึงไม่จำเป็น เช่น ตราบใดที่คุณเลือกตัวโหลดบาลานซ์ของแอปพลิเคชัน (สร้างจาก EC2) เป็นตัวจัดสรรภาระงานที่ใช้ร่วมกัน (ในสภาพแวดล้อม Elastic Beanstalk ของคุณ) มันก็จะซิงค์กัน (ในแง่ของการกำหนดเส้นทางการรับส่งข้อมูลไปยังอินสแตนซ์ในสภาพแวดล้อมอย่างเหมาะสม)
  • ความเป็นไปได้อีกอย่างหนึ่งคือใช้ตัวเลือกแรก แต่แทนที่จะแก้ไขตัวโหลดบาลานซ์ใน EC2 (ซึ่งฉันเดาว่าจะไม่แนะนำ) คุณสามารถใช้ ".ebextensions" เพื่อแก้ไขตัวโหลดบาลานซ์ได้ โดยทั่วไปแล้ว เมื่อใดก็ตามที่คอนโซล AWS ไม่มี GUI เพื่อให้เป็นไปตามข้อกำหนดของ Elastic Beanstalk คุณสามารถใช้ ".ebextensions" เพื่อแก้ไข GUI ของคอนโซล Elastic Beanstalk ที่ขาดหายไปได้