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

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

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

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

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

answer

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

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

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

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

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

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

In order to associate an existing database to a EB Environment you have to take a snapshot of it via the Management Console and then choose "create a new RDS database" under the Data Layer. There does not appear to be a way to associate a running RDS instance to an existing EB Environment without launching a new one from a snapshot due to the way the RDS instance is tied into the Beanstalk environment's underlying Cloudformation stack. If you take a snapshot of your current RDS instance you can start it anew in EB if you wish.

If you want the RDS instance to exist outside of the environment you can simply provide the connection parameters as environment variables via the EB Console: Configuration -> Web Layer -> Software Configuration. Then, you can read the environment variable via PHP.

ฉันเพิ่งต้องการสิ่งนี้และต้องการทำให้ขั้นตอนเป็นอัตโนมัติโดยใช้ 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) คุณอาจทำได้เช่นเดียวกันกับกลุ่มความปลอดภัย DB หากได้รับการสนับสนุนในภูมิภาคของคุณ เมื่อตั้งค่ากฎการรับส่งข้อมูลขาเข้า ตรวจสอบให้แน่ใจว่าคุณใช้โปรโตคอลและพอร์ตที่ถูกต้องสำหรับกลไกจัดการฐานข้อมูลของคุณ
  7. เพิ่มกลุ่มตัวโหลดบาลานซ์แบบยืดหยุ่นให้กับกลุ่มความปลอดภัยของอินสแตนซ์ RDS ของคุณ (อีกครั้งโดยใช้aws rds modify-db-instance(AWS CLI))
  8. รีบูตหรือปรับใช้แอปพลิเคชัน Elastic Beanstalk อีกครั้ง (เช่น การใช้eb deploy(EB CLI)) ฉันต้องทำการปรับใช้ใหม่ เนื่องจากฉันเรียกใช้การย้ายข้อมูลในการปรับใช้

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

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

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

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

ฉันกำลังประสบปัญหาเดียวกันและแก้ไขโดยใช้ขั้นตอนต่อไปนี้:

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

2) ไปที่ RDS Security Group ad=nd ทราฟฟิกขาเข้า

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

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

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