게임업계 it 관리자를 위한 7가지 유용한 팁 - 박선용 솔루션즈 아키텍트::...
TRANSCRIPT
게임업계 IT 관리자를 위한 7가지 유용한 팁 Seon Yong Park. Solutions Architect
7가지 Tips
1. AWS CLI 2. EBS GP2 vs PIOPS 3. VPC flowlogs 4. Run 커맨드 5. IAM cross account access 6. Latency Measurement Health Checks 7. DetecLng changes
Tip 1 – AWS CLI
AWS Command Line Interface
AWS 서비스를 관리하기 위한 통합 툴
MSI (Windows)
Bundled (cross plaRorm)
pip (cross plaRorm)
$ aws ec2 describe-‐instances
Service (command) Opera1on (subcommand)
$ aws iam list-‐access-‐keys
Service (command) Opera1on (subcommand)
json text
PLACES Seattle WA PLACES Las Vegas NV
table
-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐ | SomeOperationName | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ || Places || |+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐+| || City | State || |+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐+| || Seattle | WA || || Las Vegas | NV || |+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐+|
{ "Places": [ { "City": "Seattle",
"State": "WA" }, {
"City": "Las Vegas", "State": "NV"
} ] }
aws configure
aws configure
AWS access key ID [**ABCD]: AWS secret access key [****************EFGH]: Default region name [us-‐west-‐2]: Default output format [json]:
aws configure <subcommand>
aws configure <subcommand>
list -‐ list common configuration sources get -‐ get the value of a single config var set -‐ set the value of a single config var
aws configure get region
aws configure set profile.prod.region us-‐west-‐2
profile 은 설정 값 들의 그룹이다
aws configure -‐-‐profile prod
CLI 설정 파일들
~/.aws/credentials ~/.aws/config
• 모든 AWS SDKs 가 지원함 • 인증에 대한 정보만 담고 있음
• 오직 CLI에서만 사용됨 • 인증 정보를 담을 수도 있음
~/.aws/credentials ~/.aws/config
aws configure set profile.prod.aws_access_key_id foo
~/.aws/credentials ~/.aws/config
aws configure set profile.prod.aws_access_key_id foo
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo
aws configure set profile.prod.aws_secret_access_key bar
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo
aws configure set profile.prod.aws_secret_access_key bar
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo aws_secret_access_key = bar
aws configure set profile.prod.region us-‐west-‐2
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo aws_secret_access_key = bar
aws configure set profile.prod.region us-‐west-‐2
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo aws_secret_access_key = bar
[profile prod] region = us-‐west-‐2
aws configure set profile.prod.output text
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo aws_secret_access_key = bar
[profile prod] region = us-‐west-‐2
aws configure set profile.prod.output text
~/.aws/credentials ~/.aws/config [prod] aws_access_key_id = foo aws_secret_access_key = bar
[profile prod] region = us-‐west-‐2 output = text
waiters
ec2-instance-running.sh
#!/bin/bash instance_id=$(aws ec2 run-‐instances -‐-‐image-‐id ami-‐12345 \ -‐-‐query Instances[].InstanceId \ -‐-‐output text) instance_state=$(aws ec2 describe-‐instances -‐-‐instance-‐ids $instance_id \ -‐-‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep 1 instance_state=$(aws ec2 describe-‐instances -‐-‐instance-‐ids $instance_id \ -‐-‐query 'Reservations[].Instances[].State.Name') done
ec2-instance-running.sh
#!/bin/bash instance_id=$(aws ec2 run-‐instances -‐-‐image-‐id ami-‐12345 \ -‐-‐query Instances[].InstanceId \ -‐-‐output text) instance_state=$(aws ec2 describe-‐instances -‐-‐instance-‐ids $instance_id \ -‐-‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep 1 instance_state=$(aws ec2 describe-‐instances -‐-‐instance-‐ids $instance_id \ -‐-‐query 'Reservations[].Instances[].State.Name') done
No Timeouts
Failure States
Hand-Written Code
ec2-instance-running.sh
instance_id=$(aws ec2 run-‐instances -‐-‐image-‐id ami-‐12345 \ -‐-‐query Instances[].InstanceId \ -‐-‐output text) aws ec2 wait instance-‐running -‐-‐instance-‐ids $instance_id
ec2-instance-running.sh
instance_id=$(aws ec2 run-‐instances -‐-‐image-‐id ami-‐12345 \ -‐-‐query Instances[].InstanceId \ -‐-‐output text) aws ec2 wait instance-‐running -‐-‐instance-‐ids $instance_id
subcommand
describe-‐instances op1ons
waiter name
$ aws ec2 wait help $ aws rds wait help $ aws dynamodb wait help $ aws redshift wait help
Tip 2 – EBS GP2 vs PIOPS
EBS GP2 vs PIOPS
GP2 PIOPS 16GB ~ 1TB
160 MB/s
1000GB 이하의 볼륨에 대해 3000 IOPS까지 버스트 가능한 3IOPS/GB 의 기준 성능. 최대 10000 IOPS
볼륨크기
최대처리량
IOPS성능
4GB ~ 16TB
320 MB/s
최대 20000 IOPS까지 지속적인 성능 발휘
GP2 버스팅 기능 존재 – 기준 성능과 버스팅 성능. 데이터 베이스 같은 경우 일정한 IOPS가 필요. 따라서 원하는 일정한 IOPS를 얻기 위해서는 PIOPS를 사용하시길….
Really?
PIOPS는 성능이 보장된다. 최대 20000 PIOPS까지, 단 더 비싸다.
GP2 vs PIOPS
GP2 버스트 기능의 이해 § GP2는 기준 성능과 버스팅 성능 존재 § 볼륨이 커질 수록 기준 성능 상승 § 기준 성능은 최대 10000 IOPS § 1000 GB이상에서는 버스트 기능 없음 § 3334 GB에서는 10000 IOPS도달. § 단 RDS의 경우는 3000 IOPS 가 최대
QuesLon : EC2에서 8000 IOPS로 2T 디스크 운용을 하기 위해서는? GP2와 PIOPS 중 어떤 것을?
Monthly Calculator
GP2 : 2667 GB, 8000 IOPS $1286 / month
PIOPS : 267GB, 8000 PIOPS $1631 / month
PIOPS : 2667GB, 8000 PIOPS $2006 / month
도쿄 리전 기준
Tip 3 – VPC flowlogs
CloudWatch Logs + ElasLcsearch + Kibana Dashboards CloudWatch Logs SubscripLon Consumer
CloudWatch Logs + ElasLcsearch + Kibana Dashboards CloudWatch Logs SubscripLon Consumer
CloudWatch Logs + ElasLcsearch + Kibana Dashboards Kibana 3 for VPC Flowlogs
CloudWatch Logs + ElasLcsearch + Kibana Dashboards Kibana 3 for VPC Flowlogs Kibana 3 for Lambda
CloudWatch Logs + ElasLcsearch + Kibana Dashboards Kibana 3 for CloudTrail
Tip 4 – Run command
QuesLon : 동일 Windows/Linux EC2 인스턴스에 대해 일괄적으로 원격 명령을 수행하려면?
Run Command in EC2
Run Commands
• 그룹화 된 인스턴스 전체에 대해 설정 변경이 필요한 경우
• 많은 인스턴스에 대해 안전하고 일관된 작업이 필요한 경우
• 어떤 일이 수행되었는지와 누가 수행했는지에 대한 관리
• 명확한 audit 관리
• RDP 억세스를 이용하지 않고 손쉽게 처리 (윈도우)
커맨드
커맨드 – 메인 화면
커맨드 실행 – 커맨드 문서 선택
커맨드 실행 – 대상 인스턴스의 선택
커맨드 실행 – 실행결과의 확인
커맨드 실행 – 실행결과의 확인
Tip 5 – IAM cross account access
QuesLon : 여러개의 AWS account 들 간에 로그인 없이 자유롭게 스위칭하면서 사용하려면?
Cross Account Access
A 계정에서 B계정이 접근할 수 있는 역할 생성
A 계정
B 계정
역할에 정책을 할당
정책 수정
계정 B IAM 유저로 로그인 변경된 역할로 A계정 사용 역할 변경
Tip 6 – Latency Measurement Health Checks
QuesLon : 특정 리전 사이에서 서버의 latency를 주기적으로 측정하려면?
T2.nano 인스턴스로 상호 ping 체크?
Heath Checker
AWS Heath checker
• 모든 Region IDC 에 Health Check 수행 ApplicaLon 존재
• Route 53 health Check 활성화하면 모니터링하려는 서버에 대한 체크 (HTTP Request, TCP ConnecLon, Ping …)
• 사용가능한 Health Checker 의 18%이상이 엔드포인트가 정상이라고 하면, Route 53 DNS에 Healthy로 등록
Latency Measurement Health Checks
• Heath Checker가 수행하면서 받았던 결과 값들을 고객이 직접 확인할 수 있도록 제공
• 네트워크 관점에서 Region간의 Latency에 대해 파악할 수 있는 지표 가능
• Cloudwatch와 연동해서 적정수준(Acceptance Range)보다 나빠질 경우 알람 발생 가능
• 3개의 주요 메트릭
Latency Measurement Health Checks
• TCP connecOon Ome (HTTP and TCP health checks only) : TCP 3 Way 핸드 쉐이크 (패킷 3개가 왔다갔다함)가 진행되고 통신할 준비가 되는데 걸리는시간
• Time to complete SSL handshake (HTTPS health checks only) : HTTPS 적용시 SSL을 통해 Secure 한 채널을 설정하는데 걸리는 시간
• Time to first byte (HTTP and HTTPS health checks only) : 유저 브라우저가 HTTP(S) 요청을 해서 받는 데 걸리는 시간
• ap-‐northeast-‐1(동경)에 있는 나의 인스턴스에 대해 같은 리전(health check applicaLon)에서 측정
TCP 커넥션을 맺는 시간 HTTP(S) 요청에 대해 응답이 오는 시간
• ap-‐northeast-‐1(동경)에 있는 나의 인스턴스에 다른 리전(us-‐east-‐1)에서 측정
TCP 커넥션을 맺는 시간 HTTP(S) 요청에 대해 응답이 오는 시간
Tip 7 – DetecOng changes
QuesLon : 서버 등의 변화를 빨리 감지하기 위해서는?
AWS API AcLvity Logs
CloudTrail
CloudTrail ConfiguraLon S3 + CloudWatch Logs
CloudTrail ConfiguraLon : S3 + CloudWatch Logs
CloudTrail ConfiguraLon : S3 + CloudWatch Logs
CloudTrail : CloudWatch Logs
CloudTrail : API acOvity history
CloudTrail : API acOvity history -‐ Filter
CloudTrail ConfiguraLon : S3 + CloudWatch Logs + Alarm
CloudTrail ConfiguraLon : S3 + CloudWatch Logs + Alarm
CloudTrail ConfiguraLon : S3 + CloudWatch Logs + Alarm
CloudTrail ConfiguraLon : S3 + CloudWatch Logs + Alarm
CloudTrail ConfiguraLon : S3 + CloudWatch Logs + Alarm
추가 팁!
AWS Config rules
§ 기록된 내역이 변경되는 것을 탐지하는 rules 설정.
§ AWS가 제공하는 pre-built rules 사용.
§ AWS Lambda를 활용한 커스텀 rule 지원
§ 지속적인 진단수행을 자동화
§ 컴플라이언스 시각화나 위험한 변경을 식별하기 위해 대쉬보드 제공.
Config Rules(preview)
AWS Config
APIs
Rule R1: EC2 태깅 여부
Rule R3: CloudTrail 설정 여부 Rule R2: 운영환경 볼륨 암호화 여부
Normalize 변경 내역 기록 변경된 리소스 전달 저장
스트림
스냅샷(ex. 2014-11-05)
이력
AWS Config & Config Rules
§ AWS managed rules AWS가 정의 minimal (or no) configuration 필요 AWS에 의해 관리되는 Rules
§ Customer managed rules AWS Lambda를 사용하여 정의
Rules들이 해당 account에서 실행됨 관리책임은 고객 몫
기록된 구성정보의 검증을 체크하는 한개의 rule.
Config Rule
§ 변경작업에 의해 기동: Rules은 연관된 리소스가 변경될 때 기동. Config Rules를 기동시키는 변경 작업들:
§ Tag key/value
§ Resource types
§ Specific resource ID
e.g. ‘Production’으로 태깅된 EBS volume은 반드시 EC2 instance에 붙어 있어야 함.
§ 주기적으로 기동: Rule이 지정된 빈도와 주기에 의해 실행됨.
e.g. 매 3시간 마다, 해당 Account가 3 대 이상의 “PCI v3” EC2 instance를 실행하고 있는지 확인.
Config Rules -‐ Triggers
1. 모든 EC2 instance들은 반드시 한개의 VPC상에 존재하여야 한다.
2. 모든 attached EBS volume들은 KMS ID를 가지고 반드시 암호화되어야 한다.
3. CloudTrail은 반드시 활성화되어 있어야 하고, 선택적으로 S3 bucket, SNS topic, CloudWatch Logs와 함께 구성되는 것을 권장한다.
4. Attach 된 상태의 모든 security group은 반드시 port 22를 포함한 지정된 포트에 대한 무제한 접근을 방지해야 한다.
5. VPC안에 사용을 위해 할당된 모든 EIP들은 반드시 인스턴스에 할당되어 있어야 한다.
6. 모든 모니터링 되는 리소스들은 적절하게 tag keys:values로 태깅되어 있어야 한다.
AWS managed rules
§ 고객사 프랙티스를 자동화 하기 위해 코드로 구현.
§ AWS Lambda에 관련 샘플로 간단히 시작 가능.
§ 보안 베스트 프랙티스와 컴플라이언스를 위한 가이드 라인 구현.
§ AWS파트너가 생성한 Rule도 활용가능.
§ 단일 대쉬보드 상에 정리된 형태의 컴플라이언스 뷰를 제공.
Custom rules
Resource Type Resource
Amazon EC2 EC2 Instance EC2 ElasLc IP (VPC only) EC2 Security Group EC2 Network Interface
Amazon EBS EBS Volume
Amazon VPC VPCs Network ACLs Route Table Subnet VPN ConnecLon Internet Gateway Customer Gateway VPN Gateway
AWS CloudTrail Trail
Iden&ty and Access Management IAM Users IAM Groups IAM Roles IAM Customer Managed Policies
Amazon EC2 Dedicated Hosts
지원되는 리소스 타입