Tìm hiểu về AWS CDK

Trong thời gian gần đây, triển khai Infrastructure as Code (IaC) đã trở thành một tiêu chuẩn quan trọng trong lĩnh vực công nghệ, đặc biệt là với những kỹ sư hoạt động sâu trong lĩnh vực AWS.

Hiện nay, có hai công cụ phổ biến để định nghĩa và quản lý tài nguyên trên đám mây là AWS CloudFormation và Terraform. Tuy nhiên, việc duy trì các tệp mẫu (template files) trong các dự án lớn trở nên phức tạp và khó khăn hơn, đặc biệt khi sử dụng các định dạng như JSON hoặc YAML.

AWS CDK đã được phát triển để giải quyết vấn đề này, cho phép tạo ra tài nguyên và hạ tầng trên đám mây bằng cách sử dụng mã lệnh thay vì phương pháp khai báo.

Bài viết này chúng ta cùng tìm hiểu AWS CDK là gì, cách thức hoạt động thế nào để có thể giải quyết các vấn đề nêu trên nhé.


I. Giới thiệu về AWS CDK

AWS Cloud Development Kit (CDK) là một công cụ phát triển của Amazon Web Services (AWS) được thiết kế để giúp nhà phát triển xây dựng và quản lý hạ tầng đám mây một cách tự động và linh hoạt bằng cách sử dụng mã lập trình. Thay vì sử dụng cách tiếp cận truyền thống dựa trên các tệp cấu hình JSON hoặc YAML, CDK cho phép bạn viết mã lập trình trong các ngôn ngữ như TypeScript, Python, Java, và .NET để định nghĩa các tài nguyên và cấu hình của AWS.

CDK không chỉ giúp tiết kiệm thời gian mà còn giúp tăng tính linh hoạt và hiệu quả trong việc quản lý hạ tầng đám mây trên Amazon Web Services (AWS). Hãy cùng nhau khám phá các kinh nghiệm và lợi ích khi sử dụng AWS CDK trong dự án của mình!

1. Tại sao lại chọn AWS CDK?

Khi bắt đầu dự án mới, việc lựa chọn công cụ phù hợp để triển khai hạ tầng đám mây rất quan trọng. Với CDK, mình không chỉ có thể viết mã lập trình để định nghĩa các tài nguyên AWS mà còn có thể tận dụng các tính năng linh hoạt và đa dạng của các ngôn ngữ lập trình như TypeScript, Python, Java, và .NET.

2. Tính linh hoạt và tiết kiệm thời gian.

Sử dụng CDK giúp mình tạo ra các tài nguyên AWS một cách nhanh chóng và dễ dàng thông qua việc sử dụng mã lập trình. Việc này không chỉ giúp tiết kiệm thời gian mà còn tạo điều kiện cho việc tái sử dụng mã và quản lý hạ tầng một cách hiệu quả.

3. Sự mạnh mẽ của Constructs và thư viện sẵn có.

CDK đi kèm với một loạt các Constructs và thư viện sẵn có, giúp mình dễ dàng triển khai các tài nguyên phổ biến như Lambda functions, S3 buckets, và DynamoDB tables. Việc này giúp giảm bớt sự phức tạp và giúp tăng tốc quá trình phát triển dự án.

4. Điều chỉnh và quản lý hạ tầng một cách linh hoạt.

Mã lập trình trong CDK cho phép mình điều chỉnh các tài nguyên và thuộc tính của chúng một cách linh hoạt. Thậm chí, mình cũng có thể triển khai và cập nhật hạ tầng đám mây một cách dễ dàng thông qua việc quản lý mã lập trình bằng các công cụ như Git.

II. Cài đặt và cấu hình AWS CDK

A. Hướng dẫn cài đặt AWS CDK

1. Cài đặt Node.js và npm:

  • Đầu tiên, bạn cần cài đặt Node.js và npm (Node Package Manager) trên máy tính của mình. Bạn có thể tải xuống và cài đặt Node.js từ trang web chính thức của Node.js: https://nodejs.org/

2. Cài đặt AWS CDK:

  • Mở cửa sổ dòng lệnh (Command Prompt hoặc Terminal) trên máy tính của bạn.
  • Sử dụng npm để cài đặt AWS CDK bằng cách chạy lệnh sau:
    npm install -g aws-cdk
  • Lệnh này sẽ cài đặt AWS CDK global (toàn cục) trên hệ thống của bạn, giúp bạn có thể truy cập vào CDK từ bất kỳ vị trí nào trên máy tính.

3. Kiểm tra cài đặt:

  • Để kiểm tra xem CDK đã được cài đặt thành công hay không, bạn có thể chạy lệnh sau trong cửa sổ dòng lệnh:
    cdk --version
  • Nếu CDK đã được cài đặt thành công, phiên bản của nó sẽ được hiển thị trên cửa sổ dòng lệnh.

4. Cấu hình AWS CLI (tùy chọn):

  • Nếu bạn chưa cấu hình AWS CLI trên máy tính của mình, bạn cần thực hiện việc này để CDK có thể tương tác với tài khoản AWS của bạn.
  • Sử dụng lệnh aws configure để cấu hình AWS CLI và cung cấp Access Key ID, Secret Access Key, region và định dạng output.

5. Bắt đầu sử dụng:

  • Sau khi cài đặt và cấu hình xong, bạn đã sẵn sàng để bắt đầu sử dụng AWS CDK để tạo và quản lý các tài nguyên AWS bằng mã lập trình.

B. Cấu hình CDK

Để cấu hình AWS CDK cho môi trường làm việc của bạn, bạn có thể thực hiện các bước sau:

1. Cấu hình AWS Credentials.

Trước tiên, bạn cần cấu hình AWS Credentials để CDK có thể tương tác với tài khoản AWS của bạn. Có một số cách để cấu hình các thông tin xác thực này:

  • Cài đặt AWS CLI và sử dụng aws configure: Sử dụng AWS CLI để cấu hình thông tin xác thực. Chạy lệnh aws configure trong cửa sổ dòng lệnh và nhập Access Key ID, Secret Access Key, region và định dạng output.
  • Sử dụng các phương tiện khác như AWS IAM Roles hoặc AWS Credential Profiles: Bạn cũng có thể sử dụng các phương tiện khác để cung cấp thông tin xác thực, chẳng hạn như sử dụng IAM Roles hoặc tạo các AWS Credential Profiles trong tệp ~/.aws/credentials.

2. Cấu hình CDK Global Context.

CDK có thể cấu hình thông qua các giá trị mặc định được gọi là Global Context. Bạn có thể cấu hình các giá trị mặc định này bằng cách sử dụng lệnh cdk bootstrap hoặc chỉnh sửa tệp cdk.json. Các giá trị này bao gồm:

  • defaultAccount: ID tài khoản mặc định được sử dụng cho triển khai.
  • defaultRegion: Region mặc định được sử dụng cho triển khai.

Ví dụ về tệp cdk.json:

{
  "app": "npx ts-node bin/my-app.ts",
  "context": {
    "defaultAccount": "YOUR_DEFAULT_AWS_ACCOUNT_ID",
    "defaultRegion": "us-east-1"
  }
}

3. Cài đặt TypeScript Compiler (nếu sử dụng TypeScript).

Nếu bạn sử dụng TypeScript, bạn cần cài đặt TypeScript Compiler (tsc) trên máy tính của mình. Bạn có thể cài đặt TypeScript bằng npm với lệnh sau:
npm install -g typescript

4. Tạo dự án CDK.

Bây giờ, khi bạn đã cấu hình xong, bạn có thể bắt đầu tạo dự án CDK bằng cách sử dụng lệnh cdk init. Điều này sẽ tạo ra một cấu trúc dự án CDK cơ bản để bạn bắt đầu làm việc.

Nhớ rằng việc cấu hình CDK cần phải phù hợp với môi trường làm việc của bạn và yêu cầu xác thực và quyền truy cập tương ứng đối với tài khoản AWS của bạn.

III. Tạo dự án bằng CDK

Hướng dẫn tạo một ứng dụng đơn giản sử dụng AWS CDK để tạo một Amazon S3 bucket.

Bước 1: Chuẩn bị môi trường:

  • Đảm bảo rằng bạn đã cài đặt AWS CDK trên máy tính của mình theo hướng dẫn trước đó.

Bước 2: Tạo dự án CDK:

  • Mở cửa sổ dòng lệnh và tạo một thư mục mới cho dự án của bạn.
  • Di chuyển đến thư mục mới và chạy lệnh sau để tạo một dự án CDK mới:
    cdk init app --language=typescript
  • Lệnh này sẽ tạo ra một dự án CDK TypeScript cơ bản với một số tệp và thư mục khởi đầu.

Bước 3: Cài đặt các thư viện cần thiết:

  • Di chuyển vào thư mục dự án của bạn và cài đặt các thư viện AWS SDKAWS CDK vào dự án của bạn bằng cách chạy lệnh sau:
    npm install @aws-cdk/aws-s3 @aws-cdk/core
  • Điều này sẽ cài đặt thư viện AWS CDK và thư viện AWS S3 vào dự án của bạn để bạn có thể sử dụng chúng trong mã của mình.

Bước 4: Viết mã tạo Amazon S3 bucket:

  • Mở tệp lib/my-stack.ts trong thư mục của dự án CDK.
  • Thêm mã sau để tạo một Amazon S3 bucket:
import * as s3 from '@aws-cdk/aws-s3';
import * as cdk from '@aws-cdk/core';

export class MyStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true
    });
  }
}

Bước 5: Triển khai ứng dụng:

  • Trong cùng thư mục, mở tệp bin/my-app.ts.
  • Thay đổi nội dung của tệp này để tạo một ứng dụng CDK và triển khai stack bạn vừa tạo:
import * as cdk from '@aws-cdk/core';
import { MyStack } from '../lib/my-stack';

const app = new cdk.App();
new MyStack(app, 'MyStack');

Bước 6: Triển khai stack:

  • Trở lại cửa sổ dòng lệnh và chạy lệnh sau để triển khai stack của bạn lên AWS:
    cdk deploy
  • CDK sẽ tự động tạo và triển khai các tài nguyên bạn đã định nghĩa, bao gồm Amazon S3 bucket.

Bước 7: Kiểm tra kết quả:

[cloudshell-user@ip-10-134-12-14 my-app]$ cdk deploy

✨  Synthesis time: 8.68s

Lookup role does not exist, hence was not assumed. Proceeding with default credentials.
MyStack: deploying... [1/1]
MyStack: creating CloudFormation changeset...

 ✅  MyStack

✨  Deployment time: 26.26s

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:195490076730:stack/MyStack/9e871b40-7a0e-11ef-943f-0ababf6f91c5

✨  Total time: 34.95s


NOTICES         (What's this? https://github.com/aws/aws-cdk/wiki/CLI-Notices)

19836   You are using an unsupported version of AWS CDK

        Overview: AWS CDK v1 is not supported anymore. Support requests
                  relating to this version will be closed. Migrate to AWS CDK
                  v2 to continue to get the latest features and fixes. Read
                  more here:
                  https://aws.amazon.com/blogs/devops/cdk-v1-end-of-support/

        Affected versions: framework: 1.*, cli: 1.*

        More information at: https://github.com/aws/aws-cdk/issues/19836


If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For example, "cdk acknowledge 19836".
[cloudshell-user@ip-10-134-12-14 my-app]$ 
  • Sau khi triển khai thành công, bạn có thể kiểm tra trên AWS Management Console để xem Amazon S3 bucket đã được tạo.

Trên đây một hướng dẫn đơn giản để tạo một ứng dụng đơn giản sử dụng AWS CDK để tạo một Amazon S3 bucket. Bạn có thể mở rộng và tùy chỉnh dự án của mình bằng cách thêm các tài nguyên khác và các tính năng khác của AWS CDK.

IV. Tổng kết và tài liệu tham khảo

Sau khi tìm hiểu về AWS Cloud Development Kit (CDK), chúng ta có thể rút ra những điểm chính sau:

  • AWS CDK là gì
  • Cách sử dụng
  • Lợi ích của việc sử dụng
  • Cách cài đặt và triển khai

Tóm lại, AWS CDK là một công cụ mạnh mẽ giúp tự động hóa quy trình triển khai và quản lý hạ tầng đám mây trên AWS thông qua việc sử dụng mã lập trình. Việc này giúp tăng tính linh hoạt và hiệu suất trong việc xây dựng các ứng dụng và hạ tầng đám mây trên nền tảng AWS.


Dưới đây là một số tài liệu tham khảo và tài nguyên hữu ích khác về AWS CDK:

  • Trang chính thức AWS CDK: Trang web chính thức của AWS CDK cung cấp thông tin chi tiết, tài liệu hướng dẫn và ví dụ minh họa về cách sử dụng CDK: AWS CDK Documentation
  • GitHub Repository: Bạn có thể tìm thấy mã nguồn của AWS CDK và đóng góp vào dự án trên GitHub: AWS CDK GitHub Repository
  • AWS CDK Patterns: Một bộ sưu tập các mẫu thiết kế (patterns) sử dụng AWS CDK để triển khai các kiến trúc phổ biến trên AWS: AWS CDK Patterns GitHub Repository
  • CDK Developer Guide: Hướng dẫn cho các nhà phát triển về cách sử dụng AWS CDK để tạo và triển khai các ứng dụng trên AWS: CDK Developer Guide
  • CDK API Reference: Tài liệu tham khảo về các lớp, phương thức và thuộc tính trong AWS CDK: CDK API Reference