Slide 1

Slide 1 text

Auto Scaling with Ruby, AWS, Jenkins and Redis

Slide 2

Slide 2 text

hello! I am JeDDie A software engineer. A Rails Girls volunteer.

Slide 3

Slide 3 text

Auto Scaling with Ruby, AWS, Jenkins and Redis

Slide 4

Slide 4 text

1. Auto Scaling? Scalability.

Slide 5

Slide 5 text

“ Methods of adding more resources for a particular application fall into two broad categories: horizontal and vertical scaling. http://en.wikipedia.org/wiki/Scalability Michael, Maged; Moreira, Jose E.; Shiloach, Doron; Wisniewski, Robert W. (March 26, 2007). "2007 IEEE International Parallel and Distributed Processing Symposium"

Slide 6

Slide 6 text

Scale Vertically ▸ Scale up and down about SCALABILITY Scale Horizontally ▸ Scale out scale up scale down 1 4

Slide 7

Slide 7 text

Okay, and WHY? needs auto scaling

Slide 8

Slide 8 text

about our office ❤ Taiwan

Slide 9

Slide 9 text

Place your screenshot here Content Matters When the live show attracts people, they will become audience right away.

Slide 10

Slide 10 text

柯P:一個更好的台北 2014-11-29 158,157 clicks 10,400 ccu

Slide 11

Slide 11 text

2. Amazon Web Services What we need for auto scaling.

Slide 12

Slide 12 text

AWS require “aws” auto_scaling = ec2 + cli + elb + elasti_cache

Slide 13

Slide 13 text

3. Amazon EC2 Elastic Compute Cloud

Slide 14

Slide 14 text

Amazon EC2 ▸ Amazon Elastic Compute Cloud ○ “A web service that provides resizable compute capacity in the cloud” ○ “Designed to make web-scale cloud computing easier for developers” ■ Scale up/down; start, stop, terminate...etc. EASY management with a great UI.

Slide 15

Slide 15 text

AMI ▸ Amazon Machine Images ○ “A template for the root volume for the instance (for example, an operating system, an application server, and applications)” A script of an instance.

Slide 16

Slide 16 text

4. AWS CLI Command Line Interface

Slide 17

Slide 17 text

AWS CLI ▸ AWS Command Line Interface ○ “A unified tool to manage your AWS services” ■ AWS CLI and AWS EC2 CLI ■ Github ● aws/aws-sdk-ruby ● aws/aws-cli ○ Access key ■ AWS Identity and Access Management (IAM) API.

Slide 18

Slide 18 text

Process of Launching Instance Launch instance using image Allocate IP Associate IP with instance

Slide 19

Slide 19 text

`ec2-run-instances #{AMI_ID} #{REGION} #{GROUP} #{SUBNET} #{INSTANCE_TYPE} #{BLOCK_DEVICE_MAPPING}` Launch an Instance Using an Image. launch instance Image ID security group small? large? additional store volume

Slide 20

Slide 20 text

ec2-run-instances ec2-run-instances ami-1a2b3c4d -s subnet-1a2b3c4d -t c1.medium OUTPUT> RESERVATION r-1a2b3c4d 111122223333 INSTANCE i-1a2b3c4d ami-1a2b3c4d pending c1.medium YYYY-MM-DDTHH:MM:SS+0000 10.0.0.146 … from Amazon doc

Slide 21

Slide 21 text

`ec2-allocate-address -d vpc #{REGION}` Allocate an Elastic IP for use. virtual private cloud

Slide 22

Slide 22 text

ec2-allocate-address ec2-allocate-address -d vpc OUTPUT> ADDRESS 198.51.100.1 vpc eipalloc-5723d13e from Amazon doc

Slide 23

Slide 23 text

`ec2-associate-address #{ALLOCATION_ID} #{INSTANCE_ID} #{REGION}` Associates an Elastic IP with an Instance. bind IP and instance elastic ip

Slide 24

Slide 24 text

ec2-associate-address ec2-associate-address -a eipalloc-5723d13e -i i- 4fd2431a OUTPUT> ADDRESS i-43a4412a eipalloc-5723d13e eipassoc-fc5ca095 from Amazon doc

Slide 25

Slide 25 text

Do all in One Step ?

Slide 26

Slide 26 text

Do All in One ▸ Pros ○ Simple flow ▸ Cons ○ Legacy > 5 mins Facts that matter Break Things Down ▸ Pros ○ Flexible to handle ▸ Cons ○ Different entries by time It takes 5 minutes to run an instance up process launch + IP go online process

Slide 27

Slide 27 text

Process of Terminating Instance Disassociate IP from instance Release IP Terminate instance

Slide 28

Slide 28 text

`ec2-disassociate-address # {ASSOCIATION_ID} #{REGION}` Disassociates Elastic IP from Instance. the link ec2-disassociate-address -a eipassoc-048c746d OUTPUT> ADDRESS eipassoc-048c746d example from Amazon doc

Slide 29

Slide 29 text

`ec2-release-address #{ASSOCIATION_ID} # {REGION}` Release Elastic IP. ec2-release-address -a eipassoc-048c746d OUTPUT> ADDRESS eipassoc-048c746d example from Amazon doc

Slide 30

Slide 30 text

`ec2-terminate-instances #{INSTANCE_ID} #{REGION}` Shutdown Instance. PROMPT> ec2-terminate-instances i-1a2b3c4d OUTPUT> INSTANCE i-1a2b3c4d running shutting-down example from Amazon doc

Slide 31

Slide 31 text

5. AWS ELB Elastic Load Balancing

Slide 32

Slide 32 text

AWS ELB ▸ Elastic Load Balancing ○ “Automatically distributes incoming application traffic across multiple Amazon EC2 instances in the cloud.” Traffic-monitoring UI and the metrics. Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 33

Slide 33 text

`elb-register-instances-with-lb # {LOAD_BALANCER} #{INSTANCE_ID} #{REGION} #{CREDENTIAL_FILE}` Make Load Balancer Know Instance.

Slide 34

Slide 34 text

elb-register-instance-with-lb aws elb register-instances-with-load-balancer --load- balancer-name my-test-loadbalancer --instances i- 4e05f721 OUTPUT> { "Instances": [ {"InstanceId": "i-315b7e51"}, {"InstanceId": "i-4e05f721"} ] } from Amazon doc

Slide 35

Slide 35 text

`elb-deregister-instances-with-lb # {LOAD_BALANCER} #{INSTANCE_ID} #{REGION} #{CREDENTIAL_FILE}` Cut Instance out from Load Balancer. aws elb register-instances-with-load-balancer --load-balancer-name my-test-loadbalancer --instances i-4e05f721 OUTPUT> {"Instances": [{"InstanceId": "i-315b7e51"}]} from Amazon doc

Slide 36

Slide 36 text

`aws elb describe-instance-health # {LOAD_BALANCER} #{REGION}` Returns the current state of the instances registered with the specified load balancer.

Slide 37

Slide 37 text

describe-instance-health aws elb describe-instance-health --load-balancer-name MyHTTPSLoadBalancer OUTPUT> { "InstanceStates": [ {"InstanceId": "i-cb439ec2", "ReasonCode": "N/A", "State": "InService", "Description": "N/A"} ] } from Amazon doc

Slide 38

Slide 38 text

`mon-get-stats #{METRIC} #{NAMESPACE} #{STATISTICS} #{REGION} #{DIMENSIONS} #{CREDENTIAL_FILE}` Get time-series data for one or more statistics of a given Metric. get time-series data requestCount, HTTPCode_Backend_2XX, ... aws/elb sum lb name

Slide 39

Slide 39 text

mon-get-stats mon-get-stats RequestCount --statistics "Sum" -- namespace "AWS/ELB" OUTPUT> 2015-01-29 12:01:00 687.0 Count 2015-01-29 12:02:00 753.0 Count 2015-01-29 12:03:00 836.0 Count from Amazon doc

Slide 40

Slide 40 text

Elements ELB monitor traffic EC2 launch or terminate instance ElastiCache track instance status

Slide 41

Slide 41 text

6. Amazon ElastiCache Redis

Slide 42

Slide 42 text

Amazon ElastiCache ▸ Amazon ElastiCache ○ “makes it easy to deploy, operate, and scale an in-memory cache in the cloud” Redis, a key-value database.

Slide 43

Slide 43 text

Redis “Redis is an open source, BSD licensed, advanced key-value cache and store. ” - http://redis.io Different data structures: strings, hashes, lists, sets, ... Icon made by Carlos Prioglio from www.iconfinder.com is licensed under CC BY-NC-SA 3.0

Slide 44

Slide 44 text

7. Auto Scaling! Automation.

Slide 45

Slide 45 text

Auto Scaling Icons made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 46

Slide 46 text

Let’s auto scale! Icon made by SimpleIcon from www.flaticon.com is licensed under CC BY 3.0

Slide 47

Slide 47 text

A Robot’s Day Its name is Bee! Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 48

Slide 48 text

Monitor Traffic ▸ CLI ○ elb-register-instances-with-lb ○ mon-get-stats

Slide 49

Slide 49 text

Decide a Threshold ▸ Observe what has happened time request

Slide 50

Slide 50 text

The Basic Process ▸ Basic actions ○ ec2-run-instances ○ ec2-allocate-address ○ ec2-associate-address ○ elb-register ○ elb-deregister ○ ec2-disassociate-address ○ ec2-release-address ○ ec2-terminate-instances

Slide 51

Slide 51 text

Watch for Status ▸ Now what should be done? ○ Add/remove instance ■ Number of online-servers ■ Traffic and threshold ○ Register/deregister instance with load balancer ○ Update instance status ■ pending / Initializing / running / stop / problem ○ White List ○ Limitation ■ Time ■ Scaling Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 52

Slide 52 text

Track Things Down ▸ Online instances ▸ Waken instances ▸ Problem instances Redis data type: List. i-abcde01 i-bcdef02 i-cdefg03

Slide 53

Slide 53 text

Track Things Down ▸ Instance information ▸ The timestamp of the last instance initialized Redis data type: String. i-abcde01: "{id: i-abcde01, status: initializing, private_ip: 192.168.0.1, public_ip: 54.12.23.34, created_at: 2015/01/20 14:03:00}"

Slide 54

Slide 54 text

Release

Slide 55

Slide 55 text

8. Deployment Let’s meet other robots!

Slide 56

Slide 56 text

http://capistranorb. com/ Icon made by Charles Lowell and Frontside from jenkins-ci.org is licensed under CC BY-SA 3.0

Slide 57

Slide 57 text

Always put the NEWEST service online. Icon made by OCHA , icon made by Freepik, icon made by Sarfraz Shoukat from www.flaticon.com is licensed under CC BY 3.0 Icon made by Charles Lowell and Frontside from jenkins-ci.org is licensed under CC BY-SA 3.0

Slide 58

Slide 58 text

with Jenkins Auto Scaling + Deployment

Slide 59

Slide 59 text

New pre and post processes. Original Deployment Get servers’ IP Build Image

Slide 60

Slide 60 text

Get servers’ IP `aws ec2 describe-instances #{REGION} --filters "Name=instance-state-name,Values=running" "Name=instance.group-name,Values=FrontEnd" "Name=tag-value,Values=FrontEnd Production*" "Name=ip-address,Values=*"` RESERVATION r-1a2b3c4d 111122223333 INSTANCE i-1a2b3c4d ami-1a2b3c4d running my-key-pair 0 m1.small YYYY-MM-DDTHH:MM: SS+0000 us-west-2b windows monitoring-disabled 50.112.172.209 10.0.0.167 vpc-1a2b3c4d subnet-1a2b3c4d ebs hvm xen ABCDE1234567890123sg-1a2b3c4d default false BLOCKDEVICE /dev/sdb vol-1a2b3c4d YYYY-MM-DDTHH:MM:SS.SSSZtrue NIC eni-1a2b3c4dsubnet-1a2b3c4d vpc-1a2b3c4d111122223333in-use10.0.1.167 true NICATTACHMENT eni-attach-1a2b3c4d 0 attached YYYY-MM-DDTHH:MM:SS+0000true GROUP sg-1a2b3c4d my-security-group PRIVATEIPADDRESS 10.0.1.167 PRIVATEIPADDRESS 10.0.1.12 TAG instance i-1a2b3c4d Name Windows from Amazon doc

Slide 61

Slide 61 text

Build Image `ec2-create-image #{INSTANCE_ID} #{NAME} #{DESCRIPTION} --no-reboot #{REGION}` ec2-create-image i-10a64379 --name "Standard Web Server" --description "Standard web server AMI" OUTPUT> IMAGE ami-4fa54026 from Amazon doc

Slide 62

Slide 62 text

Do we solve it? NOT yet!

Slide 63

Slide 63 text

Good communication matters! icons made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 64

Slide 64 text

Happy Auto Scaling! Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0

Slide 65

Slide 65 text

Join us! https://livehouse.in/recruit

Slide 66

Slide 66 text

Thanks! any questions ? You can find me at [email protected]

Slide 67

Slide 67 text

Credits Special thanks to all the people who made and released these awesome resources for free: ▸ Busy Icons by Olly Holovchenko ▸ Presentation template by SlidesCarnival ▸ Photographs by Unsplash ▸ Paper backgrounds by SubtlePatterns ▸ Other icons are from ▸ http://www.freepik.com ▸ http://www.flaticon.com ▸ https://livehouse.in ▸ http://jenkins-ci.org