Pandemi global CoronaVirus COVID-19 juga disebut sebagai SARS-CoV-2 telah mempengaruhi jutaan orang di seluruh dunia. Aplikasi Web COVID-19 adalah prototipe Aplikasi Cloud yang dikembangkan dengan Python dan Flask yang memberikan statistik global kasus yang terkena dampak COVID-19. Aplikasi ini menggunakan layanan REST API untuk mendapatkan statistik harian COVID-19 dan aplikasi diterapkan di instans AWS EC2.
Dapatkan ringkasan semua negara dan statistik global.
Dapatkan daftar semua negara beserta detail slug dan kode negara.
Ini memuat database dengan statistik negara COVID 19 menggunakan API eksternal 'https://api.covid19api.com/summary'
Halaman Beranda menampilkan statistik Global COVID 19 beserta tautan untuk melihat statistik berdasarkan Negara dan interaksi dengan REST API eksternal. Seseorang dapat menggunakan perintah curl:
Dapatkan statistik semua negara dari database. Dapat dieksekusi menggunakan perintah curl berikut:
curl -i -k https://0.0.0.0/summary/country
Dapatkan statistik global dari database. Dapat dieksekusi menggunakan perintah curl berikut:
curl -i -k https://0.0.0.0/summary/global
Dapatkan statistik spesifik negara dari database. Dapat dieksekusi menggunakan perintah curl berikut:
curl -i -k https://0.0.0.0/summary/country/TestCountry
Tambahkan negara baru ke database. Pengguna harus menyediakan hal berikut:
Ini adalah permintaan POST dan dapat dieksekusi dengan menggunakan perintah curl berikut:
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
Perbarui negara yang ada ke database. Pengguna harus menyediakan hal berikut:
Ini adalah permintaan PUT dan dapat dieksekusi menggunakan perintah curl berikut:
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
Menghapus catatan negara dari database. Pengguna harus menyediakan hal berikut:
Ini adalah permintaan DELETE dan dapat dieksekusi menggunakan perintah curl berikut:
curl -i -k -H "Content-Type: application/json" -X DELETE -d '{"Country":"TestCountry"}' https://0.0.0.0/summary/country
Tambahkan statistik global ke database. Pengguna harus menyediakan hal berikut:
Di sini 'kunci' mengacu pada nilai 'Global'. Ini adalah permintaan POST dan dapat dieksekusi menggunakan perintah berikut:
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
Memperbarui statistik global ke database. Pengguna harus menyediakan hal berikut:
Di sini 'kunci' mengacu pada nilai 'Global'. Ini adalah permintaan PUT dan dapat dijalankan menggunakan perintah berikut:
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
Menghapus catatan statistik global dari database. Pengguna harus menyediakan hal berikut:
*Kunci
Di sini 'kunci' mengacu pada nilai 'Global'. Ini adalah permintaan DELETE dan dapat dijalankan menggunakan perintah berikut:
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;
Aplikasi ini disajikan melalui https dengan menyiapkan sertifikat yang ditandatangani sendiri seperti yang ditunjukkan di bawah ini:
$ 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)
Berikut adalah langkah-langkah untuk membangun image buruh pelabuhan dan menerapkan aplikasi di 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"]
}
Catatan: Langkah ini opsional dan harus dilakukan hanya jika docker push gagal.
sudo systemectl restart docker
sudo docker start cassandra-test
sudo microk8s.kubectl apply -f ./deployment.yaml
Aplikasi we sekarang diterapkan di 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
Di bawah ini adalah contoh status layanan:
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
Di sini kita dapat melihat aplikasi web yang diterapkan diekspos ke Nodeport '30873'. Secara default, layanan kubernetes mengalokasikan port dalam rentang '30000-32767'.
Terakhir, lihat aplikasi web di browser menggunakan DNS publik akun AWS EC2 bersama dengan Nodeport ini yang dimulai dengan '30xxx'.
sudo microk8s.kubectl delete deployment covidapp-deployment
sudo microk8s.kubectl delete service covidapp-deployment
sudo docker rm cassandra-test