Xây dựng hệ thống chatOps đơn giản sử dụng AWS

AWS Nov 02, 2021

Xin chào anh chị em, bài viết này sẽ chia sẻ với mọi người xây dựng một hệ thống cops đơn giản sử dụng các dịch vụ của AWS: Amplify, Cognito, AppSync, DynamoDB, Amazon Lex.

1. Mô tả

Nói thì nó cao siêu thôi, chứ thật ra các dịch vụ này của AWS cũng không khó như suy nghĩ đâu nhé. Và dưới đây là một số khái niệm về các dịch vụ mà mình sẽ sử dụng trong bài viết này:

  1. AWS Amplify: là một tập hợp các công cụ và dịch vụ được tạo ra có chủ đích, giúp nhà phát triển web và di động front-end xây dựng ứng dụng full-stack một cách nhanh chóng và dễ dàng trên AWS với khả năng tận dụng linh hoạt các dịch vụ AWS phong phú để tùy chỉnh thêm ứng dụng. Amplify hỗ trợ các ngôn ngữ lập trình, khung web và nền tảng phổ biến bao gồm JavaScript, React, Angular, Vue và Next.js cho các ứng dụng web cũng như Android, iOS, React Native, Ionic và Flutter cho ứng dụng di động.
    👉 Source: https://aws.amazon.com/amplify/

  2. Amazon Cognito: cung cấp xác thực, ủy quyền và quản lý người dùng cho web và ứng dụng dành cho thiết bị di động của bạn. Người dùng của bạn có thể đăng nhập trực tiếp bằng tên người dùng và mật khẩu hoặc thông qua bên thứ ba như Facebook, Amazon, Google hoặc Apple.
    👉 Source: https://aws.amazon.com/cognito/

  3. Amazon AppSync: cung cấp giao diện GraphQL mạnh mẽ, có thể mở rộng cho các nhà phát triển ứng dụng để kết hợp dữ liệu từ nhiều nguồn, bao gồm Amazon DynamoDB, AWS Lambda và API HTTP.
    👉 Source: https://aws.amazon.com/appsync/

  4. Amazon DynamoDB: là một dịch vụ cơ sở dữ liệu NoSQL được quản lý hoàn toàn, cung cấp hiệu suất nhanh và có thể dự đoán được với khả năng mở rộng liền mạch.
    👉 Source: https://aws.amazon.com/dynamodb/

  5. Amazon Lex: là một dịch vụ AWS để xây dựng giao diện trò chuyện cho các ứng dụng sử dụng giọng nói và văn bản sử dụng AI
    👉 Source: https://aws.amazon.com/lex/

Sau khi đọc xong một số khái niệm, anh chị em cùng xem qua cấu trúc hệ thống và mô tả:
Screenshot-from-2021-11-01-09-40-54

Mô tả hệ thống:

Người dùng sẽ tương tác với Amazon Amplify (một ứng dụng sử dụng VueJS hoặc Angular), thông tin người dùng đăng ký và đăng nhập sẽ được Amazon Cognito quản lý. Sau khi login vào hệ thống, người dùng sẽ tương tác với chatbot dựa trên Amazon Lex, lịch sử trò chuyện sẽ được lưu trên DynamoDB và được truy xuất thông qua Amazon AppSync. Cuối cùng, các yêu cầu của người dùng sẽ được Amazon Lex xử lý và gọi tới Lambda để thực thi chức năng.

2. Xây dựng

2.1 Amplify

Để dựng một ứng dụng amplify, anh chị em có thể bắt đầu đọc qua ở đường dẫn này:
https://docs.aws.amazon.com/amplify/latest/userguide/getting-started.html

Đầu tiên, hãy nhớ cài đặt và cấu hình Amplify CLI nhé:

$ npm install -g @aws-amplify/cli
$ amplify configure

Tiếp theo, mình tạo một ứng dụng VueJS(2x) và khởi tạo amplify và deploy bằng lệnh sau:

$ vue create huongdan
$ cd huongdan
$ yarn add aws-amplify
$ yarn add @aws-amplify/ui-vue
$ amplify init
$ amplify hosting add 
$   - Chọn Hosting with Amplify Console
$   - Chọn Manual Deployment
$ amplify publish

Sau khi chạy xong, kết quả được như hình dưới, là anh chị em đã thiết lập một ứng dụng amplify và có thể truy cập link để vào hệ thống rồi đó.

amplify_succes_install

2.2 Cognito

Sau khi đã có 1 app VueJS sample, anh chị em sẽ tiếp tục cài đặt Amazon Cognito để hộ trợ việc xác thực người dùng có thể truy cập hệ thống.

$ amplify auth add
$	- Default configuration
$	- Email
$	- No, I am done
$ amplify push

Sau khi quá trình được cài đặt thành công, anh chị em có thể dùng câu lệnh:

$ amplify auth console
$   - Chọn option bất kỳ để được chuyển tới màn hình web console của Amazon Cognito trên AWS.

Tiếp theo, ở trong ứng dụng anh chị em nhớ cho thẻ amplify-authenticator như hình dưới:

ađd_cognito

Cuối cùng, chạy publish để đưa thay đổi lên amplify

$ amplify publish

Truy cập hosting và tạo thử user thôi
cognito_success

2.3 API - DynamoDB

Xây dựng một AppSync API bằng lệnh sau:

$ amplify api add
$   - GraphQL
$   - Amazon Cognito User Pool
$   - No, I am done
$   - Do you have an annotated GraphQL schema? No
$   - Do you want to edit the schema now? No

Sau đó amplify sẽ yêu cầu anh chị em chọn một scheme template, anh chị em chọn Todo nhé, cho dễ chỉnh sửa.
Khi hoàn tất thiết lập, anh chị em sửa file scheme, nó như là một cấu trúc DB dành cho DynamoDB, tùy thuộc anh chị em muốn lưu dữ liệu gì nhưng trong bài viết này, mình chỉ lưu dữ liệu người dùng và lịch sử trò chuyện nên scheme mẫu như dưới:

File tại đường dẫn:
/amplify/backend/api/miiops/schema.graphql:

type Conversation @model {
  id: ID!
  sender: String!
  message: String
  username: String!
  createdAt: AWSDateTime!
}

Và cuối cùng là cập nhật thay đổi lên amplify bằng lệnh:

$ amplify push
$   - Are you sure you want to continue? | Yes
$   - Do you want to generate code for your newly created GraphQL API | Yes
$   - Choose the code generation language target | javascript
$   - Các option tiếp theo để mặc định nhé
$ amplify publish

Kết quả chúng ta sẽ có một DynamoDB và một dịch vụ AppSync trên AWS đươc khởi tạo

appsync_success

2.4 Amazon Lex

Và thành phần cuối cùng, đó là Amazon Lex là AI xử lý để tạo một con Bot chat và hỗ trợ thực thi nhiệm vụ.

Để cài đặt, sử dụng amplify cli:

$ amplify interactions add
$   - Would you like to start with a sample chatbot or start from scratch? | Start with a sample
$   - Choose a sample chatbot: | ScheduleAppointment

Lệnh bên trên mình tạo một sample cho Amazon Lex là ScheduleAppoitment, anh chị em có thể truy cập vào dịch vụ để xem cách Amazon Lex xử lý kịch bản chat.

Và apply vào source code phần chat:

<amplify-chatbot
  bot-title="Chatbot Lex"
  bot-name="YOUR_BOT_NAME"
  welcome-message="Hello, how can I help you?"
  voice-enabled="true"
/>

Trong đó, YOUR_BOT_NAME là tên của Amazon Lex được tạo, anh chị em nhớ build và publish Amazone Lex trước khi sử dụng nhé, không là sẽ bị lỗi khi chạy.

Với amplify-chatbot là một element được dựng sẵn giao diện chat, tuy nhiên có nhiều tính năng mà anh chị em muốn khi làm thì có thể không nhất thiết phải dùng tới nó mà sẽ viết lại toàn bộ tính năng

Với Amazon Lex, anh chị em dựng kịch bản khi hoàn thành thu thập dữ liệu thì sẽ gọi tới một hàm Lambda để thực thi chức năng gì đó ở phần Fulfillment:

Fulfillment

Giải thích thêm: Anh chị em có thể gọi tới một API của Jenkins để deploy một project nào đó thông qua Lambda này.

3. Demo

Dưới đây là video tổng hợp quá trình thực hiện, gồm tạo Amplify, Cognito, API (AppSync, DynamoDB), Interactions (Amazon Lex). Phần lambda sẽ phát triển bằng cách gọi tới một API của Jenkins chẳng hạn (trong video hiện tại đang chỉ demo console.log cho phần này).
Trong đó phần xử lý lưu lịch sử chat không đưa vào video này!

Trong bài viết hoặc video có gì anh chị em chưa hiểu, vui lòng feedback để bài viết được hoàn thiện hơn.

Về source code đầy đủ lưu lịch sử chat, API với Jenkins anh chị em có thể liên lạc trực tiếp với mình nhé!

Cảm ơn anh chị em đã quan tâm, hẹn gặp lại ở bài viết tiếp theo!

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.