[AWS VPC] Building Your First Amazon Virtual Private Cloud (VPC) (Part 2)

Tiếp theo của part 1, bài viết này sẽ tiếp tục thực hiện các phần còn lại của bài lab bên dưới

Building Your First Amazon Virtual Private Cloud (VPC)

Review lại Part 1

Ở part 1, từ task 1 tới task 4 thì mình đã xây dựng được mô hình như bên dưới

Trong đó chỉ có 2 Public Subnet Group được route tới Internet Getway và thực tế thì chưa hề có instance nào cả.

Mục tiêu

Mục tiêu của part 2 này sẽ bao gồm

  • Tạo Security Group sử dụng cho Web Server (Task 5)
  • Tạo 1 EC2 đóng vai trò là 1 Web Server đặt ở Public Subnet (Task 6)
  • Tạo Private Subnet sử dụng cho việc thiết lập instance Database (Task 7)
  • Tạo Security Group sử dụng cho Database Server (Task 8)
  • Tạo Database Subnet Group (Task 9)
  • Tạo 1 instance AWS RDS (Task 10)
  • Kết nối application ở EC2 tới RDS (Task 11)

Task 5. Tạo Security Group sử dụng cho Web Server

  • Trước hết, đọc qua xem thử cái Security Group (SG) là cái gì.

A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. When you launch an instance in a VPC, you can assign up to five security groups to the instance. Security groups act at the instance level, not the subnet level. Therefore, each instance in a subnet in your VPC could be assigned to a different set of security groups. If you do not specify a particular group at launch time, the instance is automatically assigned to the default security group for the VPC.

  • Cơ bản thì SG được xem như một "tường lửa ảo" nhằm lọc các truy cập vào các Instance hoặc đi ra từ các Instance. SG sẽ hoạt động dựa vào các rule do admin cài đặt.

  • Chọn Security Groups ở thanh điều hướng, click Create security group để bắt đầu tạo SG

  • Cấu hình thông tin SG như sau. Chú ý lựa chọn VPC là VPC đã tạo ở task 1

  • Click Create sau đó Close.

  • Sau đó tiến hành tạo Rule cho SG vừa tạo. Click vào Inbound Rules để tạo rule cho các traffic đi vào. Config như bên dưới nhằm cho phép các traffic từ bên ngoài có thể đi vào SG này qua type HTTP

  • Click Save rule -> Close để kết thúc việc Edit rule cho SG

=> Đến đây, task tạo Security Group về cơ bản đã hoàn thành. Mình đã tạo được 1 SG control các traffic từ Internet đi vào các Instance nằm trong SG này. Và thông thường thì Instance nằm trong SG này sẽ là 1 con EC2 chạy WebServer để người dùng có thể truy cập vào từ internet.

Task 6. Tạo 1 EC2 đóng vai trò là 1 Web Server đặt ở Public Subnet

  • Ở task này sẽ thực hiện tạo 1 EC2 đảm nhiệm vai trò là 1 Web Server. Web Server cần được truy cập từ Internet nên sẽ đặt tại Public Subnet
  • Chi tiết việc tạo 1 EC2 đã được mình thực hiện ở đây. Tuy nhiên ở task này, mình sẽ sử dụng 1 script có sẵn và được chạy khi EC2 được khởi tạo nhằm cài đặt 1 WebServer lên con EC2 này, đồng thời chạy 1 app có thể được config để trỏ tới mySQL RDS Instance.
  • Ở Step 3 khi tạo EC2 thì cấu hình như bên dưới. Chú ý chọn Network là VPC Subnet đã tạo ở Task 1. Subnet là Subnet Public 1.

  • Ở phần Advanced Details cần copy và paste đoạn script bên dưới vào User data text box
#!/bin/bash -ex
yum -y update
yum -y install httpd php mysql php-mysql
chkconfig httpd on
service httpd start
cd /var/www/html
wget https://s3-us-west-2.amazonaws.com/us-west-2-aws-training/awsu-spl/spl-13/scripts/app.tgz
tar xvfz app.tgz
chown apache:root /var/www/html/rds.conf.php

  • Bỏ qua Step 4, ở Step 5 Add Tag như bên dưới

  • Ở Step 6, Config SG như bên dưới. Chú ý chọn SG là SG đã create ở task 5. Sau đó click Review and Launch

  • Ở window Select an existing key pair or create a new key pair thực hiện config như bên dưới. Click Launch Instances

  • Đợi 1 khoảng thời gian sau đó trạng thái của EC2 vừa mới tạo sẽ chuyển sang "running". Lúc này script được past vào ở step trên sẽ thực hiện cài đặt 1 WebServer lên con EC2 này, đồng thời chạy 1 app có thể được config để trỏ tới mySQL RDS Instance.

  • Thử access vào WebServer vừa tạo bằng cách copy và paste IP Pulic con EC2 này vào trình duyệt, kết quả sẽ như bên dưới

=> Đến đây Task 6 đã được hoàn thành. 1 EC2 chạy WebServer đã được đặt trong Public Subnet và nằm trong SG tạo ở task 5.

Task 7.Tạo Private Subnet sử dụng cho việc thiết lập instance Database

  • Để đảm bảo tính bảo mật cao, các ứng dụng thông thường sẽ đặt tầng cơ sở dữ liệu nằm riêng biệt cũng như hạn chế các luồng truy cập vào. Ở task này, mình sẽ thực hiện tạo 1 Private Subnet nằm đặt Instance Database cho ứng dụng. Subnet này sẽ không có quyền đi ra ngoài Internet, cũng như ngược lại, không cho phép các traffic từ ngoài Internet có thể access vào.

  • Việc tạo Private Subnet thực tế không khác gì so với việc tạo Public Subnet. Với Private Subnet 1 sẽ được config như bên dưới

  • Sau đó tiếp tục tạo 1 Private Subnet 2. Chú ý cần phải tạo 1 Private Subnet 2 có Availability Zone để có thể đủ điều kiện tạo Database Subnet Group ở bước sau

  • Sau khi tạo xong 2 Private Subnet thì mình có tổng cộng 4 subnet như bên dưới

=> Kết thúc Task 7

Task 8.Tạo Security Group sử dụng cho Database Server

  • Tương tự như task 5 tạo SG cho WebServer thì task 8 thực hiện tạo 1 SG nhằm sử dụng cho Database Server.
  • SG này được config như bên dưới

  • Sau khi create xong Database Security Group thì thực hiện set Rule cho SG này. Click vào Add Rule vào config như bên dưới. Chú ý là SG này sẽ chỉ set Rule cho phép WebServer Security Group được đi vào Database Security Group. Để config được như vậy thì ở phần Source, cần chọn Custom và paste vào Group ID của WebServer Security Group

=> Save rules và Close để kết thúc Task 8.

Task 9.Tạo Database Subnet Group

  • Trước hết ngó qua xem Database Subnet Group là gì

Amazon RDS instances require a database subnet group. A DB subnet group is a collection of subnets (typically private) that you create in a VPC and that you then designate for your DB instances. Each DB subnet group should have subnets in at least two Availability Zones in a given region. When creating a DB instance in a VPC, you must select a DB subnet group.

=> Trước hết biết được là muốn tạo 1 Instance RDS thì bắt buộc phải có 1 database subnet group. Ngoài ra điều kiện cần để tạo database subnet group là phải có ít nhất 2 Availability Zones khác nhau. (Đã được chuẩn bị ở task 7)

  • Click vào Services, click RDS để bắt đầu tạo DB subnet group

  • Click Create DB Subnet Group và config như bên dưới. Chú ý lựa chọn VPC là VPC đã create ở task 1

  • Thực hiện add 2 Subnet Private đã tạo ở task 7. Click Create

=> Task 9 đến đây đã hoàn thành.

Task 10.Tạo 1 instance AWS RDS

  • Click vào Databases ở thanh điều hướng, click vào Create databases để bắt đầu tạo RDS Instance

  • Config như bên dưới

  • Sau khi Create RDS, đợi 1 lúc status của RDS sẽ chuyển qua available

=> Task 10 đã hoàn thành. Mình đã deploy thành công MySQL database.

Task 11.Kết nối application ở EC2 tới RDS

  • Ở task này sẽ thực hiện connect app nằm ở WebServer (đặt ở Public Subnet) vào MySQL DB được đặt ở Private Subnet.
  • Để thực hiện được, cần phải biết được "endpoint" của Instance RDS đã tạo ở Task 10. Để copy endpoint của RDS thì click vào tab Connect&Security. Enpoint sẽ có dạng

hoangngodb.ca7yw90sgomi.us-east-1.rds.amazonaws.com

  • Quay trở lại browser với địa chỉ IP Public của WebServer để thực hiện connect vào DB theo như bên dưới

  • Nhấn submit là coi như việc kết nối thành công. Có thể thử Edit, Update 1 vài record để test

=> Task 11 đến đây coi như hoàn thành và cũng hoàn thành bài Lab về VPC

Tổng kết

Qua 2 phần part 1 và part 2 thì có thể tổng kết lại những gì đã tạo được qua sơ đồ như bên dưới

Sơ đồ này cũng là 1 kiến trúc khá Basic khi tìm hiểu về AWS. Qua bài lab mình cũng đã học thêm được khá nhiều kiến thức mới thú vị vầ có thể áp dụng trong công việc hiện tại.

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