Đây là source code project cuối kì môn Điện toán đám mây của nhóm 11
- 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
Client: Html, Css3, Bootstrap
Server: Flask Framework, AWS Lambda, AWS SQS, AWS EC2
Database: DynamoDB
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
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
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
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
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
Chạy chương trình
$env:FLASK_APP='run'
$env:FLASK_DEBUG=1
flask run
Để 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
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