วิธีเชื่อมโยงอินสแตนซ์ RDS ที่มีอยู่กับสภาพแวดล้อม Elastic Beanstalk ได้อย่างไร


22

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

หน้าการกำหนดค่า Elastic Beanstalk พูดว่า:

คุณไม่มีฐานข้อมูล  คุณสามารถสร้างฐานข้อมูล RDS ใหม่หรือใช้ฐานข้อมูลที่มีอยู่

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

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

คำตอบ:


24

คำตอบ "เลือก" ถูกต้อง แต่ฉันต้องการเพิ่มข้อมูลพิเศษเนื่องจากคนส่วนใหญ่ที่ใช้ EB และ RDS ด้วยกันควรมีข้อกำหนดเดียวกันด้วย - แม้ว่าพวกเขาจะยังไม่ทราบก็ตาม

คำถามแรก : ทำไมคุณต้องการให้อินสแตนซ์ของ RDS อยู่นอกสภาพแวดล้อม EB คำตอบ : เพื่อให้อายุการใช้งานของอินสแตนซ์ RDS ไม่ได้เชื่อมโยงกับอายุการใช้งานของสภาพแวดล้อม EB เช่นเมื่อคุณลบสภาพแวดล้อมคุณไม่ต้องการทำลายฐานข้อมูลด้วย มีเหตุผลน้อยมากที่คุณต้องการผูกอินสแตนซ์ RDS ของคุณกับสภาพแวดล้อมของคุณ

ปัญหาเกี่ยวกับการตั้งค่า RDS เป็นอิสระจาก EB คือคุณไม่ได้รับตัวแปร RDS_ * โดยอัตโนมัติและดังนั้นจึงจำเป็นต้องเรียกคืนค่าของพวกเขาและเติมเองด้วยตนเองผ่านเว็บคอนโซลหรือ. ส่วนขยาย ไม่แนะนำให้คุณเพิ่มข้อมูลรับรองในรหัสของคุณเนื่องจากอาจเป็นช่องโหว่ด้านความปลอดภัย

แต่ปัญหาต่อไปคือถ้าคุณต้องการสร้างสภาพแวดล้อมทางโปรแกรม (เช่นสำหรับการปรับใช้ดาวน์ไทม์สีน้ำเงิน - เขียว) โดยทางโปรแกรมคุณต้องการโซลูชันสำหรับวิธีการเติมค่า RDS ที่ละเอียดอ่อน (เช่นรหัสผ่าน) ทุกครั้ง น่าเสียดายที่สิ่งนี้ต้องการให้คุณวาง AWS สแต็คเพิ่มเติมและใช้เทมเพลต CloudFormation

ทางออกที่ดีที่สุดคือการเพิ่มประสิทธิภาพให้กับ EB เพื่อให้ลิงก์ "ใช้ฐานข้อมูลที่มีอยู่" ที่กล่าวถึงในคำถามช่วยให้คุณสามารถเชื่อมโยงฐานข้อมูล RDS ที่มีอยู่ด้วยตนเองจากนั้นให้ตัวแปรสภาพแวดล้อม RDS_ * ถูกเติมโดยอัตโนมัติอีกครั้ง . ฝ่ายสนับสนุนของ AWS กล่าวว่าสิ่งนี้ได้รับการยกให้เป็นคำขอคุณสมบัติ แต่แน่นอนว่าไม่มีการกำหนดกรอบเวลา


ปีต่อมาและมันก็ยังคงเป็นกรณี?
lifeofguenter

1
ยังคงเป็นกรณีเท่าที่ฉันรู้
rgareth

เราจะชน AWS นี้ได้อย่างไร
matthew

ปีต่อมาก็ยังคงเหมือนเดิม
Karan Kumar

ขั้นตอนในการเพิ่ม rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/ ...... (เพื่อความสมบูรณ์แบบสำหรับคนอย่างฉันที่กำลังค้นหา) พวกเขาไม่ได้สร้างการกำหนดค่าสภาพแวดล้อมและโหลดผ่านไฟล์การกำหนดค่าในการสร้าง สิ่งนี้ควรเพิ่ม env vars ตราบใดที่พวกเขาไม่เปลี่ยนมันควรจะโอเคไหม?
Manuel

18

คำตอบจากฝ่ายสนับสนุน AWS :

ในการเชื่อมโยงฐานข้อมูลที่มีอยู่กับสภาพแวดล้อม EB คุณต้องทำการถ่ายภาพจากฐานข้อมูลการจัดการแล้วเลือก "สร้างฐานข้อมูล RDS ใหม่" ภายใต้ชั้นข้อมูล ไม่มีวิธีใดที่จะเชื่อมโยงอินสแตนซ์ RDS ที่รันอยู่กับ EB Environment ที่มีอยู่โดยไม่ต้องเปิดตัวใหม่จากสแน็ปช็อตเนื่องจากวิธีที่อินสแตนซ์ของ RDS เชื่อมโยงกับสแต็ค Cloudformation ของ Beanstalk หากคุณถ่ายภาพอินสแตนซ์ RDS ปัจจุบันของคุณคุณสามารถเริ่มใหม่ใน EB หากคุณต้องการ

หากคุณต้องการให้อินสแตนซ์ของ RDS อยู่นอกสภาพแวดล้อมคุณสามารถระบุพารามิเตอร์การเชื่อมต่อเป็นตัวแปรสภาพแวดล้อมผ่านทางคอนโซล EB: การกำหนดค่า -> เลเยอร์เว็บ -> การกำหนดค่าซอฟต์แวร์ จากนั้นคุณสามารถอ่านตัวแปรสภาพแวดล้อมผ่าน PHP


ฉันใช้วิธีที่สองโดยกำหนดตัวแปรสภาพแวดล้อมด้วยชื่อ RDS_ * เพื่อติดตามการประชุม กลุ่มความปลอดภัยนั้นค่อนข้างเข้มงวด แต่ก็ยังรู้สึกหลวมเล็กน้อยที่จะใส่รหัสผ่าน DB ในตัวแปรสภาพแวดล้อม
โจเซฟ Sheedy

@velotron เหมือนกันสำหรับฉัน แต่ฉันได้ใช้มัน!
เบนจามิ

2

ฉันต้องการสิ่งนี้เมื่อเร็ว ๆ นี้และต้องการอัตโนมัติขั้นตอนโดยใช้ AWS CLI / EB CLI ไม่ว่าในกรณีใดก็ตามนี่เป็นขั้นตอนที่ฉันปฏิบัติตาม (โดยถือว่าคุณได้สร้างอินสแตนซ์ RDS แล้ว):

  1. ตรวจสอบให้แน่ใจว่าคุณมีการตั้งค่ากลุ่มความปลอดภัยที่แตกต่างกันสำหรับอินสแตนซ์ RDS ของคุณ (ไม่ใช่กลุ่มเริ่มต้น VPC) คุณสามารถใช้aws ec2 create-security-group(AWS CLI) สำหรับสิ่งนั้นและเชื่อมโยงกับอินสแตนซ์ RDS โดยใช้aws rds modify-db-instance(AWS CLI)
  2. เริ่มต้นแอปพลิเคชันของคุณ beanstalk (ฉันใช้eb init(EB CLI) สำหรับสิ่งนั้น)
  3. อ่านข้อมูลการกำหนดค่าที่เกี่ยวข้องจากฐานข้อมูล RDS ของคุณ (ชื่อฐานข้อมูลชื่อโฮสต์พอร์ต ฯลฯ ) ฉันใช้aws rds describe-db-instancesสิ่งนั้น
  4. การใช้ข้อมูลนั้นตั้งค่าRDS_*ตัวแปรสภาพแวดล้อมบนอินสแตนซ์ EB เมื่อคุณสร้างสภาพแวดล้อม (หรือปรับใช้สภาพแวดล้อมในภายหลัง) คุณสามารถทำได้ด้วยeb create/ eb deploy(EB CLI) เมื่อคุณสร้างสภาพแวดล้อมในตอนแรกมันจะถูกลดระดับลงเนื่องจากกลุ่มความปลอดภัยในการเข้าถึงฐานข้อมูล RDS จะไม่ได้รับการตั้งค่าอย่างเหมาะสม
  5. รับกลุ่มความปลอดภัยที่เกี่ยวข้องจากการกำหนดค่า EB คุณต้องการหนึ่งรายการสำหรับกลุ่มการปรับค่าอัตโนมัติและสำหรับตัวโหลดบาลานซ์แบบยืดหยุ่น คุณสามารถใช้aws elasticbeanstalk describe-configuration-settings(AWS CLI) เพื่อสิ่งนั้นได้
  6. ให้สิทธิ์กลุ่มการตรวจสอบอัตโนมัติของคุณสำหรับทราฟฟิกขาเข้าไปยังฐานข้อมูลของคุณสำหรับกลุ่มความปลอดภัยที่คุณตั้งค่าในขั้นตอนที่ 1 ฉันใช้aws ec2 authorize-security-group-ingress(AWS CLI) สำหรับเรื่องนั้นซึ่งใช้กลุ่มความปลอดภัย VPC (ไม่ใช่กลุ่มความปลอดภัย DB) คุณอาจประสบความสำเร็จเช่นเดียวกันกับกลุ่มรักษาความปลอดภัยฐานข้อมูลหากได้รับการสนับสนุนในภูมิภาคของคุณ เมื่อตั้งค่ากฎจราจรขาเข้าตรวจสอบให้แน่ใจว่าคุณใช้ protocal และพอร์ตที่ถูกต้องสำหรับโปรแกรมฐานข้อมูลของคุณ
  7. เพิ่มกลุ่ม load balancer ที่ยืดหยุ่นให้กับกลุ่มความปลอดภัยของอินสแตนซ์ RDS ของคุณ (อีกครั้งโดยใช้aws rds modify-db-instance(AWS CLI))
  8. รีบูตหรือปรับใช้แอปพลิเคชัน Elastic Beanstalk อีกครั้ง (เช่นการใช้eb deploy(EB CLI)) ฉันต้องทำการปรับใช้ใหม่เนื่องจากฉันเรียกใช้การย้ายข้อมูลในการปรับใช้

นั่นคือส่วนใหญ่มัน ตอนนี้คุณควรจะสามารถขยาย / ลดอินสแตนซ์ RDS ของคุณได้โดยไม่ต้องสนใจอินสแตนซ์ EB ตราบใดที่คุณรักษาชื่อโฮสต์และข้อมูลรับรอง DB ไว้เหมือนเดิม คุณยังสามารถทำการปรับใช้สีน้ำเงิน / เขียวด้วยวิธีการนั้น (แต่คุณอาจต้องทำขั้นตอนพิเศษบางอย่างเพื่อเพิกถอนการเข้าถึงกลุ่มความปลอดภัย)


0

วิธีที่ง่ายที่สุดในการเพิ่มกลุ่มความปลอดภัยที่มีอยู่ให้กับอินสแตนซ์ EB EC2 โดยการกำหนดค่าคือการใช้ไฟล์อย่างง่ายที่อธิบายไว้ในhttps://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ การรักษาความปลอดภัยการกำหนดค่า / securitygroup-addexisting.config

ตัวอย่างเช่น:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1

0

ฉันพบปัญหาเดียวกันและแก้ไขตามขั้นตอนต่อไปนี้:

1) ไปที่อินสแตนซ์ EC2 และบันทึกตัวอย่างกลุ่มความปลอดภัยของคุณ "sg-121212121212"

2) ไปที่ RDS Security Group ad = ปริมาณการใช้ขาเข้า

3) แก้ไขกฎเลือกปริมาณการใช้งานทั้งหมดและเพิ่มกลุ่มความปลอดภัย ebs ใหม่ "sg-121212121212"

หวังว่ามันจะเป็นประโยชน์


-2

สร้าง RDS ภายใต้ Elastic; มันจะเพิ่มกลุ่มความปลอดภัยที่ถูกต้องใหม่ แก้ไขกลุ่มความปลอดภัยของ RDS เก่าที่มีอยู่; ตั้งค่าสตริงการเชื่อมต่อที่ถูกต้องที่การกำหนดค่าเว็บและทำงานทั้งหมด ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.