Giới thiệu và cài đặt CDK
CDK là bộ công cụ phát triển ứng dụng cung cấp những tính năng hỗ trợ việc xây dựng và triển khai trên nền tảng AWS. Khác với CloudFormation Template, CDK sử dụng các ngôn ngữ lập trình phổ biên như TypeScript, Java, C# giúp việc khai báo và cấu hình các tài nguyên tính toán theo hướng tiếp cận Imperative
Nhắc lại:
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 đó.
Sự khác biệt lớn so với Cloudformation là CDK có thể được trừu tượng hóa . Trong Cloudformation, ngay cả khi có các tài nguyên có các thuộc tính tương tự, cách duy nhất là củng cố định nghĩa của chúng. Tuy nhiên, CDK hỗ trợ nhiều ngôn ngữ lập trình và bằng cách tận dụng thế mạnh của các ngôn ngữ đó, có thể xác định tài nguyên với một lượng code nhỏ hơn.
Để thuận tiện cho việc sử dụng, AWS CDK xây dựng sẵn một thư viện – AWS Construct Library tương ứng với những tài nguyên, dịch vụ cung cấp bởi AWS. Dựa theo mục đích sử dụng, các thành phần trong thư viện được chia thành nhiều cấp độ khác nhau:
Low level – L1: bao gồm các CFN Resources, đại diện trực tiếp cho những tài nguyên có thể khai báo thông qua dịch vụ AWS CloudFormation. Ví dụ: CfnBucket tương ứng với AWS::S3::Bucket trong đặc tả của CloudFormation Template.
Middle level – L2: bao gồm các thành phần có tính đóng gói cao hơn, tập trung nhiều hơn vào mục đích sử dụng cụ thể. Các thành phần này được khai báo kèm theo những thiết lập thuộc tính với giá trị mặc định, hoặc phương thức thường được áp dụng trong quá trình sử dụng trên thực tế. Ví dụ: thành phần s3.Bucket cùng phương thức addLiffeCycleRule() cho phép bổ sung những qui tắc quản lý vòng đời sử dụng của một S3 Bucket.
Higher level – L3: hay còn gọi là Patterns, các thành phần này giúp người sử dụng nhanh chóng thiết lập những cấu hình ứng dụng được sử dụng phổ biến. Ví dụ: khai báo và thiết lập Fargate hoặc EC2-based Service trong aws-ecs-pattern thông qua một đối tượng duy nhất thay vì thực hiện hàng loạt các cấu hình thành phần ở mức thấp hơn như VPC, Task, Service.
Cài đặt AWS CDK
Trong bài biết này mình sẻ sử dụng ngôn ngử Typescript,
$ npm install -g aws-cdk
Kiểm tra xem đã cài đặt đúng chưa
$ cdk doctor
Cấu hình CDK
để có thể dùng CDk bạn cần phải cấu hình biến môi trường về tài khoản và khu vực (region).
Cấu hình biến môi trường trên macOS, các bạn dùng linux cũng tương tự nha.
thêm hai dòng sau vào file .zshrc hoặc bashrc.
# config CDK
export CDK_DEFAULT_ACCOUNT='000000000000'
export CDK_DEFAULT_REGION='us-west-1'
Tạo một dự án
mkdir hello-ckd
cd hello-cdk
cdk init app --language typescript
sau đó mở thư mục dự án bằng VS code.
Cấu hình TS-node
ts-node là một mô-đun Node.js sử dụng trình biên dịch TypeScript để chuyển mã TypeScript và chạy nó trong Node. ts-node là một phần của hệ sinh thái Node/npm
npm i ts-node
cấu hình trong cdk.json
"app": "./node_modules/.bin/ts-node -T bin/learning_cdk.ts",
Cấu hình CDK app
Phần mình sẽ cấu hình region và tài khoản cho app bằng cách đọc hai biến môi trường đã cấu hình ở bước trên, ngoài ra mình còn cấu hình thêm stack name.
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { HelloCkdStack } from '../lib/hello-ckd-stack';
const app = new cdk.App();
new HelloCkdStack(app, 'HelloCkdStack', {
stackName: 'hello-stack',
// env account.
env: {
region: process.env.CDK_DEFAULT_REGION,
account: process.env.CDK_DEFAULT_ACCOUNT,
},
});
Định nghĩa tài nguyên đầu tiên
npm install @aws-cdk/aws-ec2
lib/stack.ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cdk from 'aws-cdk-lib';
export class HelloCkdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new ec2.Vpc(this, 'vpc');
}
}
Mình sẽ tạo một vpc, sau đó dùng lệnh cdk synth để gen ra CLoudfromation nhằm mục đích kiểm tra xem resource tạo ra có đúng hay không.
$ cdk synth
Resources:
Vpc8378EB38:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
EnableDnsSupport: true
InstanceTenancy: default
Tags:
- Key: Name
Value: DevioStack/Vpc
Metadata:
aws:cdk:path: DevioStack/Vpc/Resource
Triển khai
Khi bạn triển khai ứng dụng AWS CDK cho môi trường của mình (tài khoản / khu vực) lần đầu tiên, hãy thực hiện cài đặt ban đầu. Hãy thực hiện lệnh.
$ cdk bootstrap
$ cdk deploy
DevioStack: deploying...
DevioStack: creating CloudFormation changeset...
và sau đó nó đã tạo ra một VPC, bốn mạng con, bốn bảng định tuyến, một cổng internet, hai elastic IP và hai cổng NAT.
Bạn sẽ tự hỏi là tại sao lại như thế, bạn chỉ khai báo mỗi VPC thôi mà? đó là vì constructor (Cấu trúc) được sử dụng trong mẫu Vpc này là L2 và bằng cách tạo nó, các tài nguyên khác cần thiết cho việc xây dựng mạng đã được tạo cùng với các cài đặt thích hợp.
Nó có thể thuận tiện cho những người không quan tâm đến cài đặt chi tiết và muốn triển khai thứ gì đó hoạt động ngay lập tức, nhưng là một kỹ sư cơ sở hạ tầng, mình muốn tùy chỉnh các thuộc tính của từng tài nguyên một cách chi tiết.
Github
clone source code trong bài viết ở đây.
Dọn dẹp
để dọn dẹp bạn dùng lệnh cdk destroy, tỏng bài này mình đã nói tổng quan một cách đơn giản nhất để tạo một vpc với CDK, trong phần sau mình sẽ chia sẽ thêm về phần tesing và format code.
Tổng kết
trong bài viết này mình đã giớ thiệu tổng quan về CDK, trong bài viết tới mình sẽ nói về các sử dụng constructor L1 để định nghĩa tài nguyên một cách chi tiết.