Làm cách nào để liên kết một thể hiện RDS hiện tại với môi trường đàn hồi Beanstalk?


22

Tôi đã tạo cá thể RDS trước khi tạo môi trường Bean Beanalk. Cả hai hoạt động cùng nhau không có vấn đề gì, nhưng tôi muốn chúng được liên kết với nhau và có các tham số RDS có thể truy cập thông qua các RDS_*biến môi trường.

Trang cấu hình đàn hồi Beanstalk cho biết:

Bạn không có cơ sở dữ liệu.  Bạn có thể tạo cơ sở dữ liệu RDS mới hoặc sử dụng cơ sở dữ liệu hiện có.

Mặc dù liên kết đầu tiên tạo một cá thể RDS tại chỗ và liên kết nó với môi trường hiện tại, liên kết thứ hai chỉ chuyển hướng đến trang tài liệu này. , không may chỉ giải thích cách tạo một cá thể RDS mới, chứ không giải thích cách liên kết một cá thể hiện có.

Làm cách nào tôi có thể liên kết một cá thể RDS hiện tại với môi trường Bean Beanalk của tôi?

Câu trả lời:


24

Câu trả lời "được chọn" là chính xác, nhưng tôi muốn thêm một số thông tin bổ sung vì hầu hết mọi người sử dụng EB và RDS cùng nhau cũng nên có cùng một yêu cầu - ngay cả khi họ chưa biết.

Câu hỏi đầu tiên : Tại sao bạn muốn cá thể RDS tồn tại bên ngoài môi trường EB? Trả lời : Vì vậy, thời gian tồn tại của cá thể RDS không gắn với thời gian tồn tại của môi trường EB. tức là khi bạn loại bỏ một môi trường, bạn không muốn phá hủy DB bằng nó. Có rất ít lý do tại sao bạn muốn thực sự ràng buộc RDS của bạn với môi trường của bạn.

Một vấn đề với việc thiết lập RDS độc lập với EB là bạn không tự động lấy các biến RDS_ * và do đó cần truy xuất các giá trị của chúng và tự điền chúng thông qua bảng điều khiển web hoặc .ebextensions. Tuy nhiên, bạn không nên thêm thông tin đăng nhập vào mã của mình, vì đó có thể là một lỗ hổng bảo mật.

Nhưng sau đó, vấn đề tiếp theo là nếu bạn muốn lập trình tạo các môi trường (chẳng hạn như cho việc triển khai thời gian chết bằng không màu xanh lục) thì bạn cần một giải pháp cho cách cư trú các giá trị RDS nhạy cảm (ví dụ mật khẩu) mỗi lần. Thật không may, điều này đòi hỏi bạn phải thả xuống ngăn xếp AWS và sử dụng mẫu CloudFormation.

Giải pháp lý tưởng là tăng cường EB để liên kết "sử dụng cơ sở dữ liệu hiện có" được đề cập trong câu hỏi thực sự cho phép bạn liên kết thủ công cơ sở dữ liệu RDS hiện có và sau đó các biến môi trường RDS_ * tự động được nhập lại, thay vì chuyển hướng bạn đến tài liệu không hữu ích . AWS Support cho biết điều này đã được nêu ra như một yêu cầu tính năng nhưng tất nhiên không có khung thời gian nào được đưa ra.


một năm sau và nó dường như vẫn là trường hợp?
Lifeofguenter

1
Vẫn là trường hợp như tôi biết.
rgareth

Làm thế nào để chúng ta va chạm AWS này?
matthew

Một năm sau, nó vẫn như vậy.
Karan Kumar

Các bước để thêm rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/NH (chỉ để hoàn thành cho những người như tôi đang tìm kiếm nó) Họ không tạo cấu hình môi trường và tải nó qua tệp cấu hình khi tạo. Điều này nên thêm vars env, vì vậy miễn là chúng không thay đổi, điều này sẽ ổn chứ?
Manuel

18

Trả lời từ bộ phận hỗ trợ AWS :

Để liên kết cơ sở dữ liệu hiện tại với Môi trường EB, bạn phải chụp ảnh nhanh thông qua Bảng điều khiển quản lý và sau đó chọn "tạo cơ sở dữ liệu RDS mới" trong Lớp dữ liệu. Dường như không có cách nào để liên kết một cá thể RDS đang chạy với Môi trường EB hiện tại mà không khởi chạy một cái mới từ một ảnh chụp nhanh do cách mà cá thể RDS được gắn vào ngăn xếp Cloud Cloud bên dưới của môi trường Beanstalk. Nếu bạn chụp nhanh bản sao RDS hiện tại của mình, bạn có thể bắt đầu lại một lần nữa trong EB nếu muốn.

Nếu bạn muốn cá thể RDS tồn tại bên ngoài môi trường, bạn chỉ cần cung cấp các tham số kết nối dưới dạng các biến môi trường thông qua Bảng điều khiển EB: Cấu hình -> Lớp Web -> Cấu hình phần mềm. Sau đó, bạn có thể đọc biến môi trường thông qua PHP .


Tôi đã sử dụng cách tiếp cận thứ hai, xác định các biến môi trường với các tên RDS_ * để tuân theo quy ước. Các nhóm bảo mật được thiết lập khá chặt chẽ, nhưng vẫn cảm thấy hơi lỏng lẻo khi đặt mật khẩu DB vào một biến môi trường.
Joseph Sheedy

@velotron Tương tự với tôi, nhưng tôi đã quen với nó!
Benjamin

2

Tôi cần điều này gần đây và cũng muốn tự động hóa các bước bằng AWS CLI / EB CLI. Trong mọi trường hợp, về cơ bản, đây là các bước tôi đã làm theo (giả sử bạn đã tạo một phiên bản RDS):

  1. Đảm bảo rằng bạn có một thiết lập nhóm bảo mật khác cho phiên bản RDS của bạn (không phải nhóm mặc định VPC). Bạn có thể sử dụng aws ec2 create-security-group(AWS CLI) cho điều đó và liên kết nó với phiên bản RDS bằng cách sử dụng aws rds modify-db-instance(AWS CLI).
  2. Khởi tạo ứng dụng beanstalk của bạn (tôi đã sử dụng eb init(EB CLI) cho điều đó).
  3. Đọc dữ liệu cấu hình có liên quan từ cơ sở dữ liệu RDS của bạn (tên DB, tên máy chủ, cổng, v.v.). Tôi đã sử dụng aws rds describe-db-instancescho điều đó.
  4. Sử dụng dữ liệu đó sẽ đặt các RDS_*biến môi trường trên thể hiện EB khi bạn tạo môi trường (hoặc triển khai môi trường sau này). Bạn có thể làm điều này với eb create/ eb deploy(EB CLI). Khi bạn tạo môi trường ban đầu, nó sẽ bị xuống cấp, do các nhóm bảo mật truy cập cơ sở dữ liệu RDS không được thiết lập đúng.
  5. Nhận các nhóm bảo mật có liên quan từ cấu hình EB. Bạn cần một cái cho nhóm tự động cân bằng và cho bộ cân bằng tải đàn hồi. Bạn có thể sử dụng aws elasticbeanstalk describe-configuration-settings(AWS CLI) cho điều đó.
  6. Cho phép nhóm tự động xác định lưu lượng truy cập vào cơ sở dữ liệu của bạn cho nhóm bảo mật mà bạn đã thiết lập ở bước 1. Tôi đã sử dụng aws ec2 authorize-security-group-ingress(AWS CLI) cho điều đó, sử dụng các nhóm bảo mật VPC (không phải nhóm bảo mật DB). Bạn có thể có thể đạt được điều tương tự với các nhóm bảo mật DB nếu chúng được hỗ trợ trong khu vực của bạn. Khi thiết lập quy tắc lưu lượng truy cập trong nước, hãy đảm bảo bạn sử dụng đúng tiêu đề và cổng cho công cụ cơ sở dữ liệu của bạn.
  7. Thêm nhóm cân bằng tải đàn hồi vào các nhóm bảo mật của cá thể RDS của bạn (một lần nữa sử dụng aws rds modify-db-instance(AWS CLI)).
  8. Khởi động lại hoặc triển khai lại ứng dụng Elastic Beanstalk (ví dụ: sử dụng eb deploy(EB CLI)). Tôi đã phải thực hiện một kế hoạch lại, vì tôi chạy di chuyển trên các triển khai.

Đó chủ yếu là nó. Bây giờ bạn sẽ có thể mở rộng quy mô lên / xuống các phiên bản RDS của mình mà không cần quan tâm đến các phiên bản EB, miễn là bạn giữ thông tin đăng nhập tên máy chủ và DB giống nhau. Bạn cũng có thể thực hiện triển khai màu xanh / xanh với cách tiếp cận đó (nhưng bạn có thể cần thực hiện thêm một số bước để thu hồi quyền truy cập của nhóm bảo mật).


0

Cách dễ nhất để thêm một nhóm bảo mật hiện có vào các phiên bản EB EC2 là sử dụng tệp đơn giản được mô tả trong https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ bảo mật-cấu hình / securitygroup-addex hiện.config

Ví dụ:

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

0

Tôi đã phải đối mặt với cùng một vấn đề và đã sửa bằng các bước sau:

1) Đến ví dụ EC2 và lưu ý ví dụ nhóm bảo mật của bạn "sg-121212121212"

2) Quảng cáo GO to RDS Security Group = lưu lượng truy cập trong nước

3) Chỉnh sửa quy tắc chọn tất cả lưu lượng truy cập và thêm nhóm bảo mật ebs mới của bạn "sg-121212121212"

Hy vọng nó sẽ hữu ích


-2

tạo RDS theo Đàn hồi; Nó sẽ thêm nhóm bảo mật chính xác mới; sửa đổi nhóm bảo mật của RDS cũ tồn tại; đặt chuỗi kết nối chính xác tại cấu hình web và tất cả công việc ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.