Chào bạn! Bạn có bao giờ cảm thấy "đau đầu" khi phải triển khai hạ tầng đám mây một cách thủ công không? Kiểu như phải nhớ từng bước một, sợ sai sót, hay phải thức khuya thức hôm để làm những việc lặp đi lặp lại? AWS CloudFormation chính là "cứu tinh" của bạn đó! Nó giúp chúng ta định nghĩa toàn bộ hạ tầng (từ mạng lưới đến máy chủ) chỉ bằng một file "công thức" duy nhất. Từ đó, mọi thứ sẽ được triển khai tự động, nhất quán và cực kỳ đáng tin cậy, thậm chí bạn có thể lên lịch cho nó chạy mà không cần động tay động chân. Trong bài lab này, chúng ta sẽ cùng nhau khám phá cách biến những ý tưởng hạ tầng phức tạp thành hiện thực chỉ với vài cú click trên AWS CloudFormation, từ triển khai các tầng hạ tầng khác nhau, cập nhật "stack" (tập hợp tài nguyên) cho đến xóa bỏ nó một cách thông minh (giữ lại những gì cần thiết).Sau bài lab này, bạn sẽ "nắm trong lòng bàn tay" những kỹ năng siêu đỉnh sau đây:Triển khai cả một mạng lưới ảo (VPC) bằng AWS CloudFormation – xây nhà cần có móng vững chãi mà!Dựng lên một "tòa nhà" ứng dụng (với máy chủ, nhóm bảo mật) và kết nối nó với mạng lưới vừa tạo – mọi thứ liên kết chặt chẽ như mô hình lego vậy!Thăm dò các "công thức" (template) bằng AWS CloudFormation Designer (Infrastructure Composer) – công cụ giúp bạn "vẽ" ra hạ tầng một cách trực quan, sinh động.Dọn dẹp "chiến trường" bằng cách xóa stack nhưng vẫn giữ lại những tài nguyên quan trọng nhờ chính sách xóa thông minh – dọn nhà mà không làm mất đồ quý!Giờ thì, chúng ta cùng "xắn tay áo" vào việc thôi nào!Bạn đã sẵn sàng để "phù phép" ra một mạng lưới ảo trên AWS chưa? Nhiệm vụ đầu tiên của chúng ta là triển khai một template AWS CloudFormation để tạo ra một "tầng mạng" bằng Amazon VPC.1. Đầu tiên, hãy tải ngay file template "công thức" này về máy: lab-network.yaml. Bạn biết không, các template có thể được viết bằng JSON hoặc YAML đấy. Nhưng YAML thì dễ đọc và dễ chỉnh sửa hơn nhiều, cứ như là ngôn ngữ "thân thiện với người dùng" hơn vậy!2. Truy cập vào CloudFormation Dashboard và cùng "điền thông tin" cho stack của chúng ta nào:Chọn Create stack > With new resources (standard). Đây là kiểu tạo stack mới toanh luôn đó.Prepare template: Chọn Template is ready vì chúng ta đã có file template rồi.Template source: Tải lên file lab-network.yaml mà bạn vừa down về.Stack name: Đặt tên stack là lab-network nhé. Tên này sẽ giúp bạn dễ dàng nhận diện nó sau này.Tags: Thêm một cái tag Key: application với Value: inventory. Việc gán tag này cực kỳ hữu ích đó, nó giúp chúng ta dễ dàng quản lý và phân loại tài nguyên sau này. Cứ như dán nhãn cho từng món đồ trong kho vậy!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frk8iye6eqdu847b5losq.png' alt='Giao diện tạo stack CloudFormation'>Sau khi CloudFormation đọc xong "công thức" này, nó sẽ tự động tạo ra một "stack" (một tập hợp các tài nguyên) trong tài khoản AWS của bạn. Đơn giản là CloudFormation sẽ "làm theo" những gì bạn đã mô tả trong file template!3. Chọn tab Resources. Bạn sẽ thấy một danh sách chi tiết các tài nguyên mà template vừa "phù phép" ra. Cứ như xem danh sách những món đồ mới tinh trong nhà bạn vậy!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspqq5q28urd7jd13peq0.png' alt='Danh sách tài nguyên trong CloudFormation stack'>4. Chọn tab Events và "dạo quanh" xem các sự kiện đã diễn ra. Mọi hoạt động của CloudFormation đều được ghi lại ở đây, từ lúc bắt đầu tạo tài nguyên cho đến khi hoàn thành. Nếu có bất kỳ lỗi nào xảy ra trong quá trình tạo stack, bạn cũng sẽ thấy nó xuất hiện ở đây đó!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n5i0go1l54duc5vt6q1.png' alt='Các sự kiện trong CloudFormation stack'>5. Cuối cùng, hãy ghé thăm tab Outputs. Đây là nơi các stack có thể "chia sẻ" giá trị cho nhau. Trong trường hợp này, các ID của VPC và Subnet đã được gán tên "xuất" (export names) để các stack khác có thể dễ dàng "lấy" chúng. Nhờ vậy, những stack sau này có thể xây dựng tài nguyên bên trong chính cái VPC và Subnet mà chúng ta vừa tạo ra!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8fsp9dec4xmmn874lsw.png' alt='Outputs của CloudFormation stack'>Mạng lưới đã có, giờ là lúc dựng ứng dụng lên thôi! Chúng ta sẽ triển khai một tầng ứng dụng bao gồm một máy chủ Amazon EC2 (một máy tính ảo trên đám mây) và một nhóm bảo mật (Security Group) – cánh cổng bảo vệ máy chủ của bạn.Template AWS CloudFormation lần này sẽ "nhập khẩu" các ID của VPC và Subnet từ output của stack lab-network mà chúng ta vừa tạo. Sau đó, nó sẽ dùng thông tin này để tạo nhóm bảo mật trong VPC và máy chủ EC2 trong Subnet đã có sẵn. Thật là tiện lợi phải không nào?1. Tải ngay file template lab-application.yaml về máy tính của bạn.2. Quay lại CloudFormation Dashboard và cấu hình tương tự như Task 1:Create stack > With new resources (standard).Prepare template: Template is ready.Template source: Tải lên file lab-application.yaml.Stack name: Đặt là lab-application.Tags: Key: application với Value: inventory.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbstovxtqfojz2q7e5sv0.png' alt='Giao diện tạo stack ứng dụng CloudFormation'>3. Sau khi stack lab-application hoàn tất, hãy vào tab Output. Sao chép đường dẫn URL hiển thị ở đó, mở một tab trình duyệt mới, dán URL vào và nhấn Enter. Bạn sẽ thấy ứng dụng của mình đang chạy rồi đó!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qlzh8cde3t8ihkydqtg.png' alt='Output của stack ứng dụng'>Bạn thấy không, một stack CloudFormation hoàn toàn có thể dùng các giá trị từ một stack khác! Ví dụ, đoạn code nhỏ này trong template lab-application đã "mượn" thông tin từ lab-network:WebServerSecurityGroup:Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP ingress VpcId: Fn::ImportValue: !Sub ${NetworkStackName}-VPCID Dòng cuối cùng, !Fn::ImportValue, chính là "chìa khóa" thần kỳ đó! Nó dùng tên stack mạng mà bạn đã cung cấp (lab-network) để nhập giá trị lab-network-VPCID từ output của stack đầu tiên. Kết quả là, nhóm bảo mật của bạn được tạo ra chính xác trong cái VPC mà chúng ta đã xây dựng từ đầu!Giờ thì hãy thử tài năng "nâng cấp" của mình nhé! Trong nhiệm vụ này, chúng ta sẽ cập nhật stack lab-application để thay đổi một cài đặt trong nhóm bảo mật.1. Vào EC2 dashboard và tìm đến mục Security Group.2. Quan sát các quy tắc Inbound rules của nhóm lab-application-WebServerSecurityGroup. Hiện tại, chỉ có một quy tắc cho phép lưu lượng HTTP (cổng 80) thôi.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21a2svarho8ptzerpadj.png' alt='Quy tắc Inbound ban đầu của Security Group'>3. Tải ngay template đã được cập nhật lab-application2.yaml về máy bạn.Template mới này có thêm một "phép thuật" nhỏ nữa là cho phép lưu lượng HTTPS (cổng 443) đi vào. Cụ thể là đoạn này:- IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/04. Trong CloudFormation console, hãy chọn stack lab-application và chọn Update rồi cấu hình như sau:Prepare template: Chọn Replace current template.Template source: Chọn Upload a template file.Upload a template file: Tải lên file lab-application2.yaml mà bạn vừa down.Trước khi bạn xác nhận, CloudFormation sẽ hiển thị bản xem trước các thay đổi (Change set preview). Bạn sẽ thấy WebServerSecurityGroup được liệt kê với Replacement = False. Điều này có nghĩa là CloudFormation sẽ chỉ "chỉnh sửa" nhỏ gọn nhóm bảo mật này mà không cần phải xóa đi tạo lại hoàn toàn. Thật thông minh phải không? Không cần phải "thay cả áo" chỉ vì muốn thêm một cái túi!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxs9ava1sa5gfzyjyoo7z.png' alt='Xem trước các thay đổi của CloudFormation'><img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu712zjdk9np341n0j571.png' alt='Màn hình xác nhận cập nhật stack'>Sau khi cập nhật xong, hãy quay lại Amazon EC2 console, chọn lab-application-WebServerSecurityGroup trong danh sách Security Groups. Bạn sẽ thấy tab Inbound rules giờ đây đã có thêm một quy tắc mới, cho phép lưu lượng HTTPS qua cổng TCP 443 rồi đó! Quá tuyệt vời phải không?<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza3t6dq6o3xhfph82zue.png' alt='Quy tắc Inbound sau khi cập nhật'>Bạn có muốn "vẽ vời" hạ tầng đám mây của mình một cách trực quan không? AWS CloudFormation Designer (hay còn gọi là Designer hoặc Infrastructure Composer) chính là công cụ dành cho bạn! Nó giống như một bảng vẽ thần kỳ, giúp bạn tạo, xem và chỉnh sửa các template CloudFormation một cách dễ dàng. Bạn có thể kéo thả các tài nguyên vào "bức tranh" hạ tầng của mình, sau đó chỉnh sửa chi tiết ngay trong trình soạn thảo JSON và YAML tích hợp.1. Trong CloudFormation Console, chọn Infrastructure Composer.2. Tải lên template lab-application2.yaml mà chúng ta đã dùng trước đó. Và bùm! Designer sẽ hiển thị một biểu đồ đồ họa tuyệt đẹp về template của bạn. Nhìn là hiểu liền!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqly5dbu5banyl8qbdxv.png' alt='Giao diện CloudFormation Designer'>Mọi cuộc vui nào cũng đến lúc tàn, và hạ tầng cũng vậy! Khi không còn cần đến tài nguyên nào đó nữa, AWS CloudFormation có thể giúp bạn "dọn dẹp" sạch sẽ. Nhưng có một điều thú vị hơn, bạn có thể thiết lập "chính sách xóa" (Deletion Policy) cho các tài nguyên. Chính sách này cho phép bạn bảo tồn hoặc thậm chí sao lưu một tài nguyên nào đó khi stack của nó bị xóa. Điều này cực kỳ hữu ích cho các cơ sở dữ liệu, ổ đĩa, hoặc bất kỳ tài nguyên quan trọng nào mà bạn muốn giữ lại ngay cả khi ứng dụng không còn chạy nữa. Nó cũng là một "lá chắn" tuyệt vời để ngăn chặn việc vô tình xóa mất dữ liệu quan trọng!Stack lab-application của chúng ta đã được cấu hình để tự động chụp một bản snapshot (ảnh chụp nhanh) của ổ đĩa Amazon Elastic Block Store (Amazon EBS) trước khi bị xóa. Đoạn code "thần kỳ" làm được điều đó chính là đây:DiskVolume:Type: AWS::EC2::VolumeProperties:Size: 100AvailabilityZone: !GetAtt WebServerInstance.AvailabilityZoneTags:- Key: NameValue: Web DataDeletionPolicy: Snapshot Bạn thấy đấy, dòng DeletionPolicy: Snapshot đã "ra lệnh" cho CloudFormation phải tạo một bản sao lưu trước khi "tiễn" ổ đĩa đi đó!1. Trong CloudFormation console, chọn liên kết lab-application và chọn Delete.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzauq5ffos794665hqrlm.png' alt='Xóa CloudFormation stack'>Stack ứng dụng đã được "dọn dẹp", nhưng stack mạng lưới (lab-network) thì vẫn còn nguyên vẹn. Điều này nhấn mạnh một ý tưởng tuyệt vời: các nhóm khác nhau (ví dụ: nhóm mạng hoặc nhóm ứng dụng) có thể quản lý các stack của riêng họ một cách độc lập!2. Để kiểm tra xem bản snapshot của ổ đĩa EBS đã được tạo trước khi nó bị xóa hay chưa, hãy vào EC2 Dashboard và chọn Snapshots. Bạn sẽ thấy "bằng chứng" ngay!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q5dg9uk2gqbkjkdy154.png' alt='Danh sách Snapshots'>Vậy là chúng ta đã cùng nhau trải qua một hành trình thú vị với AWS CloudFormation rồi đó! Sau bài lab này, bạn đã bỏ túi được những kiến thức siêu xịn sò như:Triển khai cả một "khu phố" mạng ảo (VPC) bằng AWS CloudFormation – xây nền tảng vững chắc!Dựng lên một "ngôi nhà" ứng dụng và kết nối nó với "khu phố" mạng đã có – mọi thứ hoạt động hài hòa!Trực quan hóa và "chơi đùa" với các template bằng AWS CloudFormation Designer – biến những dòng code khô khan thành hình ảnh sống động!Biết cách "dọn dẹp" stack một cách thông minh, vừa sạch sẽ vừa giữ được những thứ quan trọng – dọn nhà như một chuyên gia vậy!Chúc mừng bạn đã hoàn thành xuất sắc bài lab này! Giờ thì bạn đã có thêm một "siêu năng lực" mới trong thế giới đám mây rồi đó!