Gabor Ratky
CTO at Secret Sauce Partners
Continuous delivery in AWS with Docker
noun 1 an extensive group of states or countries under a single supreme authority
noun 1 an extensive group of apps or services under a single supreme authority
2 a variety of apple
empire |also ämˈpi(ə)r| adjective denoting a style of [...] dress fashionable during the First or (less commonly) the Second Empire in France.
SSP API
Fit Predictor API
Fit Predictor
Style Finder API
Style Finder
Style Finder Blackbox
Abba
Acme Clothing
Central
Feeds
Luigi's Toolbox
Mario
MongoDB
ZooKeeper
Kafka
@raffi "build. test. deploy. the circle of life."
Build and test every commit (CI)
Deploy any commit, branch, or tag
Monitor and scale running applications
Rapidly build and deploy new applications
Keep it simple and extensible
DVCS
CI
PaaS
Use existing Docker-based infrastructure
Build Docker image in CircleCI using sspinc/docker-build
Run tests in a container (docker run <image> script/circleci-test)
Push image to Docker Hub if successful (sha1, branch, tag)
If you don't run your tests in a container, you're doing it wrong!
Anyone can cut a release on master
Follow semantic versioning to communicate changes
Tag commit and push release tag to GitHub
Declare commands of your application
web: bundle exec puma -C ./config/puma.rb
worker: bundle exec sidekiq -C ./config/sidekiq.yml
product: bundle exec rake service:product
Thin layer on top of ECS, ELB, Route 53
Deploy Docker images from Docker Hub (ECS)
Scale processes (ECS)
Rolling upgrades (ECS)
Rollback releases (ECS)
Load balance internal/external services (ELB, Route 53)
A self-hosted PaaS built on Docker & Amazon ECS
Log routing for Docker container logs (gliderlabs/logspout)
Runs on all our instances
Write logs to Kafka topics (sspinc/logspout-kafka)
Structured logs and metrics (sspinc/logr)
logger.event('feed_received', partner: 'abercrombie', type: 'product')
.monitored('Feed received', 'Even more explanation.')
.metric('total_bytes', 23764237, type: 'counter')
.info('Received feed')
{
"logger": "feeds",
"level": "info",
"event": { "name": "feed_received", "partner": "abercrombie" },
"metrics": [{ name: "total_bytes": 23764237 }],
"message": "Received feed"
}
We're hiring!
https://sspinc.workable.com