Pro Yearly is on sale from $80 to $50! »

Auto Scaling with Ruby, AWS, Jenkins and Redis

D93c30bcb80c63e23fbb278abe1dca97?s=47 JeDDieChuang
February 05, 2015

Auto Scaling with Ruby, AWS, Jenkins and Redis

This is a basic tech experience to build auto scale with AWS shared from LIVEhouse.in. The slide also includes how we coordinate auto scaling and the release deployment.

D93c30bcb80c63e23fbb278abe1dca97?s=128

JeDDieChuang

February 05, 2015
Tweet

Transcript

  1. Auto Scaling with Ruby, AWS, Jenkins and Redis

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

    volunteer.
  3. Auto Scaling with Ruby, AWS, Jenkins and Redis

  4. 1. Auto Scaling? Scalability.

  5. “ 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"
  6. Scale Vertically ▸ Scale up and down about SCALABILITY Scale

    Horizontally ▸ Scale out scale up scale down 1 4
  7. Okay, and WHY? needs auto scaling

  8. about our office ❤ Taiwan

  9. Place your screenshot here Content Matters When the live show

    attracts people, they will become audience right away.
  10. 柯P:一個更好的台北 2014-11-29 158,157 clicks 10,400 ccu

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

  12. AWS require “aws” auto_scaling = ec2 + cli + elb

    + elasti_cache
  13. 3. Amazon EC2 Elastic Compute Cloud

  14. 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.
  15. 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.
  16. 4. AWS CLI Command Line Interface

  17. 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.
  18. Process of Launching Instance Launch instance using image Allocate IP

    Associate IP with instance
  19. `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
  20. 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
  21. `ec2-allocate-address -d vpc #{REGION}` Allocate an Elastic IP for use.

    virtual private cloud
  22. ec2-allocate-address ec2-allocate-address -d vpc OUTPUT> ADDRESS 198.51.100.1 vpc eipalloc-5723d13e from

    Amazon doc
  23. `ec2-associate-address #{ALLOCATION_ID} #{INSTANCE_ID} #{REGION}` Associates an Elastic IP with an

    Instance. bind IP and instance elastic ip
  24. ec2-associate-address ec2-associate-address -a eipalloc-5723d13e -i i- 4fd2431a OUTPUT> ADDRESS i-43a4412a

    eipalloc-5723d13e eipassoc-fc5ca095 from Amazon doc
  25. Do all in One Step ?

  26. 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
  27. Process of Terminating Instance Disassociate IP from instance Release IP

    Terminate instance
  28. `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
  29. `ec2-release-address #{ASSOCIATION_ID} # {REGION}` Release Elastic IP. ec2-release-address -a eipassoc-048c746d

    OUTPUT> ADDRESS eipassoc-048c746d example from Amazon doc
  30. `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
  31. 5. AWS ELB Elastic Load Balancing

  32. 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
  33. `elb-register-instances-with-lb # {LOAD_BALANCER} #{INSTANCE_ID} #{REGION} #{CREDENTIAL_FILE}` Make Load Balancer Know

    Instance.
  34. 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
  35. `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
  36. `aws elb describe-instance-health # {LOAD_BALANCER} #{REGION}` Returns the current state

    of the instances registered with the specified load balancer.
  37. 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
  38. `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
  39. 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
  40. Elements ELB monitor traffic EC2 launch or terminate instance ElastiCache

    track instance status
  41. 6. Amazon ElastiCache Redis

  42. Amazon ElastiCache ▸ Amazon ElastiCache ◦ “makes it easy to

    deploy, operate, and scale an in-memory cache in the cloud” Redis, a key-value database.
  43. 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
  44. 7. Auto Scaling! Automation.

  45. Auto Scaling Icons made by Freepik from www.flaticon.com is licensed

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

    licensed under CC BY 3.0
  47. A Robot’s Day Its name is Bee! Icon made by

    Freepik from www.flaticon.com is licensed under CC BY 3.0
  48. Monitor Traffic ▸ CLI ◦ elb-register-instances-with-lb ◦ mon-get-stats

  49. Decide a Threshold ▸ Observe what has happened time request

  50. 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
  51. 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
  52. Track Things Down ▸ Online instances ▸ Waken instances ▸

    Problem instances Redis data type: List. i-abcde01 i-bcdef02 i-cdefg03
  53. 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}"
  54. Release

  55. 8. Deployment Let’s meet other robots!

  56. http://capistranorb. com/ Icon made by Charles Lowell and Frontside from

    jenkins-ci.org is licensed under CC BY-SA 3.0
  57. 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
  58. with Jenkins Auto Scaling + Deployment

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

    Build Image
  60. 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
  61. 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
  62. Do we solve it? NOT yet!

  63. Good communication matters! icons made by Freepik from www.flaticon.com is

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

    licensed under CC BY 3.0
  65. Join us! https://livehouse.in/recruit

  66. Thanks! any questions ? You can find me at jeddie@livehouse.in

  67. 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