라이트 세일을 활용해 AWS 클라우드를 구축했다.
다음과 같은 과정으로 기본설정을 마쳤다.
Lightsail Ubuntu20 / 4GB 짜리 인스턴스를 사용하였다. DB는 mysql을 사용했고 Bucket은 5GB를 사용했다.

Lightsale Networking에서 static ip를 생성했다.
static ip를 생성하면 자동으로 인스턴스에 정적 ip가 할당된다.


DNS zone을 만들면 NS가 생성된다. → NS를 가비아에 등록해 준다

NS 등록후 Assignments와 DNS record를 확인하고, 위와 같이 설정했다.

fastapi를 사용해 Backend 구축했기 때문에 8000 주소를 열어줬다.
mysql DB 포트도 설정해 주었다.
https://parksrazor.tistory.com/879
https://parksrazor.tistory.com/880
위 링크를 참조해 Lightsail에서 fastapi 서버를 구축하기 위한 준비를 마쳤다.
$ sudo -i
# passwd ubuntu
# New password:
# Retype new password:
# passwd: password updated successfully
# apt-get update
# apt-get install -y --no-install-recommends tzdata g++ git curl
# apt-get install openjdk-11-jdk
java -version
javac -version
vim ~/.bashrc
i
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME/bin
esc
:wq!
source ~/.bashrc
echo $JAVA_HOME
# apt update
# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
cd /usr/local/bin
# apt-get install -y python3-pip
# ln -s /usr/bin/pip3 pip
# pip3 install --upgrade pip
# apt-get clean
# apt-get install nginx
# systemctl start nginx
# chmod 775 /etc/nginx/sites-available
# cd /etc/nginx/sites-available
# vim api
i
server{
server_name fastcode.com;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
esc enter
:wq!
# ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled/
# nginx -t
# systemctl restart nginx
cd /var/www/
# git clone https://github.com/gangsanlee2/hello_amazon.git
cd hello_amazon
# pip install fastapi uvicorn
nohup python3 -m uvicorn main:app --reload
// type fastcode.com on browser

Lightsail에서 성공적으로 Fastapi서버를 돌릴 수 있었다.
https://parksrazor.tistory.com/881
# apt install apt-transport-https ca-certificates curl software-properties-common
# curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -
# add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> bionic stable"
# apt update
# apt-cache policy docker-ce
# apt install docker-ce
# usermod -aG docker $USER
# newgrp docker
# systemctl status docker
# curl -L "<https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# systemctl status docker
# curl -L "<https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose version


docker를 사용해 Fastapi 실행도 정상적으로 돌아갔다.
[Python] Pycharm에 원격 인터프리터 추가하고 적용하기!
cd /
sudo apt install python3-venv
python3 -m venv base
pwd
[ ... 파일 전체 경로 ]
source /root/base/bin/activate
위의 코드로 Lightsail에 가상환경을 구축할 수 있었다.
파이참과 라이트세일을 연동하기 위한 과정은 다음과 같다.

파이참 interpreter를 SSH로 연동한다.

host → static ip
username → ubuntu

private key에 pem 키 다운로드 한 것을 넣으면 된다.



라이트 세일에서 Docker를 성공적으로 깔았기 때문에 로컬에서 성공했던 전처리들과, Viton 과정은 돌릴 수 있었다. 하지만 Openpose와 Parse 전처리 문제는 해결하지 못했다.
라이트세일은 GPU를 사용하지못해 전처리 과정 및 가상피팅 과정이 너무 오래걸린다는 문제점을 발견했다. nvidia-Dokcer와 AWS의 GPU가 사용 가능한 EC2를 사용해 해결할 수 있다고 생각했지만, 비용적인 문제와 프로젝트 기간이 끝나가는 시점이기 때문에 현재 상황에서 프로젝트를 마무리 하려 한다.
Docker로 Fastapi 컨테이너를 만들어 서버를 구축했다.
현재 HR-VITON 서비스가 AWS통해 배포 가능도록 시도 중이다.
전처리 단계 중 Openpose, Human Parse 과정이 Docker 안에서 돌아가지 않는다.
Openpose 는 윈도우 환경에서 돌아가는 것을 가지고 전처리 했기 때문에 리눅스 환경에서 돌리기 힘들다고 판단하였다.
Human Parse의 경우 현재 설정값이 있는 requirements와 다른 환경에서 전처리 가능한 방법 하나와, GPU를 사용해야만 돌아가는 방법 두가지를 찾아냈다. docker 에서 GPU를 사용하는 Nvidia-docker 방식을 더 찾아볼 예정..
(Docker 공유 메모리 사용량을 늘려 성공했다.)
라이트 세일에서 Test하는 중 Kill이라는 문제 발생
-> 메모리 부족때문이였다.
local에서 Test 할때 Docker에서 메모리 사용량을 확인했다.
docker-compose.yml 메모리를 8GB로 제한 // 메모리 사용량을 확인했다.

최소 5~6 GB는 필요했다.
로컬


docker 공유 메모리를 2GB로 줄이고 Test한 결과 라이트세일에서 발생한 오류와 똑같은 오류가 발생하는 것을 확인했다.
라이트세일 메모리 4GB


Viton 서비스를 Test하는 과정에서는 메모리가 4~5 GB정도 사용한다. 현재는 4G 메모리를 사용중인데 라이트세일 8GB 인스턴스를 사용해 해결했다.
아마존 디자인 패턴
CDP패턴
scale up 패턴
scale down 패턴
과정 : 깡통 서버만들고 s3 ec2 등 하나씩 넣어서 구축
s3 : front end
버켓 → 도커의 컨테이너 개념
도메인 -> 네임서버, DNS
클라우드 프론트 (cf)
ec2 : backend
rds : db
in terminal
AWS Access Key ID [None] : [발급받은 IAM의 Access Key ID]
AWS Secret Access Key [None] : [발급받은 IAM의 Secret Access Key]
Default region name [None] : ap-northeast-2[서울 리전]
Default output format [None] : text / json / table
AWS Reactjs 빌드&배포
aws s3 sync ./build s3:/[그림2.1 적색글씨] --profile=sample-deploy-s3
적색글씨 → 버킷 arn
s3에서 버킷 생성
퍼블릭 버킷 생성하는법
권한 → 버킷정책, CORS
객체 → 업로드 JPG,HTML 업로드
버켓→ 속성 → 정적웹사이트 호스팅→ 정적 웹사이트 호스팅 인덱스 문서

원본 도메인에서 // original access control 설정 해주기 // 제어 생성 누르면





퍼블릭 인증서 만들기
→certificate manager
호스팅 영역 생성

in 가비아

.빼고 ns설정해야함
TLD → 국가 최상위 도메인 그냥 도메인 그 자체 ex) geongi.shop
후이즈도메인 조회 → ip 알수 있음/ aws 연결 되었는지 볼 수 있음
버킷→ 속성에서 맨밑에 정적 웹사이트 호스팅 활성화

권한에서 버킷정책

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::geongi.shop/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": “여기에 cloud front arn 넣어야함"
}
}
}
]
}
수정
{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::geongi.shop/*"
}
]
}
CORS

[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"HEAD",
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]

CNAME
도메인의 소유권을 확인
dns A record보다 cname 추천
cname 도메인 2번 거쳐 연결하는것 보안 좋아짐

레코드 생성 먼저하고 가비아 설정하기

호스트에 aws / 값 위치에 aws certificate의 cname 이름 넣고 승인 기다리기
인스턴스 생성


프리티어 사용 중이므로 t2.micro를 사용했다.

새 키페어 생성하면 putty로
puttygen에서 다운받은 pem파일로 gen으로 ppk 파일생성
Putty 접속법 링크를 보고 EC2에 접속한다.
putty에서 fastapi 서버 실행
sudo apt-get update
sudo apt-get install -y --no-install-recommends tzdata g++ git curl
sudo apt-get update
sudo apt-get install openjdk-11-jdk
java -version
javac -version
vim ~/.bashrc
i
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME/bin
esc
:wq!
source ~/.bashrc
echo $JAVA_HOME
sudo apt update
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
cd /usr/local/bin
sudo apt-get install -y python3-pip
sudo ln -s /usr/bin/pip3 pip
sudo pip3 install --upgrade pip
sudo apt-get clean
sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
sudo chmod 775 /etc/nginx/sites-available
cd /etc/nginx/sites-available
sudo vim api
i
server{
server_name api.tensorlog.com;
location / {
include proxy_params;
proxy_passhttp://127.0.0.1:8000;
}
}
esc enter
:wq!
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
cd /var/www/
sudo git clonehttps://github.com/gangsanlee2/hello_amazon.git
cd hello_amazon
sudo pip install fastapi uvicorn
nohup python3 main.py &
python3 -m uvicorn main:app --reload
api.tensorlog.com
vscode에서 extension -> aws toolkit install

컨트롤 시프트 p(show all command 단축키)
에서 aws → connect to aws 에서 default
s3 들어가서 바꾸고 싶은거 바꾸고
cloud front에서 무효화 에서 무효화 생성 → /index.html (바꾼거 바로 적용 시키고 싶으면)
