Triển khai một trang WordPress có tính sẵn sàng cao với cơ sở dữ liệu Amazon RDS bằng Elastic Beanstalk

Chào mọi người, mình là Phương Nghi! ?

Vừa rồi mình đã thử thực hiện các thao tác triển khai một trang WordPress sử dụng dịch vụ cơ sở dữ liệu Amazon RDS bằng Elastic Beanstalk theo hướng dẫn chính thức trên trang AWS.

Và trong quá trình triển khai theo hướng dẫn, mình nhận ra sẽ có một số lỗi nhất định trong qúa trình thực hiện, do đó hôm nay Nghi đã viết blog này để hướng dẫn lại 1 lần nữa cho các bạn bằng Tiếng Việt một cách rõ hơn, cũng như chia sẻ một số lỗi Nghi đã gặp phải và những cách khắc phục chưa được đề cập chi tiết trong bài hướng dẫn! Hướng dẫn này được phát triển với phiên bản WordPress 4.9.5 và PHP 7.0.

Nếu các bạn chưa hiểu rõ trước về Elastic Beanstalk và Amazon RDS, hãy tham khảo thông tin và chức năng của hai dịch vụ này trước khi thực hiện nhé !

Nào bắt đầu thôi:

Khởi chạy một DB instance trong Amazon RDS

Các bạn chú ý, khi các bạn khởi chạy một Instance với Amazon RDS, nó được tách biệt hoàn toàn độc lập với Elastic Beanstalk và môi trường Elastic Beanstalk của bạn. Và nó sẽ không bị Terminate hoặc theo dõi bởi Elastic Beanstalk.

Trong bước này, chúng ta cần:

  • Khởi chạy một cơ sở dữ liệu với công cụ MySQL.
  • Cho phép triển khai Multi-AZ. Điều này tạo ra một chế độ chờ trong Availability Zone (AZ) khác để cung cấp dự phòng dữ liệu, loại bỏ đóng băng I / O và giảm thiểu độ trễ (Latency) tăng bất thường trong quá trình sao lưu hệ thống.

Mở giao diện RDS Console

Chọn tab "Database" => Create Database

Trong giao diện cài đặt cấu hình, các bạn cần lưu ý những điểm sau:

  • Với "Choose a database creation method", các bạn nên chọn "Standard Create", bởi vì nếu bạn chọn "Easy Create", nó không cho phép bạn định cấu hình các cài đặt cần thiết để khởi chạy RDS DB này.
  • Với Engine, như đã đề cập ở trên , chúng ta chọn MySQL
  • Tuỳ vào trường hợp sử dụng và mục đích sử dụng của bạn, các bạn có thể chọn Templates tuỳ ý, như trong hướng dẫn sẽ chọn "Production" để tạo ra một Amazon RDS có độ sẵn sàng cao, còn nếu để test sử dụng các bạn có thể chọn "Free tier", sự khác biệt sẽ được nhận ra khi bạn phục vụ RDS này vào một task cụ thể.
  • Trong mục "settings", các bạn có thể đặt tên cho database của mình để dễ quản lý, và thiết lập master username cũng như password cho account quản lý:

  • Chọn DB instance size( tuỳ theo mục đích sử dụng và độ lớn của CSDL)

  • ở bước này, các bạn cần chọn một VPC chứa DB instance

  • Additional configuration, đặt tên cho CSDL

  • Dựa vào setting bạn đã thiết lập, Estimated monthly costs sẽ đưa ra những con số cụ thể về chi phí cho bạn với cấu hình trên

Cấu hình các inbound rules trong Security Group của RDS instance

Vào Giao diện quản lý Amazon RDS, chọn "Database", chọn tên Database và di chuyển tới tab Connectivity, chọn tên Security group

Trong mục "Inbound rule", thêm một rule với Type MySQL/Aurora như hình , và chọn Source và chọn Secủity Group hiện tại để cho phép các tài nguyên trong Security Group này có thể nhận lưu lượng truy cập trên port cơ sở dữ liệu từ các tài nguyên khác trong cùng nhóm. => Save

Tải WordPress

Bước này mình chỉ follow theo các bước trong mục "Download WordPress" trong link hướng dẫn

Khởi chạy và cấu hình Elastic Beanstalk

Kế hoạch:

  • Tạo một Elastic Beanstalk sử dụng PHP platform
  • Thiết lập các cấu hình mặc định và sample code vào

Vào giao diện quản lý của Elastic Beanstalk

Chọn Applications = > Create new application, điền tên cho Application

Chọn Platform là PHP và Application code là Sample Application

Sau đó chọn , "Review and launch", ở bước này, thông tin về các thiết lập sẽ được hiển thị( Software,.....)

Chúng ta cần lưu ý đến hai mục quan trọng là Network và Database, các bạn có thể cấu hình hoặc thay đổi cấu hình ở mục này sau khi khởi tạo Application cũng được ở mục Configuration, mình sẽ đề cập ở phần sau:

Cấu hình Security Group và các biến môi trường

  • Tạo Security Group cho môi trường : Vào giao diện quản lý, chọn tên Application, chọn tab "Configuration", tìm đến mục Instance chọn Edit
  • Trong mục EC2 Security Group, thêm Secuirty group cần thêm vào instance ngoài security group mà Elastic Beanstalk đã tự tạo
  • Tiếp tục cấu hình đến mục Software trong "Configuration"như ví dụProperty Value cho các mục trên nằm ở configuration properties, nếu không thiết lập, bạn sẽ không tạo được kết nối database

Triển khai application

Vào giao diện của environment, chọn environment, chọn "Upload and deploy", chọn đường dẫn đến folder bạn vừa tạo gói bundle ở bước trước. Lưu ý: ở bước này có một số trường hợp báo lỗi không deploy được, bạn có thể thử compress lại bằng thủ công với gói wordpress và thử lại

Cài đặt WordPress

Sau khi thực hiện bước trên, nếu truy cập vào đường dẫn của Environment, bạn sẽ đến được bước cài đặt WordPress để đăng nhập và cấu hình

Nếu không được, đó là do kết nối với database của bạn có vấn đề, các bạn có thể tham khảo cách xử lý của mình như sau:

Nếu các bạn tìm kiếm với keyword "Error establishing a database connection", các bạn sẽ tìm được rất nhiều giải pháp để xử lý lỗi này. Và Nghi sẽ chia sẻ cách mà Nghi đã thực hiện để sửa lỗi, vì có thể các bạn không thể sữa được lỗi mặc dù đã làm heo hướng dẫn rồi, hãy xem Nghi "xử đẹp" lỗi này như thế nào nha !

Lúc này, điều các bạn cần làm nhât đó là truy cập được vào chế độ repair databse ở đường dẫn ~//wp-admin/maint/repair.php. Nếu không truy cập được, các bạn thực hiện như sau:

  • get vào file wp-config.php,thêm dòng $defind('WP_ALLOW_REPAIR'. true); để database có thể có được chức năng tự fix lỗi
  • Và các bạn cũng có thể kiểm tra trong tab Configuration ở mục Database, password của bạn cho account admin đã được cập nhật hay chưa, đó cũng là một trong những cách kiểm tra mình đã thực hiện

Đó là những lỗi mình đã gặp và cách khắc phục sau khi tham khảo một số hướng dẫn, khi lỗi xảy ra, các bạn có thể tìm được cách giải quyết ở rất nhiều nguồn, nhưng đa số bằng tiếng anh cả nên đôi lúc hơi khó khăn để chúng ta hiểu rõ. Mong nhận được ý kiến đóng góp của các bạn để chúng ta cùng chia sẻ kiến thức hữu ích

Cảm ơn các bạn đã theo dõi ?