Skip to content

Instantly share code, notes, and snippets.

@nguyenthanhcong101096
Last active November 23, 2023 01:41
Show Gist options
  • Save nguyenthanhcong101096/f08aefeea4e15d188a4de8e49ab56a75 to your computer and use it in GitHub Desktop.
Save nguyenthanhcong101096/f08aefeea4e15d188a4de8e49ab56a75 to your computer and use it in GitHub Desktop.
AWS EC2 VPC RDS

[AWS] Building Your First Amazon Virtual Private Cloud+(EC2+RDS+VPC)

Mục đích

  • Task 1: Tạo và hiểu được mục đích của 1 VPC là gì?
  • Task 2: Tạo và hiểu được mục đích của 1 public subnet là gì?
  • Task 3: Tạo và hiểu được mục đích của 1 Internet Geteway là gì?
  • Task 4: Tạo và hiểu được mục đích của 1 Route Table là gì?

Task 1: Tạo 1 VPC

  • Sau khi log in vào console của aws, tìm tới service VPC
  • Ở VPC dashboard, click Your VPCs

  • Click vào VPC và cấu hình như sau rồi nhấn Create

Name tag: ThanhCong VPC => Cái này đơn giản chỉ là tên của VPC mình muốn đặt.

IPv4 CIDR block: 10.0.0.0/16 => Cái này là dải IP version 4 mà mình chỉ định cho VPC của mình

VPC là một phần biệt lập của AWS Cloud, được cư ngụ bởi các objects, chẳng hạn như các instances Amazon EC2. Hay nói đơn giản, VPC như 1 căn nhà riêng, nơi mà người dùng có thể sắp xếp, điều khiển, phân bổ các services của aws, như là EC2 chẳng hạn.

Như vậy là việc tạo 1 VPC cơ bản là hoàn thành.

Task 2. Tạo 1 public subnet

  • Ở VPC dashboard, chọn vào Subnets -> Click Create Subnet

  • Cấu hình như sau

Name tag: Public 1

VPC*: lựa chọn VPC đã create ở Task 1

Availability Zone: Chọn zone đầu tiên trong list

IPv4 CIDR block: 10.0.1.0/24 => Chỗ này là dải IP version 4 của subnet

  • Tạo subnet thành công

Sau khi create subnet thì tiến hành "Enable auto-assign public IPv4 address" cho subnet đó. Việc này có ý nghĩa là sẽ cho phép subnet đó tự động cấp 1 địa chỉ IP cho toàn bộ instance mà khởi tạo trong subnet đó.

  • Chọn vào button và click Modify auto-assign IP settings

  • Click button Auto-assign IPv4 và nhấn Save

Tạo 1 public subnet thứ 2 tương tự như các bước đã tạo public subnet đầu tiên

=> Có thể hiểu đơn giản, subnet là các căn phòng nhỏ trong ngôi nhà VPC, mỗi subnet sẽ có 1 mục đích sử dụng riêng khác nhau.

Task 3. Tạo 1 Internet Gateway

  • Tại VPC dashboard, chọn vào Internet Gateways và click Create internet gateway
  • Đặt name tag cho Internet Gateway rồi click Create

Có thể hiểu đơn giản internet gateway như 1 cái cửa để đi ra Internet của căn nhà VPC vậy. Muốn đi ra ngoài thì bắt buộc phải làm cửa thôi 😃

  • Create Internet Gateway thành công

  • Chọn vào IG đã tạo rồi click Attach to VPC

  • Select VPC đã tạo ở task 1 để attach rồi nhấn Attach

Thao tác này giống như gắn cửa Internet Gateway vào căn nhà VPC vậy.

Task 4. Tạo 1 Route Table

  • Ở dashboard VPC, chọn vào Route Tables và click Create route table

  • Đặt name tag và chọn VPC đã tạo ở task 1 rồi click Create

Có thể hiểu đơn giản, Route table như là các ống dẫn nước trong nhà, cho phép chủ nhà điều kiển được nước được phép chảy từ phòng (subnet) nào tới phòng nào, hay là chảy ra ngoài (internet).

  • Create route table thành công

  • Sau khi tạo được Route table thì tiến hành thiết lập route theo ý muốn (giống như tiến hành lắp ráp các ống dẫn nước để điều hướng dòng chảy vậy). Chọn vào tab Routes bên dưới màn hình Route table rồi chọn Edit Route

  • Chọn add route với cấu hình rồi click Save routes

Destination: 0.0.0.0/0 Target: Là cổng IG đã tạo ở task 3

  • Create route thành công

  • Sau khi tạo route thành công thì còn phải tạo Subnet Associations để chỉ định subnet nào apply route đã tạo đó. Chọn tab Subnet Associations rồi click Edit Subnet Associations

  • Click chọn 2 public Subnet đã tạo ở task 2 rồi nhấn Save

Như vậy, đến đây có thể xem như đã hoàn thành cơ bản 4 mục tiêu đã đề ra ban đầu. Trong phần sau mình sẽ tiếp tục tìm hiểu thêm về private subnet và thực hiện launch 1 web app trên VPC này.

Kết luận

Có thể suy nghĩ VPC như 1 ngôi nhà riêng mà ở đó chủ nhà có toàn quyền để phân chia, sắp xếp các tài nguyên của mình, cũng như cho phép vị khách nào có quyền ghé thăm và sử dụng các tài nguyên đó. Các subnet thì có thể xem như là các căn phòng, được chia ra để phục vụ các mục đích khác nhau. Để căn nhà có thể liên lạc được với thế giới bên ngoài thì cần có cánh cửa Internet Gateway. Route table như là các ống dẫn nước, cho phép chủ nhà điều khiển dòng chảy lưu thông trong nhà, giữa phòng này với phòng khác, hay giữa căn nhà với bên ngoài.

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

Review lại Part 1

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

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

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ì.

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.

  • 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

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 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

Tổng kết

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.

@nguyenthanhcong101096
Copy link
Author

nguyenthanhcong101096 commented Apr 8, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment