Amazon EC2 사용 팁 3종 세트 (간단하게 온오프, 백업, 접속하기)

AUSG·2020년 6월 7일
11
post-thumbnail

이 글에서는

이러한 내용을 다뤄요

AWS EC2를 사용하면서 개인적으로 유용하다고 느낀 사소한 테크닉들을 소개합니다.

  • 터미널에서 EC2 중지 또는 시작

  • EC2 스냅샷(백업) 자동화

  • EC2 간편하게 접속하기

이러한 부분은 주의해주세요

  • 아래와 같은 세팅의 컴퓨터로 테스트했습니다.
                    'c.          roeniss@MacBook-Pro.local 
                 ,xNMM.          ------------------------- 
               .OMMMMo           OS: macOS Catalina 10.15.4 19E287 x86_64 
               OMMM0,            Host: MacBookPro15,2 
     .;loddo:' loolloddol;.      Kernel: 19.4.0 
   cKMMMMMMMMMMNWMMMMMMMMMM0:    Uptime: 2 days, 4 hours, 46 mins 
 .KMMMMMMMMMMMMMMMMMMMMMMMWd.    Packages: 173 (brew) 
 XMMMMMMMMMMMMMMMMMMMMMMMX.      Shell: zsh 5.8 
;MMMMMMMMMMMMMMMMMMMMMMMM:       Resolution: 1680x1050 
:MMMMMMMMMMMMMMMMMMMMMMMM:       DE: Aqua 
.MMMMMMMMMMMMMMMMMMMMMMMMX.      WM: Quartz Compositor 
 kMMMMMMMMMMMMMMMMMMMMMMMMWd.    WM Theme: Pink (Dark) 
 .XMMMMMMMMMMMMMMMMMMMMMMMMMMk   Terminal: Apple_Terminal 
  .XMMMMMMMMMMMMMMMMMMMMMMMMK.   Terminal Font: MesloLGSNer-Regular 
    kMMMMMMMMMMMMMMMMMMMMMMd     CPU: Intel i5-8279U (8) @ 2.40GHz 
     ;KMMMMMMMWXXWMMMMMMMk.      GPU: Intel Iris Plus Graphics 655 
       .cooc,.    .,coo:.        Memory: 5731MiB / 8192MiB 

세 가지 테크닉

1. 터미널에서 EC2 중지 또는 시작

불규칙하게 EC2를 실행해야 하는 경우가 있습니다. 대개는 무의미한 비용을 줄이기 위해서요. 상용 서비스에선 그럴 일이 적겠지만 공부하는 학생 입장에서는 EC2가 idle일 때가 적지 않죠. 매번 콘솔에 접속할 필요 없이 터미널에서 바로 서버를 껐다 켜보세요.

사전 준비

☑️ ec2 인스턴스 생성

☑️ 터미널에서 이용 가능한 IAM 계정 생성

IAM policy는 잘 모르실 경우 제일 만만한(?) AdministratorAccess를 적용하셔도 됩니다만, 다음의 permission JSON을 사용해도 충분합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        }
    ]
}

☑️ AWS 인터페이스 커맨드라인 툴, awscli 설치

설치는 공식 설명서를 참고하세요.

macOS라면 python3로 설치하는 걸 권장드립니다. (pip3 install awscli)

실습

1a. 타겟으로 정한 ec2의 instance ID를 알아야 합니다. 우선 콘솔에서 확인하는 법입니다.

  • https://console.aws.amazon.com/ec2 접속

  • 좌측 네비게이션에서 INSTANCES > Instances 메뉴 클릭 (또는 오른쪽 대시보드 화면에서 Running instances 클릭)

  • 화면 중앙과 아래 Description에서 Instance ID를 확인하실 수 있습니다. 저는 i-03fb88f8979ad70ea네요.

1b. 이번엔 터미널에서 확인하는 방법입니다.

awscli를 처음 사용하는 경우라면 aws configure 커맨드로 IAM 유저 정보를 입력해 주어야 합니다. 이에 대해서는 이 글을 참고하세요.

aws ec2 describe-instances \
--region us-east-1 \
--query 'Reservations[*].Instances[*].{id:InstanceId,tags:Tags}' \
--output table

windows의 경우엔 줄바꿈을 위해 백슬래시( \ ) 대신 캐럿( ^ )을 사용해야 합니다.

위 명령어는 us-east-1 리전에 있는 EC2 인스턴스들을 보여줍니다. 콘솔에서 Instance ID 좌측 칼럼에 Name을 적어줄 수 있는데, 이름을 적어두면 알아보기가 굉장히 쉬워져요.

이렇게 MyEC2라는 Name을 적어두면,

이렇게 나옵니다.

  1. 터미널에서 다음 두 명령어를 이용해 EC2를 start 또는 stop 합니다.

--region 옵션은 aws configure에서 설정한 default region과 일치하다면 생략해도 됩니다.
또한 --output table은 여전히 적용 가능합니다.

aws ec2 start-instances \
--region us-east-1 \
--instance-ids i-03fb88f8979ad70ea 

aws ec2 stop-instances \
--region us-east-1 \
--instance-ids i-03fb88f8979ad70ea \
--output table

아래는 실행 결과 화면입니다.

PreviousState가 기존 상태이고, CurrentState가 이제 적용되는 상태입니다.

2. EC2 스냅샷(백업) 자동화

돌이키기 어려운 실수를 하는 바람에 EC2가 복구 불가능한 상황이 되었다고 생각해보세요. ssh 세팅을 잘못 만져 pem키가 거부된다던가, rm -rf /를 실수로 입력했다거나 하는 경우가 있죠. 상상만 해도 아찔.. 미리 EBS를 백업해둔다면 이러한 문제에 어느 정도 대처할 수 있습니다.

당연히, 이는 최후의 방어책으로 생각하는 편이 좋습니다. 만들어놔도 쓸 일 없는게 제일 좋은 상태입니다. 보안이 다 그렇죠 뭐

여기서는 2019년에 출시된 따끈따끈한 서비스, AWS Backup을 사용하겠습니다.

사전 준비

☑️ AWS Backup 서비스 이해

한마디로 Scheduled backup bot 서비스입니다. 이 포스팅에서는 EC2를 구성하는 'EBS'와 AMI를 백업하지만, RDS나 DDB도 지원합니다.

이 서비스가 출시되기 전에는 CloudWatch Cron을 이용하는 방법이 일반적이었는데요, 이젠 공식적으로 지원해주는 만큼 적극적으로 이용하는 게 better approach가 아닐까 싶습니다. 서울 리전에서도 잘 적용되구요.

  • Backup Valut > Backup Plan > Backup rules 의 구조이고,
  • Backup rules에 의해서 발생하는 각각의 작업들을 Job이라고 부릅니다.
  • 하나의 Backup rules에 여러 리소스를 백업하도록 할당할 수 있어요. (Resource assignments라고 부릅니다)
  • 이렇게 만들어진 각각의 '복구할 때 사용할 수 있는 백업들'을 Recovery point라고 합니다.

한 가지 주의할 점은, Recovery point로 복구하게 되면 기존 EC2를

☑️ AWS Backup 가격 정책 이해

디폴트 세팅이라면, EC2는 (1) Root device type이 EBS, (2) EBS size가 8Gib입니다. 그리고 (3) 하루에 한 번, 최대 7일 유지되도록 정기 백업을 진행하겠습니다. 그리고 (4) 서울 리전을 기준으로 설명하겠습니다. (리전 별 가격 차이 있음)

월 별 백업 스토리지 요금은 8(GB) X 7(백업파일 보존일수) X 0.05(서울리전 GB당 가격) = 2.8 달러(USD) 입니다. 3300원... 비싸군요. 자신의 사용목적에 따라, 보존일수를 1일로 줄여도 좋을 것 같네요.

위 내용은 백업 스토리지 요금이고 복원 요금은 이와 별도인데요, 그나마 다행히도 EBS는 현재 백업을 이용한 복구가 무료인 항목입니다. 그리고 AMI 이미지는 별도 요금이 없습니다.

실습 (백업)

  1. AWS Backup 페이지에서 Create Backup plan 버튼을 클릭합니다.

  1. 다음 순서대로 클릭 & 입력합니다.
  • Build a new plan 클릭

  • Backup plan name 항목에 플랜 이름 입력

  • Rule name 항목에 룰 이름 입력

하나의 큰 플랜 아래 여러 세부 계획들을 둔다고 이해하시면 됩니다.

  • FrequencyDaily 선택

  • Backup windowCustomize backup window 선택

  • Backup window start time12:00:00을 입력

  • Start within1 hour 선택

  • Complete within2 hours 선택

  • 하단 Create Plan 버튼 클릭

주의사항 1 : 입력 시간은 UTC 기준입니다.
따라서 위 예제는 한국 기준 밤 9시에 작업이 시작됩니다.

주의사항 2 : 위 옵션들의 의미는, "(1) 매일 (2) 한국 기준 밤 9시부터 (3) 늦어도 1시간 안에 백업을 시작하고 (4) 2시간 안에 백업을 완료할 것"입니다.

  1. 이제 방금 만든 Backup Rule에 EC2를 붙여주면 됩니다.
  • Backup Plans 탭에서, Resource assignments 섹션의 Assign resources 버튼 클릭 (아래 스크린샷 속 우측 하단)

  • 리소스에 대한 이름을 적당히 지정해주고, 아래 Assign by 항목에서 Resource ID 클릭, 제 리소스를 찾아줍니다. 아래 스크린샷에 나오듯이, Name을 적어두면 알아보기가 매우 쉬워집니다.

  • Assign resources 버튼을 클릭

모든 백업 세팅이 완료되었습니다. 이제는 백업이 되는 걸 기다려봅시다.

...

지정한 시간이 되면 Dashboard에 다음과 같은 안내가 나옵니다.

좀 더 시간이 지나면 이렇게 바뀝니다.

Backup Vaults 탭에서 자신의 Vault(따로 세팅을 바꾸지 않았으면 default)를 클릭하면, 개별 Recovery point들을 확인할 수 있습니다.

EC2 AMI 형태로 백업하기 때문에, EC2 콘솔AMIs 탭과 Snapshots 탭에서도 확인할 수 있습니다.

실습 (복구)

이렇게 만든 Recovery point로 EC2를 복구해봅시다. 크게 두 가지 방법이 있는데요,

  • Snapshot(EBS)를 이용해 새 EC2를 띄우는 방법 : 해당 Recovery point를 선택한 후 Restore를 누르면 같은 EBS를 지닌 새 EC2를 만들어줍니다.

  • Snapshot을 이용해 Volume을 갈아끼우는 방법 : EBS Snapshot으로 직접 새 볼륨을 만들어 (1) 기존 EC2를 종료 후 (2) root device volume을 분리하고, (3) 새로 만든 볼륨을 root device volume으로 넣어주면 됩니다. CD 교체하는 느낌으로 합니다.

볼륨을 detach 하기 전 device name을 잘 확인하셔야 합니다. 아래 사진을 보면 /dev/sdf부터 /dev/sdp까지 사용할 수 있다는데 이 볼륨들은 모두 추가 디바이스에 해당되어서, 부팅할 때 이용할 수 없습니다. default root device name은 /dev/xvda입니다.

3. EC2 간편 접속

매번 ssh -i my_key.pem ec2-user@1.2.3.4를 입력하는 친구를 보고 마음이 너무 아팠습니다. ssh config 파일을 이용하면 ssh myserver 명령어로 서버에 접속할 수 있어요.

사전 준비

☑️ 위와 같은 방법(ssh -i my_key.pem ec2-user@1.2.3.4)으로 접속할 수 있어야 합니다.

실습

# my_key.pem이 있는 디렉토리에서,
MY_KEY_NAME=my_key.pem
mv MY_KEY_NAME ~/.ssh/
echo "host my_server
    host 54.196.200.252
    user ec2-user
    identityfile ~/.ssh/$MY_KEY_NAME" >> ~/.ssh/config
vi ~/.ssh/config # 결과 확인

더욱 자세하고 좋은 세팅 방법은 이 글을 참고해주세요.

본문에 언급되지 않은 참고자료

AWS CLI Command Reference - start-instances : aws ec2 start-instances 커맨드 레퍼런스입니다.
AWS CLI Command Reference - stop-instances : aws ec2 start-instances 커맨드 레퍼런스입니다.
AWS official docs - AWS CLI의 명령 출력 제어 : awscli에서 결과값을 filter & query 하는 법을 설명합니다.
AWS News Blog - AWS Backup: EC2 Instances, EFS Single File Restore, and Cross-Region Backup : "2020년 1월부터 AWS Backup에서 EC2 지원, 금액은 EC2에 포함된 EFS, EBS 갯수만큼만 청구된다"는 내용이 있는 뉴스입니다. (출시된 지 얼마 안된 기능인지, 공식 요금 설명 페이지에 EC2 언급이 없네요) 한글 번역본
AWS News Blog - Introducing AWS Backup, a centralized AWS backup service : "2019년 1월에 AWS Backup이 정식 런칭되었다"는 뉴스입니다.
AWS Backup 요금 : AWS Backup 가격 정책을 설명합니다.


글쓴이 : AWS 3기 오거나이저 문성혁

profile
AWSKRUG University Student Group의 공식 벨로그 계정입니다. 멤버들이 돌아가며 글을 쓰고 있습니다.

1개의 댓글

comment-user-thumbnail
2020년 6월 8일

ㅋㅋㅋㅋ진짜 ssh config 짱 편해요. 꿀팁일듯.

답글 달기