SARS-CoV-2라고도 불리는 세계적인 유행병인 코로나바이러스(COVID-19)는 이미 전 세계 수백만 명의 사람들에게 영향을 미쳤습니다. 코로나19 웹 앱은 코로나19 영향 사례에 대한 글로벌 통계를 제공하는 Python 및 Flask로 개발된 클라우드 애플리케이션의 프로토타입입니다. 이 앱은 REST API 서비스를 사용하여 코로나19에 대한 일일 통계를 가져오고 애플리케이션은 AWS EC2 인스턴스에 배포됩니다.
모든 국가 및 글로벌 통계 요약을 확인하세요.
슬러그 및 국가 코드 세부정보와 함께 모든 국가 목록을 가져옵니다.
외부 API 'https://api.covid19api.com/summary'를 사용하여 코로나19 국가 통계가 포함된 데이터베이스를 로드합니다.
홈 페이지에는 국가별 통계 및 외부 REST API와의 상호 작용을 볼 수 있는 링크와 함께 코로나19의 글로벌 통계가 표시됩니다. 컬 명령을 사용할 수 있습니다:
데이터베이스에서 모든 국가의 통계를 가져옵니다. 다음 컬 명령을 사용하여 실행할 수 있습니다.
curl -i -k https://0.0.0.0/summary/country
데이터베이스에서 전체 통계를 가져옵니다. 다음 컬 명령을 사용하여 실행할 수 있습니다.
curl -i -k https://0.0.0.0/summary/global
데이터베이스에서 국가별 통계를 가져옵니다. 다음 컬 명령을 사용하여 실행할 수 있습니다.
curl -i -k https://0.0.0.0/summary/country/TestCountry
데이터베이스에 새 국가를 추가합니다. 사용자는 다음을 제공해야 합니다.
이는 POST 요청이며 다음 컬 명령을 사용하여 실행할 수 있습니다.
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 -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 -i -k -H "Content-Type: application/json" -X DELETE -d '{"Country":"TestCountry"}' https://0.0.0.0/summary/country
데이터베이스에 전역 통계를 추가합니다. 사용자는 다음을 제공해야 합니다.
여기서 '키'는 '글로벌' 값을 나타냅니다. 이는 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
데이터베이스에 대한 전역 통계를 업데이트합니다. 사용자는 다음을 제공해야 합니다.
여기서 '키'는 '글로벌' 값을 나타냅니다. 이는 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에서 Docker 이미지를 빌드하고 애플리케이션을 배포하는 단계입니다.
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 push가 실패한 경우에만 수행해야 합니다.
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' 범위 내의 포트를 할당합니다.
마지막으로 '30xxx'로 시작하는 이 Nodeport와 함께 AWS EC2 계정의 퍼블릭 DNS를 사용하여 브라우저에서 웹 앱을 봅니다.
sudo microk8s.kubectl delete deployment covidapp-deployment
sudo microk8s.kubectl delete service covidapp-deployment
sudo docker rm cassandra-test