Bagaimana cara mengaitkan instance RDS yang ada ke lingkungan Elastic Beanstalk?

22

Saya telah membuat instance RDS saya sebelum membuat lingkungan Pohon Kacang Elastis saya. Keduanya bekerja bersama tanpa masalah, tetapi saya ingin mereka dihubungkan bersama, dan membuat parameter RDS dapat diakses melalui RDS_*variabel lingkungan.

Halaman konfigurasi Elastic Beanstalk mengatakan:

Anda tidak memiliki database.  Anda dapat membuat database RDS baru atau menggunakan database yang sudah ada.

Meskipun tautan pertama membuat instance RDS di tempat dan menautkannya ke lingkungan saat ini, tautan kedua baru saja mengalihkan ke halaman dokumentasi ini. , yang sayangnya hanya menjelaskan cara membuat instance RDS baru, tetapi tidak bagaimana menautkan yang sudah ada.

Bagaimana saya bisa mengasosiasikan instance RDS yang ada ke lingkungan Elastic Beanstalk saya?

Benjamin
sumber

Jawaban:

24

Jawaban "terpilih" benar, tetapi saya ingin menambahkan beberapa informasi tambahan karena kebanyakan orang yang menggunakan EB dan RDS bersama-sama harus memiliki persyaratan yang sama juga - bahkan jika mereka belum mengetahuinya.

Pertanyaan pertama : Mengapa Anda ingin instance RDS ada di luar lingkungan EB? Jawab : Sehingga masa pakai instance RDS tidak terkait dengan masa pakai lingkungan EB. yaitu ketika Anda menghapus suatu lingkungan, Anda tidak ingin menghancurkan DB dengannya. Ada beberapa alasan mengapa Anda ingin benar-benar mengikat instance RDS Anda dengan lingkungan Anda.

Masalah dengan pengaturan RDS secara independen dari EB adalah Anda tidak mendapatkan variabel RDS_ * yang terisi secara otomatis dan oleh karena itu perlu mengambil nilainya dan mengisinya sendiri melalui konsol web atau ekstensi. Namun, Anda tidak disarankan untuk menambahkan kredensial ke kode Anda, karena itu bisa menjadi celah keamanan.

Tetapi kemudian, masalah selanjutnya adalah jika Anda ingin secara terprogram membuat lingkungan (seperti untuk penyebaran downtime biru-hijau nol) maka Anda memerlukan solusi untuk bagaimana mengisi nilai RDS yang sensitif (misalnya kata sandi) setiap kali. Sayangnya, ini mengharuskan Anda untuk turun lebih jauh ke tumpukan AWS dan menggunakan templat CloudFormation.

Solusi ideal adalah penyempurnaan EB sehingga tautan "gunakan database yang ada" yang disebutkan dalam pertanyaan benar-benar memungkinkan Anda secara manual mengaitkan basis data RDS yang ada dan kemudian membuat variabel lingkungan RDS_ * secara otomatis diisi kembali, alih-alih mengarahkan Anda ke dokumentasi yang tidak membantu. . Dukungan AWS mengatakan ini telah dimunculkan sebagai permintaan fitur tetapi tentu saja tidak ada jangka waktu yang diberikan.

Rgareth
sumber
setahun kemudian dan sepertinya masih demikian?
lifeofguenter
1
Masih terjadi sejauh yang saya tahu.
rgareth
Bagaimana kita menabrak AWS ini?
matthew
setahun kemudian, masih sama.
Karan Kumar
Langkah-langkah untuk menambahkan rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (hanya untuk kelengkapan orang-orang seperti saya mencarinya) Mereka tidak membuat konfigurasi lingkungan dan memuatnya melalui file konfigurasi pada kreasi. Ini harus menambahkan env vars, jadi selama mereka tidak berubah, ini harus ok?
Manuel
18

Jawaban dari dukungan AWS :

Untuk mengaitkan database yang ada ke Lingkungan EB Anda harus mengambil snapshot dari itu melalui Konsol Manajemen dan kemudian pilih "buat database RDS baru" di bawah Lapisan Data. Tampaknya tidak ada cara untuk mengaitkan instance RDS yang sedang berjalan ke Lingkungan EB yang ada tanpa meluncurkan yang baru dari snapshot karena cara instance RDS diikat ke dalam tumpukan Cloudformation yang mendasari lingkungan Cloudstation. Jika Anda mengambil snapshot dari instance RDS Anda saat ini, Anda dapat memulainya lagi di EB jika Anda mau.

Jika Anda ingin instance RDS ada di luar lingkungan Anda hanya dapat memberikan parameter koneksi sebagai variabel lingkungan melalui EB Console: Configuration -> Web Layer -> Configuration Software. Kemudian, Anda dapat membaca variabel lingkungan melalui PHP .

Benjamin
sumber
Saya mengambil pendekatan kedua, mendefinisikan variabel lingkungan dengan nama RDS_ * untuk mengikuti konvensi. Grup keamanan diatur cukup ketat, tetapi masih terasa agak longgar untuk memasukkan kata sandi DB dalam variabel lingkungan.
Joseph Sheedy
@velron Sama untuk saya, tapi saya sudah terbiasa!
Benjamin
2

Saya perlu ini baru-baru ini dan juga ingin mengotomatiskan langkah-langkah menggunakan AWS CLI / EB CLI. Bagaimanapun, ini pada dasarnya adalah langkah-langkah yang saya ikuti (dengan asumsi Anda sudah membuat instance RDS):

  1. Pastikan Anda memiliki pengaturan grup keamanan yang berbeda untuk instance RDS Anda (bukan grup default VPC). Anda dapat menggunakan aws ec2 create-security-group(AWS CLI) untuk itu dan mengaitkannya dengan instance RDS menggunakan aws rds modify-db-instance(AWS CLI).
  2. Inisialisasi aplikasi beanstalk Anda (saya menggunakan eb init(EB CLI) untuk itu).
  3. Baca data konfigurasi yang relevan dari basis data RDS Anda (nama DB, nama host, port, dll). Saya menggunakan aws rds describe-db-instancesuntuk itu.
  4. Dengan menggunakan data itu, atur RDS_*variabel lingkungan pada instance EB saat Anda membuat lingkungan (atau gunakan lingkungan nanti). Anda dapat melakukan ini dengan eb create/ eb deploy(EB CLI). Ketika Anda membuat lingkungan awalnya akan terdegradasi, karena grup keamanan untuk mengakses database RDS tidak diatur dengan benar.
  5. Dapatkan grup keamanan yang relevan dari konfigurasi EB. Anda memerlukan satu untuk grup penskalaan dan untuk penyeimbang beban elastis. Anda dapat menggunakan aws elasticbeanstalk describe-configuration-settings(AWS CLI) untuk itu.
  6. Otorisasi grup autoscaling Anda untuk lalu lintas masuk ke database Anda untuk grup keamanan yang Anda buat di langkah 1. Saya menggunakan aws ec2 authorize-security-group-ingress(AWS CLI) untuk itu, yang menggunakan grup keamanan VPC (bukan grup keamanan DB). Anda mungkin dapat mencapai hal yang sama dengan kelompok keamanan DB jika mereka didukung di wilayah Anda. Saat mengatur aturan traffic masuk, pastikan Anda menggunakan protocal dan port yang tepat untuk mesin database Anda.
  7. Tambahkan grup penyeimbang beban elastis ke grup keamanan instance RDS Anda (sekali lagi menggunakan aws rds modify-db-instance(AWS CLI)).
  8. Nyalakan ulang atau gunakan kembali aplikasi Elastic Beanstalk (mis. eb deployUsing (EB CLI)). Saya harus melakukan penempatan ulang, karena saya menjalankan migrasi pada penyebaran.

Itu sebagian besar. Sekarang Anda harus dapat meningkatkan / menurunkan instance RDS Anda tanpa peduli pada instance EB, selama Anda menjaga nama host dan kredensial DB tetap sama. Anda juga dapat melakukan penyebaran biru / hijau dengan pendekatan itu (tetapi Anda mungkin perlu melakukan beberapa langkah tambahan untuk juga mencabut akses grup keamanan).

Torsten
sumber
0

Cara termudah untuk menambahkan grup keamanan yang ada ke instance EB EC2 dengan konfigurasi adalah dengan menggunakan file sederhana yang dijelaskan dalam https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ security-configuration / securitygroup-addexisting.config

Sebagai contoh:

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

Saya menghadapi masalah yang sama dan diperbaiki menggunakan langkah-langkah berikut:

1) Buka instance EC2 dan perhatikan contoh grup keamanan Anda "sg-121212121212"

2) GO to RDS Security Group ad = lalu lintas masuk

3) Edit aturan pilih semua lalu lintas dan tambahkan grup keamanan ebs baru Anda "sg-121212121212"

Semoga bermanfaat

vaquar khan
sumber
-2

buat RDS di bawah Elastis; itu akan menambah grup keamanan baru yang benar; memodifikasi grup keamanan dari RDS yang sudah ada; setel string koneksi yang benar di konfigurasi web dan semua berfungsi ...

maks
sumber