sol 개발 블로그 로고
Published on

[ASAC 주간 스터디] AWS EC2 개념과 실습

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

개발자 어소시에이트 시험에 나온 내용

EC2 User Data, Security Group, EC2 타입 (간단하게), IAM Role, 구매 옵션(간단하게)

EC2 개요

EC2(Elastic Compute Cloutd) Infrastructure as a Service 컴퓨팅 기능을 필요에 따라(온디멘드하게) 임대해 사용한다. 웹 서비스 인터페이스를 이용해 운영체제, CPU와 RAM 같은 컴퓨팅 자원, 저장소, 네트워크 보안 설정을 통해 사용자 정의 인스턴스를 생성할 수 있다. AWS EC2 Auto Scaling을 통해 수십 수백개 인스턴스를 동시에 생성 및 관리할 수 있다.

VM, EC2 그리고 Server의 차이?

Virtual Machine(VM) 은 호스트 머신에서 다른 실제 머신을 에뮬레이션하는 소프트웨어이다. Server는 클라이언트 컴퓨터로부터 오는 요청에 응답하는 장치나 프로그램 집합이다. Virtual Server은 한 호스트 머신에서 구동되는 여러 VM이다. 각 VM에는 게스트 OS와 서버 애플리케이션을 둘 수 있다. EC2 인스턴스는 AWS Cloud 컴퓨팅 플랫폼에서 동작하는 VM이다.

EC2가 실질적으로 제공하는 기능 & 사용 사례

EC2가 제공하는 기능

  1. EC2라는 가상 머신
  2. EBS라는 가상 드라이브에 데이터 저장
  3. ELB라는 로드벨런서로 부하 분산
  4. ASG라는 오토 스케일링 기능

EC2 사용 사례

  1. 웹 사이트, 게임 호스팅
  2. 필요량에 따라 스케일 업(아웃),다운(인) 할 수 있는 컴퓨팅 파워
  3. EC2의 빠른 가동 능력을 이용한 재해 복구

EC2의 옵션

EC2는 VM이기 때문에 실제 컴퓨터를 조립할 때처럼 여러가지는 커스텀하게 설정할 수 있다.

  1. 운영체제 : 리눅스, 윈도우, 맥OS
  2. CPU 파워와 코어 수
  3. RAM
  4. 저장소
    • 네트워크에 연결된 저장소 (EBS & EFS)
    • EC2 하드웨어에 붙은 저장소 (EC2 instance Store)
  5. 네트워크 카드 속도, 공용 IP 주소 설정
  6. Security Group이라는 방화벽 설정
  7. EC2 User Data라고 EC2 첫 시작 때 실행시키는 Bootstrap script를 설정
    • update 설치
    • Software 설치
    • 인터넷에서 파일 다운로드 같이 원하는 작업을 설정할 수 있다.
    • EC2 User Data Script는 인스턴스의 root user 권한으로 실행된다. (Sudo 권한)

Bootstrap이란?

머신이 시작할 때 첫번째로 한번 실행하는 명령 스크립트 EC2에서는 EC2 User Data라고 한다. 즉 부팅 작업을 자동화하는 것이다. 어떠한 작업도 괜찮지만, 부트스크립트가 길어지면 부팅 시에 인스턴스가 할 일이 많아지고 부팅 시간이 길어질 수 있다. 또한, EC2 User Data Script는 root 유저로 실행되기 때문에 sudo 권한으로 명령을 실행하게 된다.

  • 업데이트 설치
  • 소프트웨어 설치
  • 인터넷에서 일반 파일 다운로드

EC2 인스턴스 타입

EC2 인스턴스는 쓰임세에 따라 다른 종류를 사용할 수 있다.

  1. 범용 타입 : 컴퓨팅 파워, 메모리 및 네트워킹 리소스가 균형있게 있다. 여러 리소스를 동등하게 사용할 때 적합
  2. 컴퓨팅 최적화 : 고성능 프로세서를 활용하는 컴퓨팅 집약적인 애플리케이션에 적합하다. 배치 처리 워크로드, 미디어 트랜스 코딩, 전용 게임 서버, 기계학습 추론 같은 애플리케이션에 적합
  3. 메모리 최적화 : 메모리에 대규모 데이터셋을 처리하는 유형의 작업에 적합하다. 엘라스틱 캐시라 불리는 분산 웹스케일 캐시 저장소에도 사용된다. 대규모 비정형 데이터를 처리하는 애플리케이션에 적합
  4. 스토리지 최적화 : 로컬 스토리지에서 대규모의 데이터셋에 액세스할 때 적합하다. NoSQL DB, Redis 같은 메모리 데이터베이스나 데이터 웨어하우징 애플리케이션, 분산 파일 시스템에 사용된다.

Security Group(SG) : EC2 인스턴스에 접근하는 IP를 허가하자

Security Group을 통해 인스턴스의 인,아웃바운드 트래픽을 제어한다. SG는 허용 규칙이기 때문에 인,아웃바운드에 허용되는 대상을 지정하면 된다. SG는 특정 IP 주소나 그 범위를 참조하거나 다른 보안 그룹을 참조할 수 있다. 즉 보안 그룹이 서로 참조하는 것도 가능하다. 인바운드 트래픽이 허가되지 않은 IP에서 들어온다면 연결을 거부하면서 타임아웃이 발생한다.

  • SG는 EC2 인스턴스에 대한 방화벽 역할
  • 액세스 포트, IP 범위, 프로토콜 확인

SG는 인스턴스에 종속되지 않아 여러 인스턴스에 적용할 수 있다. 다만, 리전과 VPC에는 종속되어 리전이나 VPC가 다르면 새로운 SG를 만들어야한다. EC2 외부에 있는 방화벽이기 때문에 SG가 막으면 트래픽이 인스턴스에 도달하지 못한다.

보통 인스턴스가 돌아가는데 타임아웃이 발생하며 접속할 수 없다면, SG 이슈이다.

만약 연결 거부 에러가 발생했다면 애플리케이션이 에러를 발생시키거나 실행되지 않는 것이다.

기본적으로 모든 인바운드 트래픽은 거부되고 모든 아웃바운드 트래픽은 허용된다.

SG가 다른 SG를 참조하는 방법

AWS 네트워크 내부 인스턴스들끼리 연결할 때, 동일한 SG를 가진 두 인스턴스는 서로 SG가 연결돼 있기 때문에 IP 주소와 상관 없이 인스턴스와 바로 통신할 수 있다. 보통 로드밸런서와 EC2 인스턴스를 연결할 때 사용한다.

IAM Role : EC2 ... 니가 AWS에서 뭘 할 수 있는데?

AWS 자격 증명이란 AWS 계정 사용자, 모바일 앱 또는 다른 계정이 AWS 리소스(IAM, S3, ...)에 접근할 수 있는 권한이다. 따라서 EC2가 IAM에 유저를 확인하려면 그에 맞는 AWS 자격 증명이 있어야한다. 대표적으로 액세스 키, 시크릿 키 각 인스턴스에 자격 증명을 배포하기란 쉽지 않고, Auto Scaling Group의 인스턴스에 대해서는 특히 어렵다. 심지어 AWS 자격증명을 교체할 때 각 인스턴스의 자격 증명을 업데이트할 수 있어야한다.

AWS 자격 증명을 생성하고 배포하는 대신 다음과 같이 IAM 역할을 사용하여 API 요청 전송 권한을 위임할 수 있다.

  1. IAM 역할 생성.
  2. 역할을 수행할 수 있는 계정 또는 AWS 서비스(EC2)를 정의
  3. 역할을 수행하면서 애플리케이션이 사용할 수 있는 API 작업 및 리소스(iam)를 정의
  4. 인스턴스를 시작할 때 역할을 지정하거나, 기존 인스턴스에 역할을 연결
  5. 애플리케이션에서 임시 자격 증명 세트를 검색하여 사용하도록 함

iam 서비스 써 보자

아마존 리눅스는 AWS 서비스의 API를 호출할 수 있는 aws cli가 기본으로 설치돼있다. 머신이나 일반 리눅스는 따로 설치해야한다. 당연하게 AWS 자격 증명이나 IAM Role은 설정되어 있지 않다.

  1. EC2 인스턴스 커넥트 접속

  2. IAM에게 유저 리스트 요청

    • 자격 증명을 찾을 수 없기에 오류가 발생한다.
    • 만약 aws configure를 통해 액세스 ID, 비밀 액세스 키, 그리고 리전 이름을 설정한다면 보안 상 매우 좋지 않다. 키를 입력한 계정 누구라도 다시 EC2 인스턴스 커넥트를 통해 인스턴스에 입력된 자격 증명 정보를 회수 할 수 있기 때문에 무슨 일이 있더라도 IAM API 키를 입력하면 안된다.

EC2 만들어보기

EC2 인스턴스 생성 설정

  1. AWS 콘솔에서 EC2 검색, 인스턴스 버튼 클릭, 인스턴스 시작 버튼 클릭

  2. 인스턴스 이름, 운영체제 선택

  • 운영체제는 아마존 Linux를 사용하는 것이 편하다. 프리티어에서 사용할 수 있고 AWS CLI가 기본으로 제공되기 때문!!
  1. 인스턴스 타입 선택 : 프리티어 사용을 위해 t2.micro 설정

  2. 키 페어 생성 : 인스턴스에 액세스하기 위해 SSH 유틸리티를 사용하는 경우에 필요하다.

    • Key pair 이름 설정
  3. 네트워크 세팅 : 보안그룹(SG) 설정

    • SG는 인스턴스의 인,아웃 바운드의 트래픽 허용 규칙.
    • EC2에서 웹 서버를 실행하려면 퍼블릭 IP를 가지고 HTTP 트래픽을 허용하도록 설정해야한다.
  4. 저장소 설정

    • 기본으로 주어지는 크기로 충분
    • 고급 설정을 가면 종료 시 삭제 설정이 있는데 이는 EC2가 종료되면 해당 볼륨도 삭제된다는 뜻.
  5. 고급 세부 정보에서 User Data 설정

    • EC2가 처음 시작할 때 명령어 예시로 아래와 같이 작성
    • 인스턴스가 처음 실행될 때 딱 한번 실행되는 명령어
     #!/bin/bash
     # Use this for your user data (script from top to bottom)
    
     # install httpd (Linux 2 version)
    
     yum update -y
     yum install -y httpd
     systemctl start httpd
     systemctl enable httpd
     echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
    

EC2의 인스턴스를 제거하고 싶진 않지만, 요금이 두려울 때는 인스턴스 상태를 중지로 해놓으면 된다. 삭제되지 않지만, 요금은 나오지 않는다. 다만, 인스턴스를 중지했다가 나중에 다시 시작하면, 인스턴스의 공개 IPv4를 바꾸기도 한다. 하지만, 프라이빗 IP는 바뀌지 않는다. t2.micro 같은 경우 한달에 720시간 동안 무료로 사용할 수 있기에 프리티어 기준 한개만 켜놓으면 무료로 사용할 수 있다. 다만, 퍼블릭 IP가 유료로 바뀌었고, 여러 인스턴스를 켜두면 돈이 나간다.

EC2 내용 확인

위에서 프라이빗 IPv4 주소는 AWS 네트워크 내부에서 인스턴스에 액세스하는 데 사용된다.

위 Security Group을 보면 모든 IP 주소에서 80포트와 22포트에 인바운드가 허가되는 것을 확인할 수 있다. 인스턴스에서 트래픽이 나가는 아웃바운드는 전부 허가되는 것을 볼 수 있다.

웹 서버 접속하기

User Data로 생성한 웹 서버에 접속해보자. EC2의 퍼블릭 IP 주소를 검색창에 입력하고 HTTP로 연결하도록 하자. 만약 HTTP로 안하면 접속이 안될 것이다.

인스턴스 중지 or 종료

위처럼 EC2 콘솔에서 인스턴스를 중지하거나 종료할 수 있다. 만약 인스턴스를 중지, 종료하고 다시 실행하면 새로운 퍼블릭 IP를 받기 때문에 유의해야한다. 단, 프라이빗 IP는 바뀌지 않는다.

SG 편집하기

  1. AWS 콘솔에서 EC2 검색, 왼쪽 스크롤 바에서 보안 그룹 클릭 : 방금 EC2 인스턴스를 생성할 때 SG도 함께 생성했기 때문에 방금 만든 것이 있을 것이다.

    • 보안 그룹 하나를 선택하면 인바운드 규칙과 아웃바운드 규칙이 있다.
  2. 인바운드 규칙 편집 버튼 클릭

    • 80 포트를 허가하는 규칙을 삭제하고 웹 사이트에 다시 접속하면 타임 아웃이 발생한다.

머신에서 SSH로 인스턴스에 접속하기

방금 SG에 SSH 프로토콜의 포트인 22포트를 열고 Keypair도 생성했기 때문에 머신에서 인스턴스로 SSH 연결할 수 있다. SSH를 이용하면 터미널에서 원격 컴퓨터를 제어할 수 있고 aws cli를 통해 aws 서비스를 사용할 수 있다.

  1. 다운로드 받은 Keypair를 저장하기 원하는 위치로 옮기고 터미널 열기
  2. 인스턴스의 퍼블릭 IPv4 주소를 복사하기. SG에서 인바운드 규칙에 22포트 허가됐는지 꼭 확인하기!!
// AWS Linux가 기본으로 생성하는 유저가 ec2-user
ssh ec2-user@3.34.140.12
  • 인증 키를 지정하지 않아서 인증 실패가 뜰 것이다.
  1. 키를 지정해서 SSH 연결하기

    // AWS Linux가 기본으로 생성하는 유저가 ec2-user
    ssh -i MyEC2KeyPair.pem ec2-user@3.34.140.12
    
    • 이러면 키 파일에 권한이 없기 때문에 또 다른 에러가 발생한다.
    // AWS Linux가 기본으로 생성하는 유저가 ec2-user
    chmod 0400 MyEC2KeyPair.pem
    
  2. 정상적으로 인스턴스에 연결된 것을 확인

    • 구글에 핑 보내보기. 외부 인터넷과 연결됐는지 확인 용

어? 더 쉬운 SSH 연결 방법이? - EC2 인스턴스 커넥트

  1. AWS 콘솔에서 EC2 검색, 인스턴스 클릭, 페이지 우상단 연결 버튼 클릭

  2. 인스턴스에 연결 페이지에서 우하단에 연결 버튼 클릭

    • 인스턴스에 SG가 SSH 연결을 허가한다면 끝!

IAM Role 생성하기

  1. AWS 콘솔에서 IAM 검색, 좌측 역할 메뉴 클릭, 역할 생성 클릭

    • AWS 서비스, EC2 선택
  2. IAM ReadOnlyAccess 선택

  3. 역할 이름을 작성하고 역할 생성 버튼 클릭

  4. AWS 콘솔에서 EC2 검색, 인스턴스 클릭, 역할을 부여하길 원하는 인스턴스 클릭, 작업 -> 보안-> IAM 역할 수정 클릭

  5. IAM 역할 선택 및 역할 업데이트

  6. EC2 인스턴스 커넥트로 가서 다시 iam-user 리스트 요청

EC2 IAM Role 확인 with 메타 데이터

  1. EC2의 IMDS 설정을 버전 2의 Optional로 수정
  2. EC2에 접근 및 아래 명령어 호출
       curl http://169.254.169.254/latest/meta-data/iam/info
    
    응답
    {
       "Code" : "Success",
       "LastUpdated" : "2024-02-18T14:23:12Z",
       "InstanceProfileArn" : "arn:aws:iam::53256462425:instance-profile/DemoEC2IAMRole",
       "InstanceProfileId" : "BIPAXF3H7K34SHEVZ1"
    }
    

EC2 구매 옵션

  1. On-Demand 인스턴스
    • 단기로 자주, 사용량을 예측할 수 없을 때 사용한다.
    • 가격이 제일 높지만, 장기 계약이 필요 없다.
  2. Reserve 인스턴스
    • 특정 인스턴스 속성(인스턴스 타입, region, OS, ...)을 1~3년 동안 예약한다.
    • Reserve 인스턴스의 스코프는 Resion이나 AZ에 사용량을 할당할 수 있다.
    • 안정적인 사용량이 있는 애플리케이션에 적합
    • 마켓플레이스에서 Reserved 인스턴스를 사고 팔 수 있다.
  3. Convertible Reserved 인스턴스
    • 인스턴스 속성(인스턴스 타입, OS, scope나 tenancy)를 변경할 수 있다.
    • 할인율은 줄어든다.
  4. Saving Plans
    • Reserved 인스턴스와 비슷하게 장기계약에 특화됐다. 특정 사용량을 약정하여 달러로 지불한다.
    • 시간당 고정 가격으로 1~3년 계약한다. 초과하는 사용량은 On-demend 가격으로 청구한다.
    • AWS Region은 변경할 수 없는 대신, 인스턴스 사이즈, OS, tenancy를 변경할 수 있다.
  5. Spot 인스턴스
    • 가장 높은 할인율을 가지고 있다. 대신 인스턴스가 Spot 인스턴스에 지불하고자 하는 가격보다 많이 사용되면 인스턴스가 중단된다.
    • 가장 가격 효율적인 인스턴스이고, 서비스가 중단되어도 복구하기 쉬운 작업에 적합
    • Batch Jobs, Data 분석, 이미지 처리, 분산 처리 작업, 그리고 시작과 끝 시간이 유현한 작업에 적합하다.
    • 다만, 언제든지 인스턴스가 종료될 수 있으므로, 중요한 작업은 사용하면 안된다.
  6. Dedicated Hosts
    • EC2 인스턴스 크기의 물리 서버를 온전히 사용할 수 있다.
    • 강력한 규제나 규정 준수 요구 사항이 있거나 기존의 서버 결합 소프트웨어 라이선스(BYOL - Bring Your Own License)를 사용해야하는 경우에 적합
    • 가격은 소켓 당, core 당, VM Software license 당 청구된다.
    • 걔약은 On-demend처럼 초당 예약이나 Reserved 인스턴스처럼 1~3년 계약을 할 수 있다.
    • 실제 물리서버를 예약하기 때문에 가장 비싸다
  7. Dedicated Instances
    • 전용 하드웨어에서 실행되는 인스턴스, 물리서버와는 다르다.
    • 같은 계정의 다른 인스턴스와 하드웨어를 공유할 수 있다. 비어있는 서버를 예약하고 그 서버는 계정만 사용가능하다!
  8. Capacity Reservations
    • 특정한 AZ에 인스턴스를 예약할 수 있고, 필요할 때마다 EC2 Capacity에 접속할 수 있다.
    • 시간 약정이 없기 때문에 생성과 삭제가 자유롭다. 인스턴스의 용량을 예약하는 것이기 때문에 할인률은 없고 용량에 따른 비용을 지불한다.
    • 요금 할인 받으려면 Reserved 인스턴스나 Saving Plans와 결합해야한다. 인스턴스가 실행하든 정지돼있든 On-Demand로 계속 청구된다.
    • 특정한 AZ에 위치하는 단기의 연속적인 워크로드에 적합하다.

전용 인스턴스와 전용 호스트 모두 고객 전용의 물리적 서버에서 EC2를 시작할 수 있다. 다만, 전용 호스트는 인스턴스가 물리적 서버에 배치되는 방법에 대한 추가적인 제어와 기존 서버 한정 소프트웨어 라이선스를 사용하고 기업 규정 준수 및 규제 요구 사항을 해결할 수 있다. 공식 차이점

리조트로 비유해서 정리하자면,

  • On demand : 리조트에 언제든지 나가고 들어올 수 있다.
  • Reserved : 장기계약 1~3년
  • Saving Plans : 특정 기간 동안 시간당 비용지불하고 장기계약, 따라서 시간에 따라 방을 바꿀 수 있다.
  • Spot instances : 예약 마감 할인. 그러나 누군가 내가 낸 돈 보다 더 많은 비용을 지불한다고 하면 강제로 나가야함
  • Dedicated Hosts : 리조트 전체를 빌려서 나만의 하드웨어를 가지게된다.
  • Capacity Reservations : 예약할건데 숙박할진 확실하지 않음. 그래서 원할 때만 숙박할 수 있다.

정리

  1. EC2는 VM이므로, 사용자 맞춤 설정 가능
  2. User Data로 인스턴스 부팅 시 실행하기 원하는 스크립트를 설정
  3. 퍼블릭 IPv4 주소는 인스턴스가 중지 및 실행할 때마다 바뀜
  4. SG로 인스턴스 네트워크 보안 설정
  5. IAM Role로 EC2의 AWS 자격증명 설정