-
Notifications
You must be signed in to change notification settings - Fork 6
AWS
https://bit.ly/_AWS_ 을 브라우저에 입력해서 이곳으로 올 수 있어요.
- aws에 회원가입합니다.
- git을 설치합니다. https://git-scm.com/
- vscode( https://code.visualstudio.com/ )를 설치합니다. portable 버전은 설치하지 마세요.
https://seomal.org 를 통해서 온라인 강의를 찾을 수 있습니다.
https://github.com/egoingsb/offline/tree/master/AWS
index.html
<html>
<body>
<h1><a href="index.html">CLOUD</a></h1>
<ul>
<li><a href="s3.html">S3</a></li>
<li><a href="ec2.html">EC2</a></li>
</ul>
Welcome Cloud
</body>
</html>s3.html
<html>
<body>
<h1><a href="index.html">cloud</a></h1>
<ul>
<li><a href="s3.html">s3</a></li>
<li><a href="ec2.html">ec2</a></li>
</ul>
<h2>S3</h2>
S3 is simple storage service.
</body>
</html>ec2.html
<html>
<body>
<h1><a href="index.html">cloud</a></h1>
<ul>
<li><a href="s3.html">s3</a></li>
<li><a href="ec2.html">ec2</a></li>
</ul>
<h2>EC2</h2>
EC2 is Elastic Compute Cloud.
</body>
</html>- https://4.bp.blogspot.com/-ZhQYKf2ZjRA/WOcKP0GEoAI/AAAAAAAABpI/wfTtsdubGlU-sXvezTAR-Fof0i7wXKI9gCLcB/s1600/20170406CloudModels.png
- https://qph.fs.quoracdn.net/main-qimg-f52c3833504e879de23bc9ebcc7344e5.webp
- PaaS에 대한 이해
- 클라우드의 편의성에 대한 공감
- 버킷을 생성한다.
- 버킷으로 파일을 업로드 한다.
- 파일을 다운로드 한다.
- 파일을 누구나 다운로드 할 수 있도록 한다. => 권한 : 모든 퍼블릭 엑세스 차단 해제 => 퍼블릭으로 지정
- 웹서버로서 s3를 사용한다.
- 요금체계 : https://aws.amazon.com/ko/s3/pricing/
- 클래스별 요금 체계 : https://docs.google.com/spreadsheets/d/114szGETmz8zKz0gPPaHBPmx5n0CO5fMzcNbmO0zOc4k/edit?usp=sharing
- 가용성과 내구성
- S3의 클래스 변경
- IaaS에 대한 이해
- 컴퓨터를 임대하는 개념에 대한 이해
- CLI 학습 - https://opentutorials.org/module/3747
- 인스턴스를 생성한다. (ubuntu 20 이상 버전을 사용해야 EC2 instant connect를 설정없이 사용할 수 있습니다)
- EC2 instance connect로 접속한다.
- sudo apt update; sudo apt install apache2 : Apache2 설치
- cd /var/www/html : 웹페이지가 위치하는 폴더로 이동한다.
- 웹사이트에 접속해본다. => 접속이 안된다.
- Security Group을 설정한다. => http 인바운드를 80번 포트로 변경한다.
- 웹서버에 접속한다. => 접속이 된다.
- sudo rm index.html : 웹페이지를 삭제해본다. => 페이지를 찾을 수 없다고 나온다. 이 파일이 홈페이지임을 확인한다.
- sudo nano index.html : 웹페이지를 만들고 다시 접속해본다.
- EC2의 가격 정책을 확인한다.
https://github.com/egoingsb/offline/blob/master/cloudfront.png?raw=true
- Distribution 생성
- Origin : 도메인 지정
- Cache and origin request settings => Create a new policy => Minimum TTL => 300
- http load test global 과 같은 검색어로 도구를 찾아서 속도 테스트를 한다.
- ex : https://tools.keycdn.com/performance
- 직접 EC2에 접속하는 것과 cloud front를 통해서 접속하는 것 사이의 성능 차이를 확인해본다.
- 가격 정책을 확인한다. (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/images/Charges.png)
- sudo chmod 400 key.pem : 윈도우 외의 경우 key.pem 파일의 권한을 400으로 한다.
- remote development 확장 기능을 설치한다. https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
- 왼쪽 하단의 >< 를 클릭한다.
- Remote-SSH : Connect Current Window to Host... 를 선택한다.
-
- Add New SSH Host ... 를 선택한다.
- /Users/username/.ssh/config 파일을 선택한다.
- ssh -i key.pem ubuntu@ip -A 입력 후 엔터
- /User/username/.ssh/config 파일에 저장
ssh -i key.pem ubuntu@ip
scp -i key.pem * ubuntu@ip
- ESC => 명령어 모드
- x => 한글자 cut
- dd => 한줄 cut
- u => undo
- :w => 저장
- :q => 종료
- :wq => 저장 & 종료
- i : 입력 모드
backend, middle, php, application server의 개념을 이해한다.
- sudo apt update && sudo apt install php
- remote : sudo chmod -R 777 /var/www/html # 실습의 편의를 위해서 보안을 낮은 수준으로 설정했습니다. 현실에서는 이렇게 하면 안됩니다.
- https://github.com/egoingsb/offline/blob/master/AWS/simple.php 를 만든다.
- local : scp -i key.pem * ubuntu@ip:/var/www/html # 로컬의 수정 파일을 원격 저장소로 업로드 한다.
- tail -f /var/www/apache2/error.log : apache, php의 오류를 출력한다.
- RDS 인스턴스 생성
- 제품 : MySQL
- 모드 : 프로덕션
- 마스터 사용자 이름과 마스터 암호 입력 - admin, qwertyuiop 권장 (절대로 실제 서비스에 이런 아이디/비밀번호를 이용하면 안됩니다)
- DB 인스턴스 크기 : 버스터블 클래스 - micro
- 스토리지 : 마그네틱
- 가용성 및 내구성 : 대기 인스턴스를 생성하지 마십시오.
- 접속
- apt install mysql-client : mysql client 설치
- mysql -uadmin -p -hdatabase-1.cdbrt00yi2pa.ap-northeast-2.rds.amazonaws.com => 접속 안됨
- EC2 인스턴스의 보안그룹 이름을 RDS VPC 보안 그룹의 허용 엑세스 포인트로 등록
- 예: MySQL/Aurora, port : 3306, source : sg-051d8bcb0def21458
- mysql -uadmin -p -hdatabase-1.cdbrt00yi2pa.ap-northeast-2.rds.amazonaws.com => 접속 됨
- 데이터베이스 생성
CREATE DATABASE mydb;
- 데이터베이스 선택
use mydb;
- 테이블 생성
CREATE TABLE topic(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, title char(20) NOT NULL, description TINYTEXT);
- 데이터 입력
INSERT INTO topic VALUES(1, 'S3', 'S3 is ..');
INSERT INTO topic VALUES(2, 'EC2', 'EC2 is ..');
INSERT INTO topic VALUES(3, 'CF', 'CF is ..');-
sudo apt install php-mysql : php & mysql 연동
-
sudo service apache2 restart : apache2 재시작
-
index.php https://github.com/egoingsb/offline/blob/master/AWS/database.php
- 더 높은 사양의 인스턴스로 교체한다. 이때 ip 주소가 변경되는 문제는 도메인 주소를 부여하는 것을 통해서 ip 주소의 변동성에 대응 할 수 있다.
- EC2 인스턴스를 이미지로 만든다. # 이미지가 생성될 때 접속이 잠시 끊길 수 있다.
- 보안 그룹이 RDS에 연결될 수 있도록 조치한다. 이전 인스턴스의 보안 그룹을 재사용하는 것이 바람직하다.
- Scale up VS Scale out의 비교
- EC2
- AMI 이미지를 이용해서 인스턴스 두개를 만든다. RDS에 접속이 가능한 보안그룹을 선택하거나 설정한다.
- 웹페이지의 내용을 구분할 수 있도록 각 서버의 ip address 가 출력되도록 한다. 예)
- Target group
- 타겟 그룹은 ELB에 장착될 인스턴스들을 지정한다.
- 타겟그룹을 생성한다.
- 그룹의 이름을 지정한다.
- 인스턴스 2개를 타켓으로 지정한다.
- Elastic Load Balancer
- ELB를 생성한다.
- Application Load Balancer를 선택한다.
- ELB의 이름을 지정한다.
- Listener의 포트를 81로 지정한다. : 80번 포트를 여러 요소에서 쓰고 있으므로 차이를 비교 할 수 있게 일부러 80번 포트를 쓰지 않았다.
- VPC는 기본, 가용 영역은 모든 곳을 지정한다.
- 새로운 보안 그룹을 생성한다. 이떄 81번 포트가 개방되어 있는지 확인한다.
- 라우팅 단계에서 대상 그룹을 기존 대상 그룹으로 지정하고, 이전 단계의 타겟그룹을 선택한다. 이 때 포트가 80인 것에 주목한다. 여기서 80은 origin 쪽의 인바운드 포트의 번호이다.
- ELB가 생성되었는지 상태를 확인한 후에 접속해본다. 이 때 81번 포트로 접속해야 한다. 예: http://hana-elb-578601292.ap-northeast-2.elb.amazonaws.com:81/
- 접속 할 때마다 인스턴스가 변경되는 것을 확인한다.
- 타겟그룹
- 타겟그룹을 두개 만든다. 그룹 이름은 TG1, TG2
- 각 타겟그룹별로 인스턴스를 하나씩 배정한다.
- ELB
- ELB를 생성하거나 재활용한다.
- 리스터에 2개의 타겟 그룹을 붙인다. 리스너의 포트는 ELB의 포트와 동일하게 해야 한다. 이전 예제에서는 81번이다. 타겟그룹들의 가중치를 50%씩 부여한다.
- 가중치를 조절하면서 서비스되는 애플리케이션을 전환한다.
자동으로 인스턴스의 숫자가 변경되도록 하는 기능
CPU 점유율을 기준으로 인스턴스가 조정되도록 설정하기 위해서 아래와 같은 코드를 위치시킨다. https://github.com/egoingsb/offline/blob/master/AWS/loadtest.php
- jMeter 다운로드 후 실행 : https://github.com/egoingsb/offline/blob/master/AWS/jmeter-5.3.zip
- Thread Group > Http Request > Summary Report 추가
- Thread Group : Number of thread 1, Loop Count 100
- Target group 생성 : AutoScaling으로 만들어진 인스턴스가 자동으로 등록된다.
- ELB 생성 후 전단계의 타겟그룹을 리스터로 연결
- Launch Configuration
- 시작구성 생성
- 이름, AMI, 인스턴스유형 지정
- 보안그룹은 생성되는 인스턴스의 인바운드 트래픽을 제어하는 것이기 때문에 80번 포트를 지정한다.
- EC2 AutoScaling
- AutoScaling 생성
- 시작구성으로 전환, 앞에서 생성한 시작구성 지정
- 모든 서브넷 선택
- ELB설정에서 타겟그룹지정
- Configure advanced optionsInfo
- Health check type - ELB도 체크 : EC2는 인스턴스의 건강 상태를 인스턴스 자체적으로 체크하는 것이고, ELB는 ELB에서 request를 해서 정상적으로 리턴하지 않으면 건강하지 않은 것으로 간주하는 설정
- 원하는 용량 1, 최소 용량 1, 최대 용량 2로 지정
- 대상 조정 정책 : 평균 CPU 사용률 30%
- 설정을 완료하면 인스턴스 1개가 자동으로 생성된다. ELB와 상관없이 AutoScaling에 의해서 인스턴스는 만들어진다.
- ELB 에 /loadtest.php로 접속해서 로드 테스트를 진행한다.
웹애플리케이션을 운영하기 위해서 필요한 기능을 종합적으로 제공하는 서비스
-
런타임 : Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker
-
서버 : Apache, Nginx, Passenger, IIS
-
기능 : 용량 프로비저닝, 로드 밸런싱, 오토스케일링, 모니터링, 배포
-
EB 자체는 무료
-
environment는 실제로 서비스되는 웹애플리케이션 하나를 위해서 필요한 EC2 인스턴스, AutoScaling, 각종 환경설정등을 그룹핑한 것
-
Application은 연관된 environment의 그룹
- 애플리케이션을 생성한다.
- 전단계에서 생성한 애플리케이션에 속한 환경을 생성한다.
- 환경티어 : 웹서버 환경
- 플랫폼 : PHP
- 애플리케이션 코드 : 샘플
- 추가옵션구성
- 구성 사전 설정 : 단일 인스턴스(프리티어 사용가능)
- 용량 : 자신에게 필요한 타입 지정
- 환경의 주소로 접속한다.
- 코드를 업로드 한다.
- 환경의 주소로 접속한다. => 업로드된 코드가 반영되었는지 확인한다.
- 코드를 수정해서 다시 업로드 한다.
- 환경의 주소로 접속한다. => 업로드된 코드가 반영되었는지 확인한다.
- 방금 올린 버전을 취소하고 이전 버전으로 롤백을 해본다.
- 구성>소프트웨어>환경 속성의 값을 설정한다.
- DBHOST, DBUSER, DBPASSWORD의 값을 지정한다. 이때 이름으로는 알파벳대문자와 숫자 언더바 기호만 사용할 수 있다. 다른 값을 사용하면 무시된다.
- 설정한 값이 애플리케이션에 반영되었는지 확인한다.
php $conn = mysqli_connect($_SERVER['DBHOST'], $_SERVER['DBUSER'], $_SERVER['DBPASSWORD'], 'mydb');