AWS Elastic Beanstalk in der Praxis

Einführung und Best Practices

Über mich

  • DevOps @ WeltN24
    • cloud, chef, ruby
    • java, gradle
    • newbie gopher
  • s_stoyanoff

Motivation

  • Erfahrung teilen
  • Wann EB und wann nicht?

Was ist EB?

  • existiert seit 2011
  • ist eine Abstraktion (PaaS) über viele AWS-Dienste
    • EC2
    • S3
    • CloudWatch
    • AutoScaling 
    • ElasticLoadBalancing
    • verschiedene Stacks (Java, Ruby, Python, PHP, Docker)

Warum EB?

  • sehr einfache 0-Downtime Deployments
  • einfache Auto-Skalieriung und HA
  • mit Docker beliebige Stacks möglich
  • (Monitoring und Log-Aggregation)

Demo

0-Downtime Deployment

0-Downtime Deployment

Helpers

Demo

Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "janedoe/image",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "1234"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/var/app/mydb",
      "ContainerDirectory": "/etc/mysql"
    }
  ],
  "Logging": "/var/log/nginx"
}

.ebextensions

packages:
  yum:
    perl-Switch: []
    perl-Sys-Syslog: []
    perl-URI: []
    perl-Compress-Raw-Zlib: []
    perl-Bundle-LWP: []
    perl-DateTime: []

commands:
  01-changeperm:
    command: chmod 644 /etc/cron.d/foo

Monitoring

  • DataDog .. besser nicht
  • CloudWatch
  • zabbix
  • ELK/Splunk
  • (Prometheus)

Dos

  • AWS-Kontos für DEVs
  • Datenbank-Migrationen vom Anfang integrieren

Don'ts

  • Non-Single-Responsibility CF-Templates
  • Quick'n'Dirty selbstgebackene Deployment Tools
  • ohne Netzwerk-Konzept starten
  • zu viele .ebextensions, besser packer

Fazit

  • Continuous Delivery nicht nur in der Theorie
  • geignet für kleine Services
  • nicht die beste Wahl für Infrastruktur-Dienste

Links