Chuyên mục Cloud - CloudFormation AWS (P2)
Bài đăng này đã không được cập nhật trong 6 năm
1. Giới thiệu:
Tiếp theo bài viết lần trước, lần này mình sẽ giới thiệu cụ thể 1 template để tạo ra được môi trường dùng cho production nhé. Đây là mô hình cụ thể:
Môi trường này rất cơ bản về mặt cấu trúc bao gồm:
- 1 VPC
- 4 Subnet (bao gồm: 2 public subnet, 2 private subnet) mỗi subnet thuộc availability zone riêng
- 1 internet gateway
- 1 nat gateway
- 1 bastion host trên subnet public (aws admin trên hình)
- 1 application load balancing
- 1 auto scale cho web
OK giờ thì thực hiện nào.
2. Build
Về chi tiết full template thì các bạn có thể xem ở đây nhé. Nói qua về template thì region mình chọn ở đây là Ohio - us-east-2. nên các bạn muốn làm trên Region khác thì chỉnh sửa hết những thành phần us-east-2. AvailabilityZone thì chuyển tương ứng. Ở đây mình có us-east-2a và us-east-2b.
AMI dùng để tạo instance là dùng: ami-f6035893 đây nhé
2.1. Network
2.1.1. VPC
Ai cũng biết VPC là thành phần cốt lõi của các dịch vụ aws, dịch vụ gì cũng phải có VPC mới có thể chạy được. Ở đây mình tạo 1 VPC với dải mạng là: 10.0.0.0/16. Lưu ý: các bạn bỏ qua phần Metadata có trong này nhé. Vì nó chỉ để xác định vị trí trên hình ảnh của CloudFormation mà thôi.
2.1.2. Subnet Public
Phần Subnet này cần quan tâm tới: CidrBlock - dải mạng của Subnet. AvailabilityZone - zone của Subnet MapPublicIpOnLaunch - cấp IP Public cho instance
Có các thành phần chính: 2 public subnet
- myPublicSubneta: dải mạng của subnet a
- mySubnetRouteTableAssociationa: attach route vào subnet a
- mySubnetNetworkAclAssociationa: attach access list vào subnet a
- myPublicSubnetb: dải mạng của subnet b
- mySubnetRouteTableAssociationb: attach route vào subnet b
- mySubnetNetworkAclAssociationb: attach access list vào subnet b
2.1.3. Route, Internet Gateway
Các thành phần:
- myPublicRoute: tạo route chính cho các public subnet
- myInternetGateway: gateway ra internet của public subnet
- myPublicRouteTable: route table để gán Route vào
2.1.4. Network Access List cho Public Subnet
Các thành phần chính:
- myNetworkACL: access list cho public subnet
- myNetworkAclEntry1 -> myNetworkAclEntry12: các rule được gán vào ACL
Code Network Access List cho Public Subnet
2.1.5. Private Subnet
Các thành phần chính cũng tương tự Public Subnet: 2 Private subnet
- myPrivateSubneta
- myPrivateSubnetRouteTableAssociationa
- myPrivateSubnetNetworkAclAssociationa
- myPrivateSubnetb
- myPrivateSubnetRouteTableAssociationb
- myPrivateSubnetNetworkAclAssociationb
2.1.6. Route, Nat Gateway, Elastic IP
Các thành phần chính:
- myPrivateRouteTable: Route table của private subnet
- myPrivateRoute: Các rule trong Route
- myNatGateway: gateway cho subnet private (tạo trên public subnet)
- myEIP: elastic IP để gán vào Nat gateway
Code Route, Nat Gateway, Elastic IP
2.1.7. Network Access List cho Private Subnet
Cũng giống như ACL cho Public Subnet
Code Network Access List for Private Subnet
2.2. EC2 & CloudWatch
2.2.1. Security Group
Tạo 3 security group cho:
- Application Load Balancing
- Inbound:
- allow port 80 from all
- allow port 443 from all
- Outbound:
- allow all
- Inbound:
- Bastion Host
- Inbound:
- allow port 22 from all
- Outbound:
- allow all
- Inbound:
- Web
- Inbound:
- allow port 22 from bastion host
- allow port 80 from ALB
- allow port 443 from ALB
- Outbound:
- allow all
- Inbound:
2.2.2. Load Balancing
Ở đây mình tạo Application Load Balacing nhé. Bao gồm các thành phần:
- myTargetGroup: để forward package từ ALB vào
- myLoadBalancer: application load balancing cần tạo
- myListener: Listen port 80 trên LB
2.2.3. Auto Scale
Gồm các thành phần:
- myAutoScale: min 1 instance, max 3 instance (các bạn có thể tự chỉnh số lượng instance ở đây)
- myLaunchConfig: launch config để sử dụng cho auto scale (các instance web sử dụng user data để install nginx)
- WebServerScaleUpPolicy: rule tăng instance. Cooldown 1'.
- WebServerScaleDownPolicy: rule giảm instance. Cooldown 1'.
- CPUAlarmHigh: scale up khi CPU > 80% trong 10'
- CPUAlarmLow: scale down khi CPU < 40% trong 10'
2.2.4. Bastion Host
Tạo bastion instance (trực thuộc myPublicSubneta)
2.2.5. Type instance
Để tạo CloudFormation với quyền lựa chọn Loại Instance nào thì chúng ta cần tạo trường Parameter và Mapping cho các loại instance đó:
3. Create stack
Nào giờ create stack va run thử xem nào. Đây là quá trình tạo và hoàn thiện nhé.
Lúc tạo stack, các bạn nhớ tạo KeyName trước nhé. rồi chọn Type instance
CloudFormation đang tạo các Resource tương ứng:
Các resource khi tạo xong:
- VPC
- Public Network Access List
- Private Network Access List
- Security Group
-
Auto scaling
-
Application LB
Sau khi hoàn thiện xong, các bạn có thể kiểm tra ALB xem đã hoạt động chưa
Nếu bạn bị lỗi 504 Bad Gateway, đừng lo, hãy ssh vào con web instance và thực hiện lại bước install & run nginx nhé. Đợi 1 chút để healthcheck ok là xong.
Vậy là xong phần cơ bẩn nhất của môi trường production rồi. Các bạn có thể tạo thêm các service khác phục vụ đúng yêu cầu của mình nữa là ok rồi. Quá nhanh quá nguy hiểm phải không các bạn
All rights reserved