Skip to content

quangbdhz/Project_Nhom_11

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Xây dựng ứng dụng trên AWS cho phép tạo Database và cung cấp api để thêm, xóa, sửa trên Database

Đây là source code project cuối kì môn Điện toán đám mây của nhóm 11

Các tính năng chính

  • Thêm, xóa table DynamoDB
  • Tương tác dữ liệu của table trực tiếp trên web
  • Tương tác dữ liệu của table thông qua API được cung cấp

Công nghệ sử dụng

Client: Html, Css3, Bootstrap

Server: Flask Framework, AWS Lambda, AWS SQS, AWS EC2

Database: DynamoDB

Thành viên tham gia Project

Yêu cầu

Truy cập vào thư mục project, chạy các lệnh sau để init các table cần thiết trước khi khởi chạy project

  cd Project_Nhom_11
  python
  from my_app import first_init
  first_init.run()

Từ AWS Lambda, tạo 1 Lambda Function với đoạn code sau đây

import json
import boto3
import urllib
from urllib.parse import unquote
import re
import ast

def lambda_handler(event, context):
    # TODO implement
    data = event['Records'][0]['body']
    data = unquote(data)
    data = data.replace("\'", "\"")

    data = json.loads(data)
    

    response = create_dynamodb_table(data)
    print(response)
    

def create_dynamodb_table(event):
    AttributeDefinitions = [
    {
        'AttributeName': event['PartitionKey'],
        'AttributeType': event['PartitionKey_type']
    }
    ]
    KeySchema = [
    {
        'AttributeName': event['keyHash'],
        'KeyType': event['keyHash_type']
    }
    ]
    if event['SortKey'] != '':
        AttributeDefinitions.append({
            'AttributeName': event['SortKey'],
            'AttributeType': event['SortKey_type']
        })
        KeySchema.append({
            'AttributeName': event['keyRange'],
            'KeyType': event['keyRange_type']
        })
    try:
        client = boto3.resource('dynamodb')
        response = client.create_table(
            AttributeDefinitions = AttributeDefinitions,
            TableName=event['tablename'],
            KeySchema = KeySchema,
            BillingMode='PAY_PER_REQUEST',
        )
        response.meta.client.get_waiter('table_exists').wait(TableName=event['tablename'])
        return response
    except Exception as e: print(e)

Tạo 1 hàng đợi với AWS SQS dùng để trigger cho Function vừa tạo ở trên

App Screenshot

Copy URL của hàng đợi vừa tạo ở trên, truy cập vào file routes.py và tìm đoạn code sau, thay giá trị của biến url thành đường dẫn của hàng đợi đã tạo ở trên

  vi Project_Nhom_11/my_app/routes.py

App Screenshot

Từ AWS Lambda, tạo 1 Lambda Function với đoạn code sau đây

import json
import boto3
import urllib
from urllib.parse import unquote
import re
import ast

def lambda_handler(event, context):
    # TODO implement
    # data = json.loads(event['Records'][0]['body']) 
    data = event['Records'][0]['body']
    data = unquote(data)
    data = data.replace("\'", "\"")

    data = json.loads(data)
    response = delete_dynamodb_table(data)
    print(response)

def delete_dynamodb_table(event):
    try:
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table(event['tablename'])
        response = table.delete()
        
        return response
    except Exception as e: print(e)

Tạo 1 hàng đợi với AWS SQS dùng để trigger cho Function vừa tạo ở trên

App Screenshot

Copy URL của hàng đợi vừa tạo ở trên, truy cập vào file routes.py và tìm đoạn code sau, thay giá trị của biến url thành đường dẫn của hàng đợi đã tạo ở trên

  vi Project_Nhom_11/my_app/routes.py

App Screenshot

Chạy trên Localhost

Clone project từ github

  git clone https://github.com/truongnguyenvan8801/Project_Nhom_11.git

Truy cập thư mục chứa project

  cd Project_Nhom_11

Tạo môi trường ảo

  virtualenv venv

Kích hoạt môi trường ảo

  .\venv\Scripts\activate

Cài đặt các thư viện

  pip install -r requirements.txt

Cung cấp các secret key cần thiết để sử dụng các tài nguyên trong AWS

  cd my_app/__init__.py

App Screenshot

Chạy chương trình

  $env:FLASK_APP='run'
  $env:FLASK_DEBUG=1
  flask run

Deploy lên AWS EC2

Để deploy project, thực hiện các lệnh sau

  sudo apt-get update

clone project về máy ảo

  git clone https://github.com/truongnguyenvan8801/Project_Nhom_11.git

Update các library cần thiết

  pip3 install --upgrade pip
  python3 -m pip install setuptools-rust

Truy cập vào thư mục chứa project

 cd Project_Nhom_11

Install các thư viện mà project yêu cầu

  python3 -m pip install -r requirements.txt

Truy cập file run.py

  vi run.py

Thay đổi từ

    from my_app import app

    app.run(debug=True)

sang cấu hình phù hợp với máy ảo EC2

    from my_app import app

    app.run(host='0.0.0.0', port=8080)

Cung cấp các secret key cần thiết để sử dụng các tài nguyên trong AWS

  vi my_app/__init__.py

App Screenshot

Sau khi thực hiện các cấu hình cần thiết, để chạy chương trình thực hiện lệnh

  python3 run.py

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CSS 63.5%
  • JavaScript 19.4%
  • HTML 13.8%
  • Python 3.3%