DevOps AI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
No Result
View All Result
Home Tin tức

Trãi nghiệm sau hai ngày dùng thử CDK

Cảm nhận về CDK khi chuyển từ Cloudformation

Quân Nguyễn by Quân Nguyễn
9 Tháng 6, 2022
in Tin tức
0
Share on FacebookShare on Twitter

IaC hay Infrastructure As Code, là một thuật ngữ nói về cơ sở hạ tầng được định nghĩa dưới dạng code, Infrastructure ở đây có nghĩa là những gì mà bạn sẽ sử dụng, và bạn định nghĩa những thứ đó dưới dạng code, sau đó bạn đưa code đó cho provider, và họ sẽ đưa cho bạn đúng những gì mà bạn yêu cầu, provider ở đây có thể là cloud provider như AWS, Azure, GCP, hoặc bạn không dùng cloud thì ở data center cũng có một số provider như Openstack, vsphere. còn nếu bạn tự build một con server nhỏ, dùng ansible để cài cắm cấu hình server, deploy app thì dùng docker, thì đó cũng là một dạng của IaC.

Dự án gần đây nhất mình sử dụng tools IaC là Cloudformation, khi làm việc với CloudFomation, trãi nghiệm khá là chán, CloudFomation dùng ngôn ngữ yaml, nó hổ trợ một vài build-in function để đọc, lấy data từ các resource khác, ngoài ra không có hổ trợ vòng lặp, nếu bạn muốn tạo resoủce thì bạn phải lặp lại code rất nhiều điều đó dẫn đến bạn phải làm việc với một file yaml khá là dài lên đến vài nghìn dòng, đúng là một trải nghiệm cực hình, nó xứng đáng với tên gọi là Infrastructure As Text. 

Input được đưa vào dưới dạng parammeter, ngoài ra bạn có thêm một tùy chọn khác là lấy parammeter store (một service lưu trử parammeter dưới dạng alias).

Related Post

cdk terraform

CDK cho Terraform

29 Tháng 4, 2025
Đổi MTU cho Calico trong Kubernetes

Đổi MTU cho Calico trong Kubernetes

30 Tháng 4, 2025

Tắt NLA trên Amazon EC2 Windows instance

30 Tháng 4, 2025

Demo Tích Hợp Vault trong Kubernetes

30 Tháng 4, 2025

Làm việc với CloudFomation là bạn sẽ làm việc với từng stack, các stack sẽ được một stack cha( stack master) quản lý, và việc truyền output từ stack này sang stack khác sẻ phụ thuộc vào stack cha, tùy thuộc vào độ sâu của stack thì độ phức tạp khi lấy output của stack sẽ tăng lên.

LONO

Trong lúc chán nản mình đã research và tìm thấy LONO

Tools này mình thấy cũng khá hay, cũng phù hợp với team mình, một team đã khá quen thuộc với Cloudformation cũng có thể dễ dang mapping sang LONO. Bù lại phải học một số cú pháp cơ bản của Ruby.

Thời gian mình học Ruby và LONO cũng tầm 1 tháng, project sau một thời gian ngâm cứu thì cũng đã hoàn thiện. 

Bén duyên với CDK

Thằng bàn bên thấy mình ngày ngày cặm cụi với Ruby cũng tò mò tìm hiểu, rồi nó phán một câu CDK giờ mới là trend, thế là mình cũng tìm hiểu thử CDK, CDK là một thư viện dùng để provisioning hạ tầng trên cloud thông qua ngôn ngữ lập trình như Typescript, javascript, Python, Java, C#…

Mình quyết định sử dụng Typescript vì được cộng đồng support nhiều nhất, cú pháp nghe đồn là một bản nâng cấp của javascript, mà nghe cái gì tốt, tối tân là mình theo thôi :v

Project đầu tiên

Mình coi cú pháp của javascript cơ bản trong vòng hai ngày, sau đó chuyển qua Typescript, cửi ngựa xem hoa được một lúc, mình quyết định làm một project nho nhỏ để luyện syntax, chứ xem không mà không thực hành thì sao mà nhớ 🙂

Project này mình sẽ tạo vpc và subnet, để tăng độ khó cho game thì mình sẽ dùng một file XLSX để quản lý vpc và subnet bao gồm tên, ciddr, az.

file sẽ trông như thế này.

Ý tưởng là mình sẽ đọc nội dung của file này sau đó lấy thông tin của vpc và subnet. Dùng CDK để provisioning resource từ các thông tin này.

Function đọc file XLSX

với các syntax cơ bản cộng với tính cần cù chịu khó lục lọi stackoverflow 🙂

				
					import * as dir from "path";
import * as xlsx from "xlsx";
// define interface object for json prasing.
interface resourceObj {
  VPC?: string;
  Subnet: string;
  Cidr: string;
  AZ: number;
  Mode: string;
}
// define module read xlsx file
export function xlsxReader(sheetIndex: number) {
  // initialize the array as empty.
  const sheetArr: resourceObj[] = [];
  // read xlsx file.
  const filePath = dir.resolve("./data", "data.xlsx");
  const workbook = xlsx.readFile(filePath);
  const sheetNames = workbook.SheetNames;
  // convert sheet to json with sheet index.
  const convertToJson = xlsx.utils.sheet_to_json(
    workbook.Sheets[sheetNames[sheetIndex]],
    { raw: true }
  );
  // push oject to array.
  convertToJson.forEach((obj: resourceObj) => {
    sheetArr.push(obj);
  });
  return sheetArr;
}

				
			

Function tạo vpc và subnet

				
					import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as cdk from "aws-cdk-lib";
import { xlsxReader } from "../data/prasing_data";
// define tags for system and env.
const StageName: string = 'dev';
const SystemName: string = 'network';
const ProjectName: string = 'quannhm';
export class CdkStarterStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // get vpc cidr on file xlsx with sheet index 0.
    let vpcCidr = xlsxReader(0)[0].VPC;
    // create vpc with constructor level 1.
    const vpc = new ec2.CfnVPC(this, "VPC", {
      cidrBlock: `$`,
      enableDnsSupport: true,
      enableDnsHostnames: true,
      instanceTenancy: "default",
      tags: [{
        key: 'Name',
        value: [ProjectName, StageName, SystemName, 'vpc'].join('-')
      }]
    });
    // get subnet cidr on file xlsx with sheet index 0.
    xlsxReader(0).forEach(subnetOjb => {
      // declare var for subnet.
      const subnetCidr: string = subnetOjb.Cidr;
      const az: number = subnetOjb.AZ;
      const subnetName: string = subnetOjb.Subnet;
      const resourceName: string = subnetName.split('-').map(name =>
        name[0].toUpperCase() + name.substring(1)).join('')
      // create subnets.
      const subnets = new ec2.CfnSubnet(this, resourceName, {
        availabilityZone: this.availabilityZones[az],
        cidrBlock: `$`,
        mapPublicIpOnLaunch: false,
        vpcId: vpc.ref,
        tags: [{
          key: 'Name',
          value: [ProjectName, StageName, SystemName, subnetName].join('-')
        }]
      });
      // crate outputs subnets.
      new cdk.CfnOutput(this, `$Id`, {
        value: subnets.attrId
      });
    });
  }
}

				
			

Chỉ đơn giản vậy thôi, sau khi viết xong thì mình sẽ dùng lệnh để gen ra Cloudformation để kiểm tra xem code có chạy đúng không. 

Đánh giá chung

Cứ ngỡ là thoát được Cloudformation, vẫn lấp ló bóng dáng nó ở đây, chắc có lẽ dùng để tạo changset integrate với codepipeline chăng.

Cú pháp Javascript cũng như Typescript cũng tương đối dễ học, dễ làm quen.

Tận dụng được hết sức mạnh của một ngôn ngữ lập trình, thay vì dùng một số ngôn ngữ lập trình giả cầy như Cloudformation 🙂

So với Terraform thì phải so sánh với ngôn ngữ HCL, cũng cần phải nhắc lại là có hai kiểu lập trình là Declarative và Imperative, phương pháp Declarative trả lời cho câu hỏi What bằng cách tập trung vào việc mô tả kiến trúc hạ tầng mà người sử dụng muốn. Phương pháp Imperative tập trung cho câu hỏi How, qua việc định nghĩa trạng thái mong muốn và các bước hệ thống cần thực hiện để đạt được trạng thái đó. Thì Terraform nó còn hơi lấp lững giữa hai kiểu trên còn CDK thì thiên hẵn về Imperative. 

Hay nói cho đơn giãn là CDK là Infra is code, còn Terraform là Infar as code.

Tags: buildcdkCloudformationcơ bảndeployđịnh nghĩaec2kiến trúcsupportthuật ngữvpcyaml
Quân Nguyễn

Quân Nguyễn

Related Posts

cdk terraform
DevOps & Cloud

CDK cho Terraform

by Quân Nguyễn
29 Tháng 4, 2025
Đổi MTU cho Calico trong Kubernetes
DevOps & Cloud

Đổi MTU cho Calico trong Kubernetes

by Hiếu Tạ
30 Tháng 4, 2025
Tắt NLA trên Amazon EC2 Windows instance
DevOps & Cloud

Tắt NLA trên Amazon EC2 Windows instance

by Hiếu Tạ
30 Tháng 4, 2025
Next Post

Tổng quan về Cloudformation

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Recommended

Hướng dẫn cài đặt Kubernetes trên Ubuntu 22.04

Hướng dẫn cài đặt Kubernetes trên Ubuntu 22.04

1 Tháng 5, 2025
Các website demo hay được sử dụng cho thực hành Automation Test

Các website demo hay được sử dụng cho thực hành Automation Test

11 Tháng 6, 2025
Cài đặt Maven trên Windows

Cài đặt Maven trên Windows

11 Tháng 6, 2025
Cài đặt Grafana – Loki – Promtail monitoring log Container

Cài đặt Grafana – Loki – Promtail monitoring log Container

1 Tháng 5, 2025
Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

16 Tháng 6, 2025
MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

16 Tháng 6, 2025
DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

13 Tháng 6, 2025
GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

11 Tháng 6, 2025
DevOpsify

Cộng đồng DevOps Việt Nam chia sẽ kiến thức giúp tăng tốc quá trình phát triển ứng dụng và tự động hóa trong lĩnh vực Cloud DevOps & AI.

Bài viết mới

  • Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent
  • MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật
  • DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

Categories

  • AI & Automation
  • Bảo mật
  • Chưa phân loại
  • DevOps & Cloud
  • Tin tức
No Result
View All Result
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud

© 2025 DevOpsify