Tạp chí Thợ Code

AWS, ChatGPT, Discord/ Whatever

Lần này để hòa theo không khí nhà nhà ChatGPT, người người ChatGPT như ngày hội toàn dân lên đồng vì ChatGPT và cũng để làm tốt công tác đú trend, nên mình sẽ kể về chuyện Xây dựng Bot chat Discord tích hợp ChatGPT hót hòn họt mấy hôm nay. Xin chú ý, mình không có bán account nên mình không giúp gì được về vấn đề này, tuy nhiên có thể giới thiệu bạn đọc cho một vài mối lái lùa gà uy tín, hehe 😁😁

Để tăng phần tin cậy và luận chứng cho nội dung bên dưới thì xin được cung cấp thêm cho quý đọc giả gần xa một vài số liệu nhỏ:

  • Bắt đầu từ cuối tháng 12/2022 tác giả đã triển khai trên một số kênh cho bạn bè và người quen xài chơi cho vui. Đến thời điểm này cũng đã phục vụ hơn 3000 lượt giao tiếp với ChatGPT.
  • Tầm khoảng tháng 01/2023 qua một số kết nối, ý tưởng này đã được triển khai cho một trường ĐH với rất nhiều cái “đầu tiên” ở Việt Nam.

Từ những đúc kết trên, nay mình chia sẻ với bà con source-code chat, cũng như việc vận hành hệ thống trên hạ tầng AWS Cloud sịn sò với đầy đủ từ khóa bao hot: AI, ChatGPT, Transformer, AWS AppRunner, AWS CodePipeline, AWS CodeBuild… Đảm bảo nghe sướng còn hơn…!

Trong phạm vi bài này chủ yếu sẽ tập trung vào việc xây dựng hạ tầng để chạy ứng dụng Chat bot trên AWS Cloud, các vấn đề lập trình sẽ thảo luận ở chủ đề khác.

Code cho con Bot

Tính cho đến thời điểm hiện tại thì có rất rất nhiều thư viện miễn phí để sử dụng cho nhiều ngôn ngữ, các extensions cũng trăm hoa đua nở. Bạn có thể tham khảo để dựng endpoint cho các tools IM hoặc thậm chí tự dựng luôn FE để giao tiếp cũng được.

Một số thư viện cho các ngôn ngữ, bạn có thể tham khảo thử, cùng rất nhiều sourcecode đã sẵn sàng để chạy.

Mỗi ngôn ngữ sẽ có một chút khác biệt chủ yếu ở Dockerfile để build container.

Tạo Bot, Lấy các Token cần thiết

Dựng hạ tầng

Ở đây mình sẽ xài AWS AppRunner để tối ưu quy trình CI/CD, vì xài mấy cái khác thì ngầu hơn nhưng mà tạm thời mình chưa biết xài. Cho ai chưa xài thì AppRunner cho phép bạn “conatiner hóa ứng dụng web và API một cách nhanh chóng”, hỗ trợ scales như các chuyên gia hạ tầng hàng trăm năm kinh nghiệm mà không đòi người sử dụng phải có gì đặc biệt ngoài tiền!

Ngoài ra thì AppRunner còn giúp scale up/ scale down một cách tự động để đáp ứng nhu cầu traffic của bạn, cho phép bạn dành nhiều thời gian hơn cho việc viết code thay vì phải lọ mọ config server như năm xưa.

Mô hình hệ thống cơ bản
画像が読み込まれない場合はページを更新してみてください。

Code sẽ được các devs push lên GitHub, mình cần setup CodePipeline để pulls code về, build code bằng CodeBuild, sau đó build image bằng Amazon ECR. AppRunner được setup để tự động deploy lại khi có image mới ở ECR Repository. Log sẽ được bắn vô CloudWatch hoặc Seq, các thông tin hệ thống thì thảy vô Grafana nhìn cho ngầu.

  1. Tạm thời chưa chuẩn bị xong source-code nên bạn dùng tạm bản bản fork này để minh họa. Bạn hãy fork/ clone nó về local hoặc clone về CloudShell console cũng được, chúng ta sẽ dùng CloudShell để chạy một số lệnh.
  2. Mở CloudFormation để tiến hành khởi tạo các dịch vụ cần thiết, bạn hãy dùng file cloudformation.yaml được chuẩn bị sẵn, nhập các thông tin cần thiết vô mục Parameters.

BranchName: repo GitHub để clone clode về, mặc định là main. ECRRepoName: không hiểu sao chỗ này viết hoa thì báo lỗi, viết thường lại OK. GitHubOAthToken: token đã lấy ở trên. RepoOwner: username GitHub. RepositoryName: tên repo trên GitHub.

  1. Tạo IAM roles: mở CloudShell lên và cd vào folder vừa clone về, trong này đã có sẵn file apprunner-role.json. Chạy lệnh sau:

aws iam create-role --role-name App-Runner-ServiceRole --assume-role-policy-document file://apprunner-role.json

Lệnh này để cấp quyền thao tác với CloudWatch

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess --role-name App-Runner-ServiceRole

  1. Deploy container image lên App Runner: trước khi làm bước này thì bạn nhớ mở ECR lên coi Image tag lastet đã build hoàn tất chưa. Nếu không thì khi click Browse ở mục Container image URI bạn sẽ không thấy cái cần thấy đâu.
画像が読み込まれない場合はページを更新してみてください。
  • Deployment settings nhớ chọn Automatic để tự động deploy luôn image sau khi hoàn tất quy trình.
  • Use existing service role: AppRunnerECRAccessRole.

Trong phần Configure service theo tiêu chí đánh nhanh rút gọn có sản phẩm để luanching liền nên chúng ta tạm thời không cần quan tâm nhiều, chỉ cần chú ý khai báo Environment variables là được.

Tùy từng source-code khác nhau thì có thể khác nhau.

画像が読み込まれない場合はページを更新してみてください。

Thêm đồ chơi cho ngầu

Đến đây xem như đã hoàn tất cơ bản để có hệ thống chạy được, tuy nhiên lỡ rồi thì làm luôn cho ngầu.

Amazon Managed Grafana

Có 2 loại, Service managed và Customer managed, khác nhau ở phần cấu hình IAM roles để Grafana đọc thông tin từ các data source.

Cách setup khá đơn giản, chỉ cần quan tâm một số tùy chọn sau:

  • Workspace name.
  • Authentication access: AWS IAM Identity Center (successor to AWS Single Sign-On).

Sau khi tạo xong vào mục Authentication, click Configure users and user groups rồi chọn group, click Assign user, tiếp đến click Action chọn Make admin. Có quyền admin thì mới có thể add được các data source và xây dựng dashboard.

画像が読み込まれない場合はページを更新してみてください。

Xong

Kiểm tra
  1. Bạn kiểm tra Default domain xem health check đã hoạt động chưa.
  2. Mở Discord xài thử!
Giải tán

Cái hay của việc dùng CloudFormation là bạn có thể dọn dẹp các tài nguyên nhanh chóng như lúc tạo ra. Tuy nhiên cần chú ý empty các S3 Bucket và tự xóa các IAM đã tạo bằng tay trên CloudShell.

  1. Xóa App Runner.
  2. Xóa IAM roles, empty bucket, xóa các repository image trong ECR.
  3. Xóa CloudFormation stack.

Anh Dũng, Feb 2023.

Saigon, một ngày nắng thấy ông bà ông vãi.