gaming on aws - 4. 인프라 자동화와 유용한 7가지 tip

81
인프라 자동화와 유용한 7가지 Tip )& [email protected] Solu9ons Architect

Upload: amazon-web-services-korea

Post on 21-Jan-2018

1.177 views

Category:

Technology


1 download

TRANSCRIPT

인프라$자동화와$유용한$7가지$Tip$

)&���[email protected]'Solu9ons'Architect'

Sample$Architecture$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

가용 영역 A

가용 영역 B

가용 영역 C

SWF 작업자 인스턴스 ELB

ELB

ELB

웹 인스턴스

웹 인스턴스

웹 인스턴스

RDS DB 인스턴스 주(다중 AZ)

RDS DB 인스턴스 예비(다중 AZ)

ElastiCache

Amazon CloudWatch

AWS CloudFormation

Amazon S3

AWS OpsWorks

Amazon SNS

Amazon SQS

EC2 API

Amazon SWF

NAT 인스턴스

Secondary

Sample$Architecture$(One$stack)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

가용 영역 A

가용 영역 B

가용 영역 C

SWF 작업자 인스턴스 ELB

ELB

ELB

웹 인스턴스

웹 인스턴스

웹 인스턴스

RDS DB 인스턴스 주(다중 AZ)

RDS DB 인스턴스 예비(다중 AZ)

ElastiCache

Amazon CloudWatch

AWS CloudFormation

Amazon S3

AWS OpsWorks

Amazon SNS

Amazon SQS

EC2 API

Amazon SWF

NAT 인스턴스

Secondary

stack

template

Sample$Architecture$(VPC$create)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

인터넷 게이트웨이

가용 영역 A

가용 영역 B

가용 영역 C

Amazon CloudWatch

AWS CloudFormation

Amazon S3 stack

template

Sample$Architecture$(Add$NAT$instance)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

NAT 인스턴스

인터넷 게이트웨이

가용 영역 A

가용 영역 B

가용 영역 C

Amazon CloudWatch

AWS CloudFormation

Amazon S3

stack

template

Sample$Architecture$(Add$Bas<on$instance)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

가용 영역 A

가용 영역 B

가용 영역 C

Amazon CloudWatch

AWS CloudFormation

Amazon S3

stack

template

Sample$Architecture$(Update$VPC$stack$:$+ELB)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

가용 영역 A

가용 영역 B

가용 영역 C

ELB

ELB

ELB

Amazon CloudWatch

AWS CloudFormation

Amazon S3 stack

template

Sample$Architecture$(Add$RDS$Mul<FAZ)$$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

가용 영역 A

가용 영역 B

가용 영역 C

ELB

ELB

ELB

RDS DB 인스턴스 주(다중 AZ)

RDS DB 인스턴스 예비(다중 AZ)

Amazon CloudWatch

AWS CloudFormation

Amazon S3 stack

template

Sample$Architecture$(Add$web$server$fleet)$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

가용 영역 A

가용 영역 B

가용 영역 C

ELB

ELB

ELB

웹 인스턴스

웹 인스턴스

웹 인스턴스

RDS DB 인스턴스 주(다중 AZ)

RDS DB 인스턴스 예비(다중 AZ)

Amazon CloudWatch

AWS CloudFormation

Amazon S3

AWS OpsWorks

Sample$Architecture$

…...$

Sample$Architecture$

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

퍼블릭 VPC 서브넷

AWS US-West-2 Virtual Private Cloud

Leap/Bastion 인스턴스

NAT 인스턴스

인터넷 게이트웨이

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

프라이빗 VPC 서브넷

가용 영역 A

가용 영역 B

가용 영역 C

SWF 작업자 인스턴스 ELB

ELB

ELB

웹 인스턴스

웹 인스턴스

웹 인스턴스

RDS DB 인스턴스 주(다중 AZ)

RDS DB 인스턴스 예비(다중 AZ)

ElastiCache

Amazon CloudWatch

AWS CloudFormation

Amazon S3

AWS OpsWorks

Amazon SNS

Amazon SQS

EC2 API

Amazon SWF

NAT 인스턴스

Secondary

Deployment$and$Management$

AWS$OpsWorks$ AWS$CloudForma<on$

AWS$Elas<c$Beanstalk$

애플리케이션 라이프$사이클 관리 및$자동화를 위한$

DevOps 프레임워크$

템플릿 기반으로 인프라를 코드로 정의하고디플로이 & 업데이트$

자동화된 리소스$관리 – 웹 애플리케이

션을 쉽게 운영$

DIY$/$$On$Demand$DIY,$on$demand$

resources:$EC2,$S3,$custom$AMI’s,$etc.$

편리함$ 제어권$

AWS$CloudForma<on$

•  <���71H �3F��

•  !6���,�BK�

•  JSON�D��

•  @G�(Templates)'

•  %=(Stacks�'

•  1����AWS��$%��9.�

AWS$CloudForma<on$

AWS$CloudForma<on$

$

CloudForma<on$Templates$

익숙한 JSON$포맷$

재사용 가능$리소스 관계 관리$

자동 제너레이션$ 충돌 회피$

의견 제공$

작성 & 구동$리소스 탐색$

AWS$CloudForma<on$–$컴포넌트$&$기술$

템플릿' CloudForma9on' 스택'

JSON 포맷 파일''

Parameter'defini,on'

Resource'crea,on'Configura,on'ac,ons'

설정된 AWS'서비스 집합''

Comprehensive'service'support'

Service'event'aware'Customizable''

프레임워크''

Stack'crea,on'

Stack'updates'Error'detec,on'and'rollback'

AWS$CloudForma<on$

AWS CloudFormation은 개발자와 시스템 관리자가 관련 AWS 리소스 모음을 쉽게 생성 및 관리하고, 이를 순서에 따라 예측 가능한 방식으로 프로비저닝하고 업데이트할 수 있는 간편한 방법을 제공합니다. 2010년 첫 출시

AWS$CloudForma<on$

애플리케이션 실행에 필요한 AWS 리소스는 물론 기타 관련 종속성 또는 런타임 파라미

터에 대해 설명하는 템플릿

AWS$CloudForma<on$

일반적으로 사용자는 AWS 서비스를 프로비저닝해야 하는 순서나 이러한 종속성이 작동하는 방법을 알아야 할 필요가 없습니다.

AWS$CloudForma<on$

일단 배포한 다음에는 제어 및 예측 가능한 방식으로 AWS 리소스를 수정하거나 업데이트할 수 있습니다. 즉, 소프트웨어의 버전과 동일한 방식으로 AWS 인프라의 버전 관리를

허용합니다.

AWS$CloudForma<on$

CloudFormation이 대신 처리합니다.

AWS$CloudForma<on$

AWS CloudFormation에는 추가 요금이 없으며 애플리케이션 실행에 필요한 AWS 리소스

에 대해서만 요금을 지불하면 됩니다

AWS$CloudForma<on$

!  AWS 리소스를 설명하는 템플릿

!  통제되며 예측 가능한 방식으로 AWS 리소스 수정 및 업데이트

!  AWS 인프라 버전 관리

AWS$CloudForma<on$

!  AWS 리소스를 설명하는 템플릿

!  통제되며 예측 가능한 방식으로 AWS 리소스 수정 및 업데이트

!  AWS 인프라 버전 관리

물리적 데이

터 센터

에서 이러한 작업

가능합니까?

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "AWS CloudFormation Sample Template EC2InstanceSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example uses the default security group, so to SSH to the new instance using the KeyPair you enter, you will need to have port 22 open in your default security group. **WARNING** This template an Amazon EC2 instances. You will be billed for the AWS resources used if you create a stack from this template.", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-7f418316" }, "us-west-1" : { "AMI" : "ami-951945d0" }, "us-west-2" : { "AMI" : "ami-16fd7026" }, "eu-west-1" : { "AMI" : "ami-24506250" }, "sa-east-1" : { "AMI" : "ami-3e3be423" }, "ap-southeast-1" : { "AMI" : "ami-74dda626" }, "ap-northeast-1" : { "AMI" : "ami-dcfa4edd" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }, "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "PublicDNS" : { "Description" : "Public DNSName of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicDnsName" ] } } } }

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "AWS CloudFormation Sample Template EC2InstanceSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example uses the default security group, so to SSH to the new instance using the KeyPair you enter, you will need to have port 22 open in your default security group. **WARNING** This template an Amazon EC2 instances. You will be billed for the AWS resources used if you create a stack from this template.", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-7f418316" }, "us-west-1" : { "AMI" : "ami-951945d0" }, "us-west-2" : { "AMI" : "ami-16fd7026" }, "eu-west-1" : { "AMI" : "ami-24506250" }, "sa-east-1" : { "AMI" : "ami-3e3be423" }, "ap-southeast-1" : { "AMI" : "ami-74dda626" }, "ap-northeast-1" : { "AMI" : "ami-dcfa4edd" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }, "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "PublicDNS" : { "Description" : "Public DNSName of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicDnsName" ] } } } }

헤더 파라미터

매핑

리소스

출력

AWS$OpsWorks$

•  'G�;2#�3F�����•  Linux/Windows'and'Chef'

•  8-�:D�C��•  %=(Stacks)'

•  �2*(Layers)'

•  3%?%(Instances)'

•  ((Apps)'

AWS$OpsWorks$

AWS$OpsWorks$

AWS$Elas<c$Beanstalk$

•  'G�;2#0�/I�5�M��3F��

�����<���G�2�

•  DJ��•  ��� �"�

•  L%���>��

•  +A�%;4��

•  'G�;2#�G�E����

•  <���G�2�

•  ���,�BK'

AWS$Elas<c$Beanstalk$

AWS$Elas<c$Beanstalk$

7가지 Tips$

!  #1':'게임서버의 빠른 복구'!  #2':'인프라 변화에 대한 빠른 감지'!  #3':'VPC'Peering'활용'!  #4':'방화벽 로그(VPC'Flow'Logs)'시각화'!  #5':'EBS'최적화를 통한 비용절감'!  #6':'S3'Object'에 대한 Metadata'관리'!  #7':'??'

#1$:$게임서버의 빠른 복구$

!  Auto'Recovery'for'Amazon'EC2'!  CloudWatch의 StatusCheckFailed_System'매트릭에 알람 생성'' `>'Recover'this'instance'액션 선택'

#1$:$게임서버의 빠른 복구$

!  Auto'Recovery'for'Amazon'EC2'!  CloudWatch의 StatusCheckFailed_System'매트릭에 알람 생성'' `>'Recover'this'instance'액션 선택'

#1$:$게임서버의 빠른 복구$

!  Auto'Recovery'for'Amazon'EC2'!  CloudWatch의 StatusCheckFailed_System'매트릭에 알람 생성'' `>'Recover'this'instance'액션 선택'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'+'Bonus$

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'+'Bonus$

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'+'Bonus$

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'+'Bonus$

#2$:$인프라 변화에 대한 빠른 감지$

!  AWS'API'Ac9vity'Lookup'in'CloudTrail'!  CloudTrail'Configura9on':'S3'+'CloudWatch'Logs'+'Bonus$

#3$:$VPC$Peering$활용$

!  VPC'Peering'within'a'region'!  One`to`one'networking'connec9on'between'two'VPCs$

#3$:$VPC$Peering$활용$

!  VPC'Peering'within'a'region'!  One`to`one'networking'connec9on'between'two'VPCs'through'private'IP'addresses$

Game$#1$

Game$#2$

공통 기능$인증, 결재 등등$

$$다른 AWS$accounts 사이

에도 가능$

AWS$VPC$Peering$

#3$:$VPC$Peering$활용$

!  VPC'Peering'within'a'region'!  One`to`one'networking'connec9on'between'two'VPCs'through'private'IP'addresses$

Game$#1$

Game$#2$

Log$Analy<cs$

공통 기능$인증, 결재 등등$

$$다른 AWS$accounts 사이

에도 가능$

AWS$VPC$Peering$

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

Kibana3$for$VPC$Flow$Logs$

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

Kibana3$for$VPC$Flow$Logs$

Kibana3$for$Lambda$

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

Kibana3$for$CloudTrail$

#4$:$방화벽 로그(VPC$Flow$Logs)$시각화$

!  CloudWatch'Logs'+'Elas9csearch'+'Kibana'Dashboards'!  CloudWatch'Logs'Subscrip9on'Consumer'

Kibana4$Discover$sec<on$with$VPC$Flow$Logs$

Kibana4$Dashboard$sec<on$with$VPC$Flow$Logs$

#5$:$EBS$최적화를 위한 비용절감$

!  다수의 GP2(General'Purpose'SSD)'볼륨

• Cost$Op<misa<on$

•  1TB'PIOPS'volume'with'4K'IOPS''•  $441.41*'per'month'per'volume'__________________________________''

•  GP2'1TB'volume'with'3000'IOPS'•  $122.88*'

•  GP2'2'x'500GB'volumes'at'3K,'burst'to'6K'•  $122.88*'

'~70%'Cost'Savings.'50%'more'peak'I/O'with'

General'Purpose'(SSD)'

• Management$Op<misa<on$•  Leverage'tags'to'add'metadata'to'snapshots'

•  Applica9on'stack'•  Instance'Id'•  Volume'Id'•  Version'•  Type'(daily,'weekly)'

*Pricing'for'AWS'Tokyo'region':'ap`northeast`1'

Use$together$with$new$AMI$crea<on$date$

#6$:$S3$Object$에 대한 Metadata$관리$

!  S3'LIST'Opera9on의 사용을 제한하기 위한 Secondary'Lists'

S3'ObjectCreated'No9fica9on'

Lambda'

SQS' Workers'

DynamoDB'

RDS'

CloudSearch'

EC2'

#6$:$S3$Object$에 대한 Metadata$관리$

!  S3'LIST'Opera9on의 사용을 제한하기 위한 Secondary'Lists'

S3'ObjectCreated'No9fica9on'

Lambda'

SQS' Workers'

DynamoDB'

RDS'

CloudSearch'

EC2'

#7$:$??$

'

! 여러분들의 Tip'은 무엇입니까?'

Thank you

Ques<ons?$