Dự án trên AWS

Xây dựng ứng dụng web hiện đại

Triển khai một ứng dụng web, kết nối với cơ sở dữ liệu và phân tích hành vi của người dùng

Mô-đun 3: Lưu trữ thông tin mysfit

Trong mô-đun này, bạn sẽ học cách thiết lập Amazon DynamoDB để lưu trữ thông tin mysfit trong bảng cơ sở dữ liệu trung tâm.

Tổng quan

Bây giờ bạn đã triển khai một dịch vụ và đang làm việc về kênh dẫn CI/CD để tự động đưa các thay đổi đến dịch vụ đó mỗi khi bạn cập nhật kho lưu trữ mã của mình. Bạn có thể nhanh chóng đưa tính năng mới của ứng dụng qua giai đoạn lúc hình thành dự án đến lúc triển khai sẵn có cho khách hàng Mythical Mysfits của bạn. Khi sự linh hoạt được nâng cao như vậy, hãy thêm một phần chức năng cơ bản khác vào kiến trúc trang web Mythical Mysfits, đó là bậc dữ liệu.

Trong mô-đun này, bạn sẽ tạo một bảng trong Amazon DynamoDB, một dịch vụ cơ sở dữ liệu NoSQL được quản lý và có thể thay đổi quy mô trên AWS với hiệu năng siêu nhanh. Thay vì lưu trữ tất cả Mysfit trong tệp JSON tĩnh, chúng tôi sẽ lưu trữ chúng trong cơ sở dữ liệu để làm cho các trang web có thể mở rộng và có quy mô linh hoạt hơn trong tương lai.

Sơ đồ kiến trúc

sơ đồ kiến trúc fargate và dynamodb

 Thời gian hoàn thành

20 phút

 Dịch vụ sử dụng

Hướng dẫn thực hiện

  • A: Tạo bảng DynamoDB

    Để thêm bảng DynamoDB vào kiến trúc, chúng tôi đã đưa một tệp đầu vào JSON CLI khác vào. Tệp đó xác định một bảng có tên MysfitsTable. Bảng này sẽ có một chỉ mục chính được xác định bằng một thuộc tính khóa hàm băm có tên MysfitId và hai chỉ mục phụ khác. Chỉ mục phụ đầu tiên có khóa hàm băm là Loài và một khóa phạm vi MysfitId; chỉ mục phụ thứ hai có khóa hàm băm là Căn chỉnh và một khóa phạm vi MysfitId.

    Hai chỉ mục phụ này cho phép chúng ta thực hiện các truy vấn đối với bảng để truy xuất tất cả mysfits khớp với thông tin Loài hoặc Căn chỉnh đã cho, từ đó kích hoạt tính năng lọc mà bạn có thể đã nhận thấy là vẫn chưa hoạt động trên trang web. Bạn có thể xem tệp này tại ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json. Bạn không cần thay đổi gì đối với tệp này và nó đã sẵn sàng để thực hiện. Truy cập trang này để tìm hiểu thêm về chỉ mục trong DynamoDB và các khái niệm cốt lõi khác. 

    Để tạo bảng bằng AWS CLI, thực hiện lệnh sau trên thiết bị đầu cuối Cloud9:

    aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

    Sau khi lệnh này chạy, bạn có thể xem chi tiết của bảng bạn mới tạo bằng cách thực hiện lệnh AWS CLI sau trên thiết bị đầu cuối:

    aws dynamodb describe-table --table-name MysfitsTable

    Nếu bạn thực hiện lệnh sau để truy xuất tất cả các mục được lưu trữ trong bảng thì bạn sẽ thấy bảng bị trống:

    aws dynamodb scan --table-name MysfitsTable
    {
        "Count": 0,
        "Items": [],
        "ScannedCount": 0,
        "ConsumedCapacity": null
    }
    B: Thêm mục vào bảng DynamoDB

    Một tệp JSON cũng được cung cấp. Bạn có thể dùng tệp này để chèn hàng loạt mục Mysfit vào bảng này. Hoạt động này được tiến hành thông qua BatchWriteItem của API DynamoDB.

    Để gọi API này bằng cách sử dụng tệp JSON được cho, thực hiện lệnh sau trên thiết bị đầu cuối (phản hồi từ dịch vụ phải là không có mục nào chưa được xử lý):

    aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

    Bây giờ, nếu bạn chạy cùng lệnh đó để quét toàn bộ nội dung của bảng, bạn sẽ tìm thấy các mục đã tải vào bảng:

    aws dynamodb scan --table-name MysfitsTable
  • A: Sao chép mã dịch vụ Flask cập nhật

    Bây giờ bạn đã có dữ liệu trong bảng, hãy sửa mã ứng dụng để đọc bảng này thay vì trả về tệp JSON tĩnh đã được sử dụng trong Mô-đun 2. Chúng tôi đã đưa vào một tập hợp tệp Python mới cho vi dịch vụ Flask của bạn, nhưng bây giờ thay vì đọc tệp JSON tĩnh, nó sẽ tạo yêu cầu cho DynamoDB.

    Yêu cầu được tạo ra sử dụng SDK AWS Python có tên boto3. SDK này là cách vừa đơn giản nhưng lại vô cùng quyền năng để tương tác với dịch vụ AWS qua mã Python. SDK này cho phép bạn sử dụng các định nghĩa và hàm của máy khách dịch vụ đối xứng hoàn hảo với các API AWS và các lệnh CLI mà bạn đã thực hiện trong hội thảo này. Dịch các lệnh này ra khi làm việc với mã Python cũng rất đơn giản nếu sử dụng boto3.

    Để sao chép các tệp mới vào thư mục kho lưu trữ CodeCommit, hãy thực hiện lệnh sau trên thiết bị đầu cuối:

    cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
    B: Sao chép mã dịch vụ Flask cập nhật

    Bây giờ chúng ta cần kiểm tra những thay đổi mã này với CodeCommit bằng cách sử dụng máy khách dòng lệnh git.

    Chạy các lệnh sau để kiểm tra các thay đổi mã mới và khởi động kênh dẫn CI/CD của bạn:

    cd ~/environment/MythicalMysfitsService-Repository
    git add .
    git commit -m "Add new integration to DynamoDB."
    git push

    Lúc này, chỉ sau 5-10 phút, bạn sẽ thấy các thay đổi mã đi qua toàn bộ kênh dẫn CI/CD của bạn trong CodePipeline và đến dịch vụ Flask đã triển khai đến AWS Fargate trên Amazon ECS.

    Hãy tự do khám phá bảng điều khiển AWS CodePipeline để xem tiến trình của các thay đổi đó trong kênh dẫn của bạn.

  • Cuối cùng, chúng ta cần xuất bản một trang index.html mới vào vùng lưu trữ S3 để chức năng API mới sử dụng chuỗi truy vấn và lọc các câu trả lời sẽ được sử dụng. Tệp index.html mới nằm tại ~/environment/aws-modern-application-workshop/module-3/web/index.html.

    Mở tệp này trong Cloud9 IDE và thay thế chuỗi “REPLACE_ME” giống như cách bạn thực hiện trong Mô-đun 2, bằng điểm cuối NLB. Đừng bao gồm đường dẫn /mysfits.

    Tham khảo tệp bạn đã chỉnh sửa trong thư mục /module-2/ nếu cần. Sau khi thay thế điểm cuối để hướng đến NLB của bạn, hãy tải lên tệp index.html mới bằng cách chạy lệnh sau (thay thế bằng tên của vùng lưu trữ bạn đã tạo trong Mô-đun 1:

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/

    Vào lại trang web Mythical Mysfits để xem nhóm đối tượng Mysfits mới đang tải từ bảng DynamoDB và xem chức năng Bộ lọc hoạt động ra sao!

    Mô-đun 3 kết thúc tại đây.

Tiếp theo, thiết lập đăng ký người dùng.