스프린트4 AWS
✅AWS
- Amazon Web Services의 약자
- 다양한 IT 인프라와 관련 서비스를 제공하여 개발자와 기업이 자신의 응용 프로그램을 구축하고 실행할 수 있는 플랫폼을 제공 (웹/모바일, 빅데이터/인공지능 등)
- 클라우드 컴퓨팅 서비스 모델 IaaS, PaaS, SaaS 중 IaaS에 가까운 모델임
IaaS (Infrastructure as a Service)
- 인프라를 가상화하여 필요에 따라 서버, 스토리지, 네트워크 및 기타 컴퓨팅 리소스를 온디맨드로 제공하는 서비스 모델
- 사용자는 가상 서버, 스토리지 등과 같은 IT 인프라를 구매하고 관리
- Amazon EC2 (Elastic Compute Cloud), Amazon S3 (Simple Storage Service) 등
- 응용 프로그램을 개발, 실행 및 관리하기 위한 플랫폼을 제공하는 서비스 모델
- 개발자는 응용 프로그램의 코드를 작성하고 배포하는 데 집중, 인프라 관리는 PaaS 공급자가 처리
- AWS Elastic Beanstalk, AWS Lambda
SaaS (Software as a Service)
- 사용자에게 소프트웨어 애플리케이션을 인터넷을 통해 제공하는 서비스 모델
- 사용자는 애플리케이션에 대한 액세스만 제공받음, 플랫폼에 대한 관리는 서비스 제공자가 처리
- AWS Marketplace
✅클라우드 인프라 장/단점
클라우드 인프라 장점
- 유연한 이용, 안정적 서비스, 다중화와 스케일링
- pay-as-you-go(사용한만큼만 비용을 지불) → TCO (total cost of ownership) 절감
- 다양한 도구 제공
- 풍부한 문서 및 참고자료
클라우드 인프라 단점
- 생각보다 비용이 비쌈 (제대로 사용하지 못해도 리소스가 이용되고 있으면 과금됨)
- 활용법을 익혀야 함 (익숙해지지 않으면 다소 복잡하고 생소하게 느껴질 수 있음)
✅ EC2 (Elastic Compute Cloud)
AWS에 의하여 운용되고 있는 네트워크 상에 존재하는 가상의 서버
✅ AMI (Amazone Machine Images)
EC2에서 활용하는 컴퓨터(파일시스템) 이미지
✅ ECR (Elastice Container Registry)
어디서나 컨테이너 소프트웨어를 쉽게 저장, 공유 및 배포
✅ S3 (Simple Storage Service)
Bucket 단위로 운영되는 객체 저장 서비스
✅스프린트4에서의 AWS 활용
- 배포 환경을 AWS 위에 구축 (EC2)
- minikube 이용한 작은 single-node cluster
- 데이터베이스(mariaDB) 설치하고 운용
- 웹 서버 (Nginix reverse proxy) 설치하고 운용
- 이미 소프트웨어 설치 및 설정이 이루어진 상태의 AMI를 자료로 받아서 사용 (데이터베이스 스키마, 웹서버 설정, minikube의 기본 설정 등이 적용되어 있음)
- 이미지 레지스트리 (ECR)
- FE, BE 각각을 컨테이너로 빌드하여 ECR에 등록
- 프로덕션 및 스테이징 배포를 위하여 이미지 인출
- 테라폼(Terraform) 상태 데이터 저장 (S3)
- 프로덕션 및 스테이징 배포에 있어 terraform state 저장에 이용
AWS 실습
1. “Web fullcycle (180993267331) 실습 세팅” 노션페이지를 참고하여 다음 작업을 수행
- ECR 레포지토리 만들기
- S3 만들기
- EC2 만들기
- EC2에 공인 IP 할당하기 (Elastic IP)
- 공인 IP에 도메인 연결하기
- 레코드가 정상적으로 등록되었는지 확인
2. 레코드가 정상적으로 등록되었는지 확인 단계
1
2
3
4
5
6
7
8
| nslookup 아이디.prgms-fullcycle.com
서버: kns.kornet.net
Address: 168.###.###.#
권한 없는 응답:
이름: 아이디.prgms-fullcycle.com
Address: 3.##.171.##
|
3. 발급받은 키로 로그인하기
1
2
3
4
5
6
7
8
9
10
11
| ssh -i ./비밀번호파일명.pem ubuntu@아이디.prgms-fullcycle.com
(...)
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Last login: Fri Jan 19 19:24:27 2024 from 61.74.101.15
|
리눅스환경에서 거부가 된다면 다음 명령어를 사용해서 권한을 확인하고, 그룹과 다른 사람들에게도 읽기 권한이 주어져있으면 삭제해야한다.
윈도우에서는 권한 설정 없이 잘 실행되었다.
4. 미니큐브 활성화
윈도우 환경여도, 로그인을 하면 터미널이 ssh
로 변경되기 때문에 다음 명령어를 그대로 입력해도 명령어 실행이 됨
1
| sudo systemctl enable minikube
|
1
2
3
4
| sudo reboot
Connection to 아이디.prgms-fullcycle.com closed by remote host.
Connection to 아이디.prgms-fullcycle.com closed.
|
1
| ssh -i ./비밀번호파일명.pem ubuntu@아이디.prgms-fullcycle.com
|
sudo reboot
명령어를 사용해 연결이 끊어졌다면 다시 로그인하면 된다.
만약 다시 로그인해도 안된다면 아직 minikube 설정이 완료되지 않았을 수도 있다. 시간이 지나고 다시 로그인하면 된다.
1
2
3
4
5
6
| systemctl status minikube
(...)
Loaded: loaded (/etc/systemd/system/minikube.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2024-04-02 16:55:29 KST; 4min 42s ago
(...)
|
명령어를 사용해서 상태가 Active: active(exited)
될 때까지 기다려야한다.
5. 클러스터 상태확인
상태가 active(exited)
되었다면 다음 명령어로 클러스터 상태를 확인
1
2
3
4
5
6
7
8
9
| kubectl get all -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-5dd5756b68-ftz7r 1/1 Running 1 (7m27s ago) 3h53m
kube-system pod/etcd-minikube 1/1 Running 1 (7m31s ago) 3h54m
kube-system pod/kube-apiserver-minikube 1/1 Running 1 (7m31s ago) 3h54m
kube-system pod/kube-controller-manager-minikube 1/1 Running 1 (7m32s ago) 3h54m
kube-system pod/kube-proxy-9pxz7 1/1 Running 1 (7m32s ago) 3h53m
kube-system pod/kube-scheduler-minikube 1/1 Running 1 (7m31s ago) 3h54m
kube-system pod/storage-provisioner 1/1 Running 2 (6m2s ago) 3h54m
|
6. 로컬 컴퓨터에서 인스턴스의 클러스트를 제어할 수 있도록 해야함
이 설정을 할 파일들을 얻어내기
- ~/.minikube/ca.crt
- ~/.minikube/profiles/minikube/client.crt
- ~/.minikube/profiles/minikube/client.key
1
2
3
4
| ls -l
13:07 ca.crt
13:07 ca.key
|
cat
명령어를 사용해서 파일 내용을 확인하고, 내 컴퓨터에 새로운 파일을 만들고 복사 붙여넣기하기
7. 로컬 컴퓨터의 kubeconfig
설정
✅ 클러스터 추가
- certificate-authority
- server
- name
1
2
3
4
| - cluster:
certificate-authority: "ca.crt 파일경로"
server: "EC2 퍼블릭 IPv4 DNS":8443
name: hyemin
|
✅ Context 추가
1
2
3
4
| - context:
cluster: hyemin
user: hyemin
name: hyemin
|
✅ User 추가
- client-certificate
- client-key
1
2
3
4
| - name: hyemin
user:
client-certificate: "client.crt 파일 경로"
client-key: "client.key 파일 경로"
|
8. docker desktop이 참조하고 있는 kube config 파일 수정하기
윈도우 환경에서는 대부분 C:Users/사용자이름/.kube/config
경로로 확인할 수 있음
9. 원격 저장소에 접근가능한지 확인하기
명령어를 입력하기 전에 docker와 쿠버네티스가 실행 중인지 확인할 것
명령어를 입력했을 때 현재 내 컴퓨터에서 실행되는 kubectl들이 나온다면,
1
| kubectl config current-context
|
를 사용하여 어떤 context가 실행되는지 확인할 것
docker-desktop
으로 표시되면 다음 명령어를 사용하여 context 변경
1
2
3
| kubectl config use-context "context 이름"
Switched to context
|
모든게 정상적으로 변경되었다면 다음 명령어로 다시 kubectl 확인해보기
1
2
3
4
5
6
7
8
| NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-5dd5756b68-ftz7r 1/1 Running 1 (52m ago) 4h39m
kube-system pod/etcd-minikube 1/1 Running 1 (52m ago) 4h39m
kube-system pod/kube-apiserver-minikube 1/1 Running 1 (52m ago) 4h39m
kube-system pod/kube-controller-manager-minikube 1/1 Running 1 (52m ago) 4h39m
kube-system pod/kube-proxy-9pxz7 1/1 Running 1 (52m ago) 4h39m
kube-system pod/kube-scheduler-minikube 1/1 Running 1 (52m ago) 4h39m
kube-system pod/storage-provisioner 1/1 Running 2 (51m ago) 4h39m
|
목록이 잘 출력된다면 배포 환경의 클러스터
까지 제대로 설정된 것임
10. 웹 서버 접속 확인
http
로 접근하면 다음과 같은 화면 렌더
https
로 접근하면 다음과 같은 화면 렌더
11. 제대로 동작하는지 확인하기
1
| ssh -i ./비밀번호파일.pem ubuntu@아이디.prgms-fullcycle.com
|
명령어를 통해서 다시 로그인한 다음에, service nginx status
명령어 입력해서 잘 동작하고 있는지 확인하기
1
2
3
4
5
| service nginx status
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running)
|
오류…
해당 폴더가 존재하지 않음…
12. 데이터베이스 잘 연결되었는지 확인
1
| mysql -h 도메인 -u prgms -p
|
1
2
3
4
5
| mysql -h hyemin.prgms-fullcycle.com -u prgms -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.5.5-10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
|
✅데이터베이스 확인
1
2
3
4
5
6
7
8
| mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| prgms_notes |
+--------------------+
2 rows in set (0.09 sec)
|
✅데이터베이스 선택 후 테이블 목록 확인
1
2
| mysql> use prgms_notes;
Database changed
|
1
2
3
4
5
6
7
8
| mysql> show tables;
+-----------------------+
| Tables_in_prgms_notes |
+-----------------------+
| notes |
| users |
+-----------------------+
2 rows in set (0.01 sec)
|
✅노트 테이블 확인
✅유저 테이블 확인
✅유저/노트 테이블 내용 확인
1
2
| mysql> select * from notes;
Empty set (0.01 sec)
|
1
2
| mysql> select * from users;
Empty set (0.01 sec)
|
13. AWS CLI 설치하고 로그인하기
https://aws.amazon.com/ko/cli/에서 운영체제에 맞는 방법으로 AWS CLI를 설치
window 환경에서는 다음 명령어로 설치여부 확인
1
2
3
| aws --version
aws-cli/2.15.34 Python/3.11.8 Windows/10 exe/AMD64 prompt/off
|
1
2
3
4
5
6
| aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]: json
|
awd configure
명령어를 입력하고 발급받은 access key로 로그인을 하면, 크리덴셜 파일이 어딘가에 저장됨
14. 접근이 잘 되는지 확인하기
1
2
3
4
5
6
7
8
| aws ecr describe-registry
{
"registryId": "숨김",
"replicationConfiguration": {
"rules": []
}
}
|
15. 이미지 태그 붙이고 푸시하기
로그인
1
2
| aws ecr get-login-password --region [지역] | docker login --userna
me [유저아이디] --password-stdin [비밀번호]
|
1
| docker tag hello-world:latest 아이디/hyemin:latest
|
만약 !$
명령어가 작동되지 않으면 다음 명령어 실행해서 푸시
1
| docker push 아이디/hyemin:latest
|
16. 이미지 가져오기 위해 로컬에 있는 이미지 삭제
1
2
| docker rmi hello-world:latest
docker rmi 아이디/hyemin:latest
|
17. 이미지 가져오기
1
2
3
4
| docker run 아이디/hyemin:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
|
18. bucket에 이미지 업로드하고, 다운받기
aws s3
홈페이지에서 bucket
에 이미지를 업로드하기
1
2
3
4
| aws s3 ls
(...)
2024-04-02 13:00:40 hyemin-bucket
|
다음 명령어를 입력하면 내 bucket에 업로드해둔 망곰이 배경화면 이미지가 표시됨
1
2
3
| aws s3 ls hyemin-bucket
2024-04-02 21:31:29 813211 manggom.png
|
다음 명령어를 입력하면 내 bucket에 업로드해 놓은 망곰이 배경화면을 다운받을 수 있음
1
| aws s3 cp s3://[bucket 이름]/[파일 이름.확장자] [저장할 위치]
|
1
2
3
| aws s3 cp s3://hyemin-bucket/manggom.png .
download: s3://hyemin-bucket/manggom.png to .\manggom.png
|
내 프로젝트 root 경로에 잘 저장됨