การแพร่ระบาดไปทั่วโลก CoronaVirus COVID-19 หรือที่เรียกว่า SARS-CoV-2 ได้ส่งผลกระทบต่อผู้คนหลายล้านคนทั่วโลก เว็บแอป COVID-19 เป็นต้นแบบของแอปพลิเคชันบนคลาวด์ที่พัฒนาใน Python และ Flask ที่ให้สถิติทั่วโลกของกรณีที่ได้รับผลกระทบจาก COVID-19 แอปนี้ใช้บริการ REST API เพื่อรับสถิติรายวันของ COVID-19 และแอปพลิเคชันถูกปรับใช้ในอินสแตนซ์ AWS EC2
รับข้อมูลสรุปของทุกประเทศและสถิติทั่วโลก
รับรายชื่อประเทศทั้งหมดพร้อมรายละเอียดทากและรหัสประเทศ
สิ่งนี้จะโหลดฐานข้อมูลพร้อมสถิติประเทศของ COVID 19 โดยใช้ API ภายนอก 'https://api.covid19api.com/summary'
หน้าแรกจะแสดงสถิติทั่วโลกของ COVID 19 พร้อมด้วยลิงก์เพื่อดูสถิติของประเทศและการโต้ตอบกับ REST API ภายนอก คุณสามารถใช้คำสั่ง curl:
รับสถิติของทุกประเทศจากฐานข้อมูล สามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k https://0.0.0.0/summary/country
รับสถิติทั่วโลกจากฐานข้อมูล สามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k https://0.0.0.0/summary/global
รับสถิติเฉพาะประเทศจากฐานข้อมูล สามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k https://0.0.0.0/summary/country/TestCountry
เพิ่มประเทศใหม่ลงในฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
นี่เป็นคำขอ POST และสามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X POST -d '{"NewConfirmed":2,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Country":"TestCountry"}' https://0.0.0.0/summary/country
อัพเดตประเทศที่มีอยู่ไปยังฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
นี่คือคำขอ PUT และสามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X PUT -d '{"NewConfirmed":999,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Country":"TestCountry"}' https://0.0.0.0/summary/country
ลบบันทึกประเทศออกจากฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
นี่คือคำขอ DELETE และสามารถดำเนินการได้โดยใช้คำสั่ง curl ต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X DELETE -d '{"Country":"TestCountry"}' https://0.0.0.0/summary/country
เพิ่มสถิติทั่วโลกลงในฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
ในที่นี้ 'key' หมายถึงค่า 'Global' นี่คือคำขอ POST และสามารถดำเนินการได้โดยใช้คำสั่งต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X POST -d '{"NewConfirmed":9,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Key":"TestGlobal"}' https://0.0.0.0/summary/global
อัพเดตสถิติทั่วโลกไปยังฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
ในที่นี้ 'key' หมายถึงค่า 'Global' นี่คือคำขอ PUT และสามารถดำเนินการได้โดยใช้คำสั่งต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X PUT -d '{"NewConfirmed":1,"TotalConfirmed":10,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Key":"TestGlobal"}' https://0.0.0.0/summary/global
ลบบันทึกสถิติทั่วโลกออกจากฐานข้อมูล ผู้ใช้จะต้องจัดเตรียมสิ่งต่อไปนี้:
*สำคัญ
ในที่นี้ 'key' หมายถึงค่า 'Global' นี่คือคำขอ DELETE และสามารถดำเนินการได้โดยใช้คำสั่งต่อไปนี้:
curl -i -k -H "Content-Type: application/json" -X DELETE -d '{"Key":"TestGlobal"}' https://0.0.0.0/summary/global
sudo apt update
sudo apt install docker.io
sudo docker pull cassandra:latest
sudo docker run --name cassandra-test -p 9042:9042 -d cassandra:latest
wget https://raw.githubusercontent.com/niranjanganesan/ECS781P_Cloud_Computing_Mini_Project/master/country.csv
wget https://raw.githubusercontent.com/niranjanganesan/ECS781P_Cloud_Computing_Mini_Project/master/global.csv
sudo docker cp country.csv cassandra-test:/home/country.csv
sudo docker cp global.csv cassandra-test:/home/global.csv
sudo docker exec -it cassandra-test cqlsh
cqlsh> CREATE KEYSPACE COVID19 WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': '1'};
cqlsh> CREATE TABLE COVID19.summary (Country text PRIMARY KEY,NewConfirmed int,
TotalConfirmed int, NewDeaths int, TotalDeaths int, NewRecovered int,
TotalRecovered int);
cqlsh> CREATE TABLE COVID19.global (Key text PRIMARY KEY,NewConfirmed int,
TotalConfirmed int, NewDeaths int, TotalDeaths int, NewRecovered int,
TotalRecovered int, TimeStamp text);
cqlsh> COPY COVID19.summary(Country, NewConfirmed, TotalConfirmed, NewDeaths, TotalDeaths, NewRecovered, TotalRecovered)
FROM '/home/country.csv' WITH HEADER=TRUE;
cqlsh> COPY COVID19.global(Key, NewConfirmed, TotalConfirmed, NewDeaths, TotalDeaths, NewRecovered, TotalRecovered)
FROM '/home/global.csv' WITH HEADER=TRUE;
แอปให้บริการผ่าน https โดยการตั้งค่าใบรับรองที่ลงนามด้วยตนเองดังที่แสดงด้านล่าง:
$ openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Generating a RSA private key
.....................................++++
....................................................................................++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:England
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:QMUL
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:[email protected]
if __name__ == "__main__":
context = ('cert.pem','key.pem')
app.run(host='0.0.0.0',port=443,ssl_context=context)
ด้านล่างนี้เป็นขั้นตอนในการสร้างอิมเมจนักเทียบท่าและปรับใช้แอปพลิเคชันใน kubernetes
sudo snap install microk8s --classic
sudo microk8s enable registry
apiVersion: apps/v1
kind: Deployment
metadata:
name: covidapp-deployment
labels:
app: covidapp
spec:
selector:
matchLabels:
app: covidapp
replicas: 3
template:
metadata:
labels:
app: covidapp
spec:
containers:
- name: covidapp
image: localhost:32000/covidapp:registry
ports:
- containerPort: 443
sudo docker build . -t localhost:32000/covidapp:registry
sudo docker push localhost:32000/covidapp:registry
{
"insecure-registries" : ["localhost:32000"]
}
หมายเหตุ: ขั้นตอนนี้เป็นทางเลือกและต้องทำเฉพาะในกรณีที่การพุช docker ล้มเหลว
sudo systemectl restart docker
sudo docker start cassandra-test
sudo microk8s.kubectl apply -f ./deployment.yaml
ขณะนี้แอป we ได้รับการปรับใช้ใน kubernetes แล้ว
sudo microk8s.kubectl get deployment
sudo microk8s.kubectl get pods
sudo microk8s.kubectl expose deployment covidapp-deployment --port=443 --type=LoadBalancer
sudo microk8s.kubectl get services
ด้านล่างนี้คือสถานะตัวอย่างของบริการ:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/covidappv3-deployment LoadBalancer 10.152.183.77 <pending> 443:30873/TCP 17h
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 9d
ที่นี่เราจะเห็นว่าเว็บแอปที่ปรับใช้นั้นเปิดเผยกับ Nodeport '30873' ตามค่าเริ่มต้น บริการ kubernetes จะจัดสรรพอร์ตภายในช่วง '30000-32767'
ในที่สุดก็ดูเว็บแอปในเบราว์เซอร์โดยใช้ DNS สาธารณะของบัญชี AWS EC2 พร้อมกับ Nodeport นี้ที่ขึ้นต้นด้วย '30xxx'
sudo microk8s.kubectl delete deployment covidapp-deployment
sudo microk8s.kubectl delete service covidapp-deployment
sudo docker rm cassandra-test