0부터 시작하는 가상머신과 네트워크 공부 - AWS 서버를 만들어보자

1. VPC 살펴보기

- root는 super user이다. 모든 작업에 대한 권한을 가진다
- IAM은 개발자, 엔지니어와 같은 일반 user이다
- root user로 로그인하자

- 로그인하면 Region을 확인한다

- vpc로 들어간다

- vpc를 하나 클릭하자

- Ip는 사설 Ip로 172.31.0.0 ~ 171.31.255.255까지 허용된다. 라우팅 테이블을 클릭하자

- 위와 같이 172.31.x.x에 대한 요청은 local로 보내고, 0.0.0.0에 대한 요청은 IGW로 보낸다고 라우팅 경로가 지정되있다

- 서브넷을 확인하면 다음과 같이 172.31 대역에 4가지 서브넷이 존재하는 것을 확인할 수 있다. 하나의 VPC를 4가지 서브넷으로 나누는 이유는,
- 먼저, 보안이다. 이 서브넷 사이에는 ACL이 있는데, 각 서브넷에서 방화벽 설정을 하여 보안을 높일 수 있다
- 둘째, 유지보수도 편하다
- 셋째, 불필요한 트래픽을 줄일 수 있다. 만약 WEB, WAS, DB가 한 곳에 있다면, 한 가지에 대한 일을 할 때 3가지가 한 곳에 있으므로 불필요한 트래픽이 생긴다. 이를 각 기능별 공간을 나누어 불필요한 트래픽을 줄여줄 수 있다
2. EC2 생성
- 일반 VM : ISO와 같은 설치 파일을 이용하여 OS 설치 작업을 수동으로 일일이 진행해야 한다. 상세한 설정이 가능하다는 점에서는 유용하나, 클라우드 환경에서는 적절하지 않다
- 인스턴스 VM : 클라우드용 이미지 ( OS가 설치된 환경을 이미지화 한 것 = 템플릿, CLASS와 개념 유사 )를 이용하여 배포. 단, 동일한 이미지를 사용하므로 만약 root에 대한 패스워드를 설정한 상태에서 이미지화를 했다면 모든 인스턴스는 동일한 password를 사용해야하는 보안상 결함이 발생한다. 이를 해결하기 위해 key-pair를 이용한다


- 인스턴스 시작 클릭

- 이미지 선택. 이 이미지들은 AMI ( AMAZON MACHINE IMAGE )에 들어있다

- linux 프리티어를 선택한다

- 인스턴스 유형은 flavor라고 부른다. 이 flavor는 설치를 위한 일종의 기본 Resource set이라고 할 수 있다

- 키 페어를 생성하자. 저장된 key-pair 파일은 잃어버리면 안된다

- 동적 NAT를 확인 가능하다

- 보안 그룹은 인스턴스에 대한 방화벽이다

- 모든 사용자에 대해서 22 port ( ssh )를 열어준다고 Default로 설정되있다

- 이렇게 현재 공유기 네트워크 대역에서만 접근가능하게 하고, HTTP 트래픽을 허용하여 인터넷 접속이 가능하게 한다. 1.11.90.40은 현재 공유기의 Public Ip이다. 따라서, 해당 Ip로만 접근해야하므로, 공유기의 네트워크 대역에서만 접속 가능하다

- volumn을 mount 해주는 것이다. 여기서 마그네틱은 테이프를 말한다

- 만들 인스턴스 갯수를 지정한다

- 인스턴스를 만들면 해당 네트워크에 해당하는 인스턴스가 생길 것이다. 이 인스턴스는 AWS의 동적 NAT를 통해 외부와 통신한다

- 현재 EIP가 비어있다
3. Elastic IP

- EIP를 하나 할당받아온다

- 할당받은 EIP를 인스턴스와 연결시켜준다

- 허나, 아직 통신이 안된다. 이는 보안때문이다
- 바깥에서 들어오는 INBOUND를 설정해주자

- 현재 허용된 Ip들을 확인 가능하다

- icmp가 가능하게 Ip를 설정해서 추가해준다

- icmp가 잘 작동한다
4. Puttygen

- 다운 받자

- putty도 다운 받자
- comversions/import하여 key 파일 ( .pem )을 가져온다

- private key를 저장하자

- ppk 파일이 생겼다
5. Putty

- kex에서 두 가지를 위로 올려준다. 순서를 지키자

- auth에 아까 저장한 ppk 파일을 넣어준다

- 이제 EIP로 접속하자

- login은 ec2-user로 로그인한다. 입력하면 KEY-PAIR를 비교하여 접속이 된다. 인스턴스의 Public key와 사용자의 Private key를 비교한다
6. Docker로 nginx 웹 서버 컨테이너 만들기

- 도커를 설치하자

- 도커를 실행하자

- 현재, AWS linux 위에 centos를 올렸다

- 이 centos는 kernel이 없으므로 명령어가 실행이 안된다

- nginx로 웹서버를 올린다

- 잘 접속된다

- 두 번째 nginx 웹 서버를 만든다. -p는 port로 8001 port로 접속하면 80 port로 연결시켜준다는 의미다

- 보안그룹을 편집해서 Port를 열어주자

- 두번째 nginx에 잘 접속된다
7. Docker로 Apache 컨테이너 생성

- nginx3를 삭제해서 8002 port를 비운다

- 8002 port에 Dorker Apache 컨테이너를 생성한다

- 잘 접속된다