Giới thiệu Azure App Service MySQL in-app (preview) – Hỗ trợ Việt Nam

Microsoft vừa cho ra mắt một tính năng mới (dưới dạng thử nghiệm – preview) khá thú vị dành cho các bạn lập trình web sử dụng dịch vụ Azure App Service của Microsoft Azure để phát triển ứng dụng web sử dụng hệ quản trị cơ sở dữ liệu MySQL có tên MySQL in-app. Việc cho ra mắt tính năng mới này rất đáng được quan tâm đặc biệt là những bạn lập trình viên ở Việt Nam khi mà việc tiếp cận sử dụng database MySQL trên Microsoft Azure trước nay là rất khó khăn vì nhà cung cấp dịch vụ ClearDB không hỗ trợ thị trường Việt Nam. Vậy Azure App Service MySQL in-app là gì và có gì đặc biệt?

Azure App Service MySQL in-app là gì?

Tính năng MySQL in-app mới cho phép các nhà phát triển web có thể tạo database sử dụng hệ quản trị cơ sở dữ liệu MySQL và host database này trực tiếp trên cùng một máy server mà được sử dụng để host ứng dụng web trên Azure. Điều này giúp các nhà phát triển có thể dễ dàng triển khai và test các ứng dụng PHP sử dụng MySQL.

Azure App Service MySQL in-app có gì đặc biệt?

Dưới đây là một số điểm nổi bật của tính năng Azure App Service MySQL in-app mới này:

  • Hỗ trợ các ứng dụng PHP sử dụng MySQL như WordPress, Joomla , Drupal, …
  • MySQL chạy cùng server với server host ứng dụng của bạn. Điều này sẽ giúp tăng hiệu suất của ứng dụng vì việc kết nối giữa ứng dụng với database MySQL được thực hiện trên cùng 1 server thay vì qua 2 server như trước
  • Dung lượng lưu trữ được chia sẻ giữa MySQL và ứng dụng web của bạn. Do vậy nếu bạn sử dụng gói dịch vụ Azure App Service là Free hoặc Shared thì rất nhanh bị chạm tới hạn ngạch của gói dịch vụ đó.
  • Bạn có thể bật tính năng Slow query logging và general logging cho MySQL. Lưu ý là nếu bạn bật tính năng này lên thì sẽ ảnh hưởng tới hiệu suất của ứng dụng của bạn do vậy Microsoft không khuyên bạn luôn luôn bật tính năng này lên. Tính năng logging này sẽ hữu dụng trong việc điều tra các vấn đề, lỗi xảy ra với ứng dụng của bạn.
  • Tính năng MySQL in-app mang lại hiệu quả về kinh tế vì sẽ không phát sinh thêm bất kỳ chi phí nào khác để sử dụng được tính năng mới này. Những gì bạn cần thanh toán là trả tiền cho dịch vụ Azure App Service mà bạn sử dụng.
  • Tính năng auto scale không được hỗ trợ vì MySQL chỉ chạy trên một instance. Tương tự tính năng local cache cũng không được hỗ trợ.

Làm sao để sử dụng được tính năng MySQL in-app mới này?

Nếu bạn chưa có tài khoản Azure, tham khảo các chương trình sử dụng Microsoft Azure miễn phí để tạo mới cho riêng mình một tài khoản Microsoft Azure để bắt đầu!

Tại Azure Portal, bạn nhấp chuột vào nút + New rồi sau đó chọn Web + Mobile rồi chọn Web App + MySQL để tạo mới ứng dụng web sử dụng hệ quản trị cơ sở dữ liệu MySQL (Web App + MySQL).

Bạn có thể điền từ khóa Web App + MySQL vào ô tìm kiếm để tìm kiếm nhanh hơn.

azure-web-app-mysql

Tại cửa sổ tạo mới Web App + MySQL, bạn điền đầy đủ các thông tin được yêu cầu vào các trường bắt buộc. Lưu ý ở trường Database Provider, bạn lựa chọn MySQL In App (Preview) để sử dụng tính năng MySQL in-app mới.

azure-web-app-mysql-mysql-in-app

Sau khi hoàn tất việc điền thông tin được yêu cầu vào các trường bắt buộc, nhấp chuột vào nút Create để đặt lệnh tạo mới ứng dụng web sử dụng hệ quản trị cơ sở dữ liệu MySQL từ database provider là MySQL in-app mới.

Làm sao để quản lý nội dung database MySQL?

Cơ sở dữ liệu MySQL được bảo vệ trong một môi trường sandbox biệt lập do đó bạn không thể truy cập được vào cơ sở dữ liệu này thông qua các công cụ quản lý MySQL hay các công cụ MySQL command line (chạy trên remote machine). Tuy nhiên bạn có thể sử dụng phpMyAdmin để quan lý nội dung database của mình.

Tại trang quản lý ứng dụng web sử dụng tính năng MySQL in-app mà bạn muốn quản lý nội dung database, bạn chọn mục MySQL In App (preview) trong phần Settings.

mysql-in-app-settings

Tại trang quản lý MySQL in-app, bạn có thể bật/tắt các tính năng logging hoặc thậm chí bật/tắt MySQL in-app nếu muốn. 

Tiếp theo, bạn nhấp chuột vào nút Manage để mở trang quản lý phpMyAdmin

mysql-in-app-manage-database-content

Với công cụ phpMyAdmin, bạn có thể dễ dàng quản lý database MySQL của mình với giao diện trực quan mà công cụ này cung cấp.

Lưu ý: Database được sử dụng cho ứng dụng web của bạn mặc định có tên là azuredb.

mysql-in-app-phpmyadmin

Kết nối tới database MySQL sử dụng MySQL in-app như thế nào?

Microsoft lưu ý với chúng ta rằng luôn luôn sử dụng các biến môi trường trong các câu lệnh kết nối tới database. Bạn có thể kết nối tới database bằng cách sử dụng biến môi trường MYSQLCONNSTR_localdb. Dưới đây là một đoạn code mẫu mà bạn có thể sử dụng trong ứng dụng của mình để lấy thông tin về database host, port, database name, database user, database password.

$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key => $value) {
if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) {
continue;
}

$connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
$connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
$connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
$connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

$link = mysqli_connect($connectstr_dbhost, $connectstr_dbusername, $connectstr_dbpassword,$connectstr_dbname);

if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

Nếu bạn sử dụng WordPress, bạn có thể chèn đoạn code mẫu dưới đây vào trong tập tin wp-config.php để khai báo các thông tin kết nối tới cơ sở dữ liệu cần thiết cho WordPress:

/*Add at the begining of the file*/

$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key => $value) {
    if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) {
        continue;
    }
    
    $connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
    $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
    $connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
    $connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $connectstr_dbname);

/** MySQL database username */
define('DB_USER', $connectstr_dbusername);

/** MySQL database password */
define('DB_PASSWORD', $connectstr_dbpassword);

/** MySQL hostname : this contains the port number in this format host:port . Port is not 3306 when using this feature*/
define('DB_HOST', $connectstr_dbhost);

Cần nhắc lại là việc sử dụng các biến môi trường là một BEST PRACTICE khi sử dụng MySQL in-app để tránh các vấn đề phát sinh liên quan đến việc kết nối tới cơ sử dữ liệu cho ứng dụng web của bạn. Nếu ứng dụng của bạn cần phải khai báo rõ ràng thông tin về cổng kết nối, bạn có thể sử dụng biến môi trường WEBSITE_MYSQL_PORT.

Việc sử dụng tính năng mới MySQL in-app được Microsoft khuyến nghị là chỉ nên sử dụng với mục đích phát triển (development) & testing. Nếu bạn muốn sử dụng MySQL ở môi trường thực tế (production), Microsoft khuyên bạn nên sử dụng một số giải pháp sau:

Tuy nhiên theo cá nhân mình đánh giá thì việc sử dụng MySQL in-app hoàn toàn có thể sử dụng được ở trong môi trường thực tế, tuy nhiên chỉ nên sử dụng cho những ứng dụng web vừa & nhỏ, có lượng truy cập không lớn như blog cá nhân chẳng hạn :).

Phạm Dũng

Anh Phạm Dũng là chuyên gia các giải pháp phát triển công nghệ Microsoft, hiện đang giữ vị trí Technical Evangelist tại Microsoft Việt Nam. Anh Dũng có 5 năm kinh nghiệm phát triển phần mềm, đặc biệt là trên các platform và sản phẩm của Microsoft. Đến với AzureVN.NET, anh Dũng hi vọng sẽ chia sẻ về các kinh nghiệm, thông tin về Microsoft Azure và hướng tiếp cận để phát triển trên nền tảng Azure.

lion-pham has 7 posts and counting.See all posts by lion-pham

Leave a Reply

Your email address will not be published. Required fields are marked *