Hiện nay khi ngày càng phụ thuộc nhiều hơn vào môi trường đám mây, việc vận hành đám mây một cách hiệu quả cũng trở thành một thách thức lớn đối với các công ty. Do đó, chúng tôi muốn giới thiệu về AWS CDK (Amazon Web Services Cloud Development Kit), bộ công cụ giúp hợp lý hóa việc xây dựng môi trường đám mây AWS.
Những vấn đề khi xây dựng đám mây
Có nhiều phương pháp để thực hiện xây dựng cơ sở hạ tầng đám mây AWS. Phương pháp phổ biến nhất là làm theo các bước trong bảng AWS Control để đăng ký, nhưng vẫn tồn tại nhiều nhược điểm.
Ví dụ, trong trường hợp thiết kế AWS với quy mô lớn, cần phải thực hiện nhiều bước, rất tốn thời gian và dễ xảy ra lỗi. Ngay cả khi đã hiểu được quy trình, và muốn triển khai cùng một cài đặt ở một version khác, cần phải thực hiện lại quá trình tương tự để cài đặt dịch vụ.
AWS hiện đã cung cấp hai cách để giải quyết vấn đề này với các công cụ.
- CloudFormation
- AWS CDK
Tại sao nên chọn CDK thay vì CloudFormation?
AWS CloudFormation coi cơ sở hạ tầng là mã, cho phép lập mô hình, cung cấp và quản lý AWS và các tài nguyên của bên thứ ba.
CloudFormation định cấu hình và triển khai các dịch vụ AWS trong các tệp YAML, vì vậy có thể sử dụng lại các tệp YAML.
Ví dụ: Đăng ký S3
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: “MyBucket”
Dù có thiết kế phức tạp nhưng chỉ mất khoảng 5 phút để triển khai ở một phiên bản khác hoặc với một tài khoản khác.
Tuy nhiên, vẫn có một số nhược điểm.
- Tệp YAML sẽ rất lớn khi xây dựng các kiến trúc đám mây lớn.
- Làm việc với các tệp YAML rất khó trong một số trường hợp (cần phải có kiến thức về YAML)
- Rất dễ mắc lỗi do copy – paste thường xuyên
- Rất khó để kết hợp các dịch vụ của bên thứ ba (ví dụ: Test tự động).
Vì những lý do trên, các nhà quản lý và nhà phát triển đang tránh sử dụng CloudFormation dựa trên YAML, và CDK đang trở thành xu hướng chính.
Lợi ích của AWS CDK
AWS Cloud Development Kit (AWS CDK) là một khung phát triển phần mềm mã nguồn mở để xác định tài nguyên ứng dụng đám mây bằng các ngôn ngữ lập trình quen thuộc.
Nếu muốn sử dụng CloudFormation, người dùng cần học cách viết tệp YAML. AWS CDK tăng tốc quá trình gia nhập AWS của người dùng vì không cần học YAMIL. Vì có thể sử dụng các kỹ năng hiện có (ngôn ngữ lập trình) và các công cụ (VSCode, Sublime, VisualStudio, v.v.). Ngoài ra, cùng một thiết kế kiến trúc CloudFormation có thể yêu cầu nhiều dòng mã, tại CDK có thể không cần dòng mã nào.
Hiện tại, CDK hỗ trợ các ngôn ngữ lập trình sau:
- Typescript
- Javascript
- Python
- Java
- C#
- Go
Tuy không hỗ trợ tất cả, nhưng các ngôn ngữ trên đều rất phổ biến cho hầu hết các nhà phát triển. Ngôn ngữ phổ biến nhất là Typescript.
Một ưu điểm khác là có thể được tái sử dụng.
Ví dụ: Nếu đăng ký 2 Tables trong DynamoDB, trong CloudFormation, cần viết và định dạng cấu hình dưới đây 2 lần. Đây là lý do tại sao tệp YAML sẽ phụ thuộc lớn vào tiến độ của Font end.
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
– AttributeDefinition
GlobalSecondaryIndexes:
– GlobalSecondaryIndex
KeySchema: Json
ProvisionedThroughput:
ProvisionedThroughput
TableClass: String
TableName: String
Tags:
– Tag
TimeToLiveSpecification:
TimeToLiveSpecification
Với CDK, khi muốn tạo Class GenericTable cho Table DynamoDB và đăng ký Table, chỉ cần gọi theo mã được hiển thị ở phía dưới.
private myTable = new GenericTable(this, {
tableName: ‘MyTables’,
primaryKey: ‘objectId’,
})
Ngoài ra, quá trình tương tự như trên cũng có thể được áp dụng kết hợp các kiến trúc này vào một kiến trúc khác thông qua việc tái sử dụng.
Nhược điểm của AWS CDK
Để triển khai One-At-The-Time AWSCDK tự động tạo các tệp CloudFormation YAML mất nhiều thời gian.
Nếu ứng dụng có nhiều tác vụ, có thể triển khai song song chúng để tiết kiệm thời gian.
Tuy vậy, tại thời điểm hiện tại không thể triển khai song song trên Local Computer. Tuy nhiên, chúng tôi hy vọng rằng trong tương lai AWS có thể thêm một tùy chọn triển khai concurrency (đồng thời) để khắc phục.
Tổng kết
Tóm lại, AWS CDK là một giải pháp hiệu quả để thu hẹp khoảng cách giữa kỹ sư infrastructure / kỹ sư DevOps và nhà phát triển. Chúng tôi cho rằng nó là một công cụ rất hứa hẹn để thu hẹp khoảng cách, bằng cách cho phép các nhà phát triển có thể định nghĩa cơ sở hạ tầng bằng các ngôn ngữ như TypeScript và Python.
AWS CDK giúp giảm chi phí quản lý cơ sở hạ tầng AWS. Ngoài ra, khung Serverless có thể được bao gồm trong CDK, làm cho định nghĩa về các ứng dụng Serverless dễ hiểu hơn
So với CloudFormation, việc quản lý project dễ dàng hơn. Khả năng chia sẻ cùng một mã nguồn cho mỗi môi trường ở cùng một nơi cho API và cơ sở hạ tầng, giúp giảm Human Error khi thiết lập môi trường, cũng như chi phí sửa đổi.