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
불규칙하게 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
를 알아야 합니다. 우선 콘솔에서 확인하는 법입니다.
좌측 네비게이션에서 INSTANCES > Instances 메뉴 클릭 (또는 오른쪽 대시보드 화면에서 Running instances 클릭)
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을 적어두면,
이렇게 나옵니다.
--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가 이제 적용되는 상태입니다.
돌이키기 어려운 실수를 하는 바람에 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 이미지는 별도 요금이 없습니다.
Build a new plan 클릭
Backup plan name 항목에 플랜 이름 입력
Rule name 항목에 룰 이름 입력
하나의 큰 플랜 아래 여러 세부 계획들을 둔다고 이해하시면 됩니다.
Frequency에 Daily
선택
Backup window에 Customize backup window
선택
Backup window start time에 12:00:00
을 입력
Start within에 1 hour
선택
Complete within에 2 hours
선택
하단 Create Plan 버튼 클릭
주의사항 1 : 입력 시간은 UTC 기준입니다.
따라서 위 예제는 한국 기준 밤 9시에 작업이 시작됩니다.주의사항 2 : 위 옵션들의 의미는, "(1) 매일 (2) 한국 기준 밤 9시부터 (3) 늦어도 1시간 안에 백업을 시작하고 (4) 2시간 안에 백업을 완료할 것"입니다.
Assign resources
버튼 클릭 (아래 스크린샷 속 우측 하단)Resource ID
클릭, 제 리소스를 찾아줍니다. 아래 스크린샷에 나오듯이, Name을 적어두면 알아보기가 매우 쉬워집니다.Assign resources
버튼을 클릭모든 백업 세팅이 완료되었습니다. 이제는 백업이 되는 걸 기다려봅시다.
...
지정한 시간이 되면 Dashboard에 다음과 같은 안내가 나옵니다.
좀 더 시간이 지나면 이렇게 바뀝니다.
Backup Vaults 탭에서 자신의 Vault(따로 세팅을 바꾸지 않았으면 default
)를 클릭하면, 개별 Recovery point들을 확인할 수 있습니다.
EC2 AMI 형태로 백업하기 때문에, EC2 콘솔의 AMIs 탭과 Snapshots 탭에서도 확인할 수 있습니다.
이렇게 만든 Recovery point로 EC2를 복구해봅시다. 크게 두 가지 방법이 있는데요,
Restore
를 누르면 같은 EBS를 지닌 새 EC2를 만들어줍니다.볼륨을 detach 하기 전
device name
을 잘 확인하셔야 합니다. 아래 사진을 보면/dev/sdf
부터/dev/sdp
까지 사용할 수 있다는데 이 볼륨들은 모두 추가 디바이스에 해당되어서, 부팅할 때 이용할 수 없습니다. default root device name은/dev/xvda
입니다.
매번 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기 오거나이저 문성혁
ㅋㅋㅋㅋ진짜 ssh config 짱 편해요. 꿀팁일듯.