Terraform từ “trò trẻ con” tới “anh ơi tha em”

Tại sao tôi viết cái này à.
À thì nửa năm rồi đần độn quá không nghĩ được gì, nay nhân dịp tuổi mới thì ra cái vẻ giỏi giang chăm chỉ tí. Giống kiểu lôi sách mở ra học ngày 30 tết ý, tâm trạng tôi giờ y nguyên thế, hẳn là các bạn cũng không có gì khó hiểu.

Nội dung tuếch đốc hôm nay thì nó cũng nửa nạc nửa mỡ. Tôi không muốn viết cái gì ai cũng tìm đọc được ở ngoài nhưng đồng thời quá lười lab hình ảnh nên là hôm nay sẽ có một buổi mõm về concept apply Terraform trong môi trường Production hệ thống lớn. Lớn sao thì vào để thì biết.

I. Terraform cho trẻ con.

Chuyện là thế này, sếp bạn cần bạn deploy một con EC2 các thứ các thứ, rồi một hai con loadbalancer, một hai cái apigw nào đấy. Đại khái là ý tưởng anh nó thế, mai anh chán mình đập đi làm lại, em làm sao thì làm.
Lúc này bạn bắt đầu lôi Terraform ra tập tành kiểu state tủng các thứ các thứ ra cái vẻ chuyên nghiệp, bạn deploy thành công một stack web, sếp vui, bạn thì tự tin với trình dép ốp của mình. Đại khái là lúc mới học được cái mới nào thì bạn cũng ngu ngu ảo tưởng mình hiểu hết cả, kiểu kiểu vậy. Chuyện, chắc ổn…

II. Terraform kiểu ơ anh ơi sao tách thành project.

Stack của bạn tự nhiên có người dùng, người dùng là đội HR đi, đằng nào thì nói thật mấy cái web rởm đào đếch ra khách hàng dùng, đâu phải người giàu nào cũng ngu đâu.
Ờ thì bạn bắt đầu phải gia tăng tính năng và các thành phần cho root module terraform của mình. Code bắt đầu trở lên rắc rối, và với tư duy của một thằng vừa đủ điểm đại học bạn bắt đầu đi search “file structure” cho terraform và apply phân tách nó ra.
Bạn thở phào nhẹ nhõm, sếp thì bận từ hôm bắt bạn hầu đội HR biến đâu đi không biết. App vẫn chạy.

III. Terraform kiểu thằng này là thằng nào, sao nó ngồi đây.

Một ngày Hà Nội giông, sếp tự nhiên lên công ty lôi thêm một cu từ đâu ra bảo nó là dev php muốn học dép ốp, sếp bảo thằng này nó giỏi biết hết LAMP stack đấy. Bạn đéo tin, nhưng mà thằng cu em vẫn bị nhét vào bởi vì sếp mới mồi mồm được cái web của bạn cho công ty bên cạnh thuê cùng mặt sàn trong lúc rượu chè. Thằng cu tên Thoảng, đừng hỏi tại sao, tôi thấy cái tên nó buồn cười nên lấy thôi.
Một cháu nhỏ tham gia, bạn phải lôi sản phẩm lên Git một cách chuẩn chỉ, ý là kiểu tách branch các thứ xong apply auto test các kiểu hằm bà lằng. Chứ không nó cứ áp vào có mà khóc ra tiếng mán. Thêm một khách hàng request tính năng tăng lên, bạn vừa xây infra vừa khóc vì các thành phần đều yêu cầu thêm biến mới và đủ thứ kiểu.
Sếp vẫn đi uống rượu, giờ bạn có thêm thằng em, sau bao sự phụng sự trong bóng tối vẫn chả em HR nào chú ý tới bạn hết.

IV. Terraform kiểu sao anh không giết conme em đi.

Công ty bên cạnh làm ăn phất, tự nhiên web lắm người dùng, rồi bên họ PR ác lắm, kiểu uầy em có cái tools xịn anh chị dùng thử… Chả ai biết ở sau chỉ là sản phẩm của một cu đần đụt trĩ, vàng vẩu. Giờ bạn phải gánh sản phẩm ra public vì các hạt giống tương lai của khách vào test lòi mắt, vì sếp bạn khoe mẽ, vì công ty bên cạnh nổ. Ai chết, bạn chết.
Dự án thêm người, Thằng Thoảng vừa ngồi vừa khóc, nó có biết cái mẹ gì đâu, mấy ngày trước nó còn code function ai chỉ đâu đánh đấy. Sếp add thêm 2 người một em gái tên Thi, một ông anh system nhảy dép tên Chạy.
Sản phẩm của bạn Thi Thoảng Chạy. Phần nhiều nó chết cứng, code base quá hằm bà lằng. Bạn khóc, sếp bạn chửi, chó nhà bạn không có hạt, mèo hết sữa. Tận đáy xã hội.
À thì xong sếp vẫn đi uống rượu nhận thêm dự án, công ty startup ý mà, cứ thêm việc thì tính.

V. Terraform modules.

Thôi vào Tếch. Thì thế này cái code bạn kéo từ git về local xong execute về mặt học thuật nó gọi là Root Module, sẽ là một cái folder chứa một loạt file .tf và .tfvar.
Khi này vì code base trở lên rắc rối bạn muốn tách nó ra như kiểu lib của mấy ngôn ngữ lập trình. từ đây các tf modules được khai báo và trỏ tới các git repo. Khi bạn chạy terraform init hay terraform get thì các module này cũng được kéo về lưu trong .terraform/modules
Khi này bạn có thể tách ra các module riêng biệt gọi là genetic module. Mấy cái này đảm bảo DRY rồi MVP (Minimum viable product) các thứ.

Các module này sẽ đảm nhiệm một khối nhỏ base trên các terraform ressources. Lúc này đội có thể tách vài ông ra để làm các update nhỏ trên các module generic.

VI. Sao con dự án này còn nở được vậy.

Khách muốn thêm tính năng, sếp muốn thêm khách hàng, sản phẩm thêm version mới. Lúc này một Product version có quá nhiều modules và có nhiều product luôn. Một hệ sinh thái các thứ. Cái gì đến cũng đến.
Bạn phải thêm một layer nữa gọi là Product Modules. Ở đây sẽ trỏ tới nhiều Generic modules và tạo thành một bộ sản phẩm hoàn chỉnh.

Các product trỏ chân rết chéo nhau tới nhiều generic module. Mỗi một bộ sản phẩm cứ thế xuất hiện.

VII. Terraform X Git

Bản chất cái này thì đã được apply từ khi bạn apply git.
Mỗi product module version sẽ fix với một bộ các generic modules với version được fix và test hoàn thiện xong đó release.
Mỗi một Generic modules cũng tương tự có fix version tới các bộ resource terraform.
Xong hết, chúng ta có một bộ terraform to tổ bố.
Bye.

Leave a Reply

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