De 0 a DevOps
Rodando e Escalando sua Aplicação Web de Maneira
Automatizada
https://secure.flickr.com/photos/mgifford/4525333972
Por que nós
estamos aqui
hoje?
Software hoje em dia exige uma
iteração muito mais rápida
•Criação e distribuição de software
nunca foi tão fácil:
• Startups agora podem derrubar gigantes com pouco ou
nenhum financiamento antecipado
• O quão ágil você é, irá determinar sua habilidade de
enfrentar tecnologias disruptivas
Modelo antigo
O modelo de entrega de software mudou
drasticamente
Modelo novo
Quais ferramentas você precisa para ser
mais ágil?
• Lançar software nesse novo mundo software-driven requer certas
ferramentas:
• Ferramentas para gerenciar o fluxo do processo de um novo deploy
• Ferramentas que testam seu código
• Ferramentas que fazem o deploy da sua aplicação
• De maneira automática
Reality check
• Deploy manual
• FTP
• Rsync
• Janela de manutenção
• Algum controle de
versionamento (SVN)
Source Build Test Production
Continuous integration
Continuous delivery
Continuous deployment
As 4 fases do processo de deploy
• CodeBuild
• RunScope
• Blazemeter
As 4 fases do processo de deploy
Source Build Test Production
• S3
• CodeCommit
• GitHub
• CodeBuild
• Jenkins
• Solano
• TeamCity
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
Algo mais simples
Source Production
• S3
• CodeCommit
• GitHub
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
Elastic Beanstalk
A maneira mais fácil de ter sua aplicação
web rodando na nuvem de maneira
escalável
• Simplesmente faça um upload da sua
aplicação (ZIP ou WAR)
• Deploy direto do Visual Studio ou
Eclipse
• O EB irá criar os recursos
necessários e fará o deploy
• Gratuito. Pague somente pelos
recursos que o EB provisionar
• Versionamento e rollback
• Foco em conveniência
Diversas opções de deploy
• Blue/Green
• All at once
• Rolling
• Rolling with additional batch
• Immutable
Elastic Beanstalk
Suporte a diversos ambientes
• .NET (Windows/IIS)
• Java
• Node.js
• PHP
• Python
• Ruby
• Tomcat
• Go
• Packer
• Glassfish
• Docker
• Multi-container Docker
User Application
Application Service
HTTP Service
Language Interpreter
Operating System
Host
Elastic Beanstalk: 0 Downtime
Elastic Beanstalk: 0 Downtime
Elastic Beanstalk: 0 Downtime
Elastic Beanstalk: 0 Downtime
Elastic Beanstalk: 0 Downtime
Elastic Beanstalk
Enforça melhor prática: não logue
nas instâncias
• Personalização através do
deploy
• No diretório root do seu
pacote, crie um diretório
.ebextensions
• Dentro do diretório crie
arquivos .config no formato
YAML
• ~/workspace/my-app/
|-- .ebextensions
| |--environmentvariables.config
| `-- healthcheckurl.config
|-- .elasticbeanstalk
| `-- config.yml
|-- index.php
`-- styles.css
Exemplos arquivos no .ebextensions
files:
"/home/ec2-user/myfile" :
mode: "000755"
owner: root
group: root
source: http://foo.bar/myfile
"/home/ec2-user/myfile2" :
mode: "000755"
owner: root group:
root content: |
#arquivos
#conteúdos
commands:
python_install :
command: script1.py
cwd: /home/ec2-user
env:
varname: varname
test: ”[ ! -x /usr/bin/python ]”
EB + Git
1. Pelo Console, crie seu
primeiro ambiente de EB
2. Baixe e instale o Git
3. Baixe e instale o EB CLI 3.0
git init
git checkout nomedabranch
eb use nomedoenv
git add .
eb deploy
EB + CodeCommit
1. Baixe e instale o Git
2. Baixe e instale o EB CLI 3.0
3. Pelo Console, crie seu
repositório no CodeCommit
git init
git add .
git commit –m ”EBApp”
eb init
y
1
eb create myapp
eb use nomedoenv –-source branch
eb deploy
CodeDeploy
Faça deploy em qualquer instância
EC2 ou on-premises
• Evita downtime
• Rollback automático em caso
de falha
• Qualquer linguagem ou SO
• Integra com CodeCommit,
GitHub e S3
• Foco em controle
Duas opções de deploy
• In-place deployment
• Blue/green deployment
CodeDeploy: Instalar o agent
#!/bin/bash
yum -y update
yum install -y ruby
cd /home/ec2-user
curl -O https://bucket-name.s3.amazonaws.com/latest/install
chmod +x ./install ./install auto
<powershell>
New-Item -Path c:temp -ItemType "directory" -Force
powershell.exe -Command Read-S3Object -BucketName bucket-name/latest -Key
codedeploy-agent.msi -File c:tempcodedeploy-agent.msi
Start-Process -Wait -FilePath c:tempcodedeploy-agent.msi -WindowStyle Hidden
</powershell>
Exemplo de appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
permissions:
- object: /var/www/html
pattern: “*.html”
owner: root
group: root
mode: 755
hooks:
ApplicationStop:
- location: scripts/deregister_from_elb.sh
BeforeInstall:
- location: scripts/install_dependencies.sh
ApplicationStart:
- location: scripts/start_httpd.sh
ValidateService:
- location: scripts/test_site.sh
- location: scripts/register_with_elb.sh
• Remove e adiciona instâncias do ELB
• Instala dependecências
• Inicializa o Apache
• Confirma o deploy
• E muito mais!
• Envia os arquivos da aplicação
oara um diretório e carquivos de
configuração para outro
• Configura permissões
específicas em diretórios e
arquivos específicos
CodeDeploy + GitHub
1. https://www.youtube.com/watch?time_contin
ue=20&v=N3saR9D7hq8
2. https://aws.amazon.com/blogs/devops/auto
matically-deploy-from-github-using-aws-
codedeploy/
v2 v2 v2 v2 v2 v2
Um por vez
Medate
Tudo de uma vez
v2 v2 v2 v1 v1 v1
v2 v1 v1 v1 v1 v1
Agent Agent
Dev Deployment group
ou
Prod Deployment group
Agent
AgentAgent
Agent Agent
Agent
Velocidade e grupo do deploy
V1V1 V1 V1 V1 V1 V1 V1 V1 V1V2 V2 V2 V2 V2V2 V2 V2 V2 V2
Rolling deployments – sucesso
Instâncias de Produção
ELB
V1V1 V1 V1 V1 V1 V1 V1 V1 V1V2 V2 V2 V2 V2V2
Rolling deployments
Production Fleet
ELB
Falha no Deploy
4 failures – 60% healthy
MHH 70%, 10 hosts:
V1V2 V1V1 V1 V1 V1 V1 V1 V1 V1V2 V2 V2 V2V2 V2 V2 V2 V2
Minimum healthy hosts
Production Fleet
ELB
1 failure – 90% healthy
Minimum Health Hosts
Confgure o Rollback
• CodeDeploy: configure no deployment group
2 of 5 – Manage deployment health
Vamos automatizar o processo
Source Stage/Homo/Dev Aprovação Prod
• S3
• CodeCommit
• GitHub
• Manual…
por
enquanto
AWS CodePipeline
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
AWS CodePipeline
Serviço de CI e CD da AWS. Orquestra e
automatiza de ponta a ponta o seu deploy
• Source: GitHub, S3 e
CodeCommit
• Deployment: Elastic
Beanstalk, CodeDeploy e
CloudFormation
Ações
• Source
• Build
• Test
• Deploy
• Approval
• Invoke
MeuApp
CodeCommit/GitHub
DeployemDev
CodeDeploy/EB
QA
QA/Teste
Manual
CodeDeploy/EB
Source
Deploy em DEV
Teste/Aprovação
Deploy em Prod
Processo de release no CodePipeline
Execução do Pipeline
Stage
Pipeline
Source é alterado
• Executa um pipeline;
• Cria um artefato a ser usado em outras
actions.
Mudança
Vamos automatizar o processo
Source Build/Test Stage/Homo/Dev Aprovação Prod
• S3
• CodeCommit
• GitHub
• Automático
AWS CodePipeline
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
• CodeBuild
• Jenkins
• Solano
• TeamCity
• Elastic Beanstalk
• CodeDeploy
• CloudFormation
• OpsWorks
Build do seu código
• Refere-se a linguagens que requerem compilação de
binários:
• .NET languages: C#, F#, VB.net, etc.
• Java e JVM languages: Java, Scala, JRuby
• Go
• iOS languages: Swift, Objective-C
• Também pode ser o processo de criação de imagens de
containers Docker como ”build” da imagem
EC2
AWS CodeBuild
Compila seu código, faz testes unitários
e gera artefatos prontos para o deploy
• Totalmente gerenciado
• CB cria uma imagem ou usa um
Docker seu
• Use comandos de build ou crie
um buildspec.yml
• Variáveis de ambiente
• 3 a 15Gb RAM
• 2 a 8 vCPUs
Diversas opções de runtime
• Base
• Android
• Java
• Python
• Ruby
• Golang
• Node.js
Aprovação automática
Source
MyAppSource
CodeCommit
Build
MyAppBuild
CodeBuild
Deploy
Stage
CodeDeploy
ValidaStage
Approval
SNS topic Lambda Function
registerDeployTest()
Lambda Function
evaluateDeploy()
DynamoDB
CloudWatch
Events (1m)
Change 1
Prod
CodeDeploy
alarmtimeusage
Dicas finais
• Objetivo: Faça seu pipeline ser seguro e confiável…
1. Identifique problemas em produção rapidamente
• Teste Continuo em Produção
2. Faça deploys seguros
• Gerencie o deployment health
• Segmentar produção é uma boa opção
3. Decida automaticamente quando lançar novas mudanças
Dicas finais
4. CI/CD é obrigatório!
• Commits frequentes
• Build para cada commit
5. Tudo que é código (aplicação, infra, documentação) vai para um
repositório
• Se não está em um repositório, não vai para prod!
6. Auto-rollback é o mecanismo mais rápido de recuperação
• Espere o rollback para depois começar o debug com logs/gráficos
Obrigado!

De 0 a DevOps

  • 1.
    De 0 aDevOps Rodando e Escalando sua Aplicação Web de Maneira Automatizada
  • 2.
  • 3.
    Software hoje emdia exige uma iteração muito mais rápida •Criação e distribuição de software nunca foi tão fácil: • Startups agora podem derrubar gigantes com pouco ou nenhum financiamento antecipado • O quão ágil você é, irá determinar sua habilidade de enfrentar tecnologias disruptivas
  • 4.
    Modelo antigo O modelode entrega de software mudou drasticamente Modelo novo
  • 5.
    Quais ferramentas vocêprecisa para ser mais ágil? • Lançar software nesse novo mundo software-driven requer certas ferramentas: • Ferramentas para gerenciar o fluxo do processo de um novo deploy • Ferramentas que testam seu código • Ferramentas que fazem o deploy da sua aplicação • De maneira automática
  • 6.
    Reality check • Deploymanual • FTP • Rsync • Janela de manutenção • Algum controle de versionamento (SVN)
  • 7.
    Source Build TestProduction Continuous integration Continuous delivery Continuous deployment As 4 fases do processo de deploy
  • 8.
    • CodeBuild • RunScope •Blazemeter As 4 fases do processo de deploy Source Build Test Production • S3 • CodeCommit • GitHub • CodeBuild • Jenkins • Solano • TeamCity • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks
  • 9.
    Algo mais simples SourceProduction • S3 • CodeCommit • GitHub • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks
  • 10.
    Elastic Beanstalk A maneiramais fácil de ter sua aplicação web rodando na nuvem de maneira escalável • Simplesmente faça um upload da sua aplicação (ZIP ou WAR) • Deploy direto do Visual Studio ou Eclipse • O EB irá criar os recursos necessários e fará o deploy • Gratuito. Pague somente pelos recursos que o EB provisionar • Versionamento e rollback • Foco em conveniência Diversas opções de deploy • Blue/Green • All at once • Rolling • Rolling with additional batch • Immutable
  • 11.
    Elastic Beanstalk Suporte adiversos ambientes • .NET (Windows/IIS) • Java • Node.js • PHP • Python • Ruby • Tomcat • Go • Packer • Glassfish • Docker • Multi-container Docker
  • 12.
    User Application Application Service HTTPService Language Interpreter Operating System Host
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
    Elastic Beanstalk Enforça melhorprática: não logue nas instâncias • Personalização através do deploy • No diretório root do seu pacote, crie um diretório .ebextensions • Dentro do diretório crie arquivos .config no formato YAML • ~/workspace/my-app/ |-- .ebextensions | |--environmentvariables.config | `-- healthcheckurl.config |-- .elasticbeanstalk | `-- config.yml |-- index.php `-- styles.css
  • 27.
    Exemplos arquivos no.ebextensions files: "/home/ec2-user/myfile" : mode: "000755" owner: root group: root source: http://foo.bar/myfile "/home/ec2-user/myfile2" : mode: "000755" owner: root group: root content: | #arquivos #conteúdos commands: python_install : command: script1.py cwd: /home/ec2-user env: varname: varname test: ”[ ! -x /usr/bin/python ]”
  • 28.
    EB + Git 1.Pelo Console, crie seu primeiro ambiente de EB 2. Baixe e instale o Git 3. Baixe e instale o EB CLI 3.0 git init git checkout nomedabranch eb use nomedoenv git add . eb deploy
  • 29.
    EB + CodeCommit 1.Baixe e instale o Git 2. Baixe e instale o EB CLI 3.0 3. Pelo Console, crie seu repositório no CodeCommit git init git add . git commit –m ”EBApp” eb init y 1 eb create myapp eb use nomedoenv –-source branch eb deploy
  • 30.
    CodeDeploy Faça deploy emqualquer instância EC2 ou on-premises • Evita downtime • Rollback automático em caso de falha • Qualquer linguagem ou SO • Integra com CodeCommit, GitHub e S3 • Foco em controle Duas opções de deploy • In-place deployment • Blue/green deployment
  • 32.
    CodeDeploy: Instalar oagent #!/bin/bash yum -y update yum install -y ruby cd /home/ec2-user curl -O https://bucket-name.s3.amazonaws.com/latest/install chmod +x ./install ./install auto <powershell> New-Item -Path c:temp -ItemType "directory" -Force powershell.exe -Command Read-S3Object -BucketName bucket-name/latest -Key codedeploy-agent.msi -File c:tempcodedeploy-agent.msi Start-Process -Wait -FilePath c:tempcodedeploy-agent.msi -WindowStyle Hidden </powershell>
  • 33.
    Exemplo de appspec.yml version:0.0 os: linux files: - source: / destination: /var/www/html permissions: - object: /var/www/html pattern: “*.html” owner: root group: root mode: 755 hooks: ApplicationStop: - location: scripts/deregister_from_elb.sh BeforeInstall: - location: scripts/install_dependencies.sh ApplicationStart: - location: scripts/start_httpd.sh ValidateService: - location: scripts/test_site.sh - location: scripts/register_with_elb.sh • Remove e adiciona instâncias do ELB • Instala dependecências • Inicializa o Apache • Confirma o deploy • E muito mais! • Envia os arquivos da aplicação oara um diretório e carquivos de configuração para outro • Configura permissões específicas em diretórios e arquivos específicos
  • 34.
    CodeDeploy + GitHub 1.https://www.youtube.com/watch?time_contin ue=20&v=N3saR9D7hq8 2. https://aws.amazon.com/blogs/devops/auto matically-deploy-from-github-using-aws- codedeploy/
  • 35.
    v2 v2 v2v2 v2 v2 Um por vez Medate Tudo de uma vez v2 v2 v2 v1 v1 v1 v2 v1 v1 v1 v1 v1 Agent Agent Dev Deployment group ou Prod Deployment group Agent AgentAgent Agent Agent Agent Velocidade e grupo do deploy
  • 36.
    V1V1 V1 V1V1 V1 V1 V1 V1 V1V2 V2 V2 V2 V2V2 V2 V2 V2 V2 Rolling deployments – sucesso Instâncias de Produção ELB
  • 37.
    V1V1 V1 V1V1 V1 V1 V1 V1 V1V2 V2 V2 V2 V2V2 Rolling deployments Production Fleet ELB Falha no Deploy
  • 38.
    4 failures –60% healthy MHH 70%, 10 hosts: V1V2 V1V1 V1 V1 V1 V1 V1 V1 V1V2 V2 V2 V2V2 V2 V2 V2 V2 Minimum healthy hosts Production Fleet ELB 1 failure – 90% healthy
  • 39.
  • 40.
    Confgure o Rollback •CodeDeploy: configure no deployment group 2 of 5 – Manage deployment health
  • 41.
    Vamos automatizar oprocesso Source Stage/Homo/Dev Aprovação Prod • S3 • CodeCommit • GitHub • Manual… por enquanto AWS CodePipeline • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks
  • 42.
    AWS CodePipeline Serviço deCI e CD da AWS. Orquestra e automatiza de ponta a ponta o seu deploy • Source: GitHub, S3 e CodeCommit • Deployment: Elastic Beanstalk, CodeDeploy e CloudFormation Ações • Source • Build • Test • Deploy • Approval • Invoke
  • 43.
    MeuApp CodeCommit/GitHub DeployemDev CodeDeploy/EB QA QA/Teste Manual CodeDeploy/EB Source Deploy em DEV Teste/Aprovação Deployem Prod Processo de release no CodePipeline Execução do Pipeline Stage Pipeline Source é alterado • Executa um pipeline; • Cria um artefato a ser usado em outras actions. Mudança
  • 44.
    Vamos automatizar oprocesso Source Build/Test Stage/Homo/Dev Aprovação Prod • S3 • CodeCommit • GitHub • Automático AWS CodePipeline • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks • CodeBuild • Jenkins • Solano • TeamCity • Elastic Beanstalk • CodeDeploy • CloudFormation • OpsWorks
  • 45.
    Build do seucódigo • Refere-se a linguagens que requerem compilação de binários: • .NET languages: C#, F#, VB.net, etc. • Java e JVM languages: Java, Scala, JRuby • Go • iOS languages: Swift, Objective-C • Também pode ser o processo de criação de imagens de containers Docker como ”build” da imagem EC2
  • 46.
    AWS CodeBuild Compila seucódigo, faz testes unitários e gera artefatos prontos para o deploy • Totalmente gerenciado • CB cria uma imagem ou usa um Docker seu • Use comandos de build ou crie um buildspec.yml • Variáveis de ambiente • 3 a 15Gb RAM • 2 a 8 vCPUs Diversas opções de runtime • Base • Android • Java • Python • Ruby • Golang • Node.js
  • 48.
    Aprovação automática Source MyAppSource CodeCommit Build MyAppBuild CodeBuild Deploy Stage CodeDeploy ValidaStage Approval SNS topicLambda Function registerDeployTest() Lambda Function evaluateDeploy() DynamoDB CloudWatch Events (1m) Change 1 Prod CodeDeploy alarmtimeusage
  • 49.
    Dicas finais • Objetivo:Faça seu pipeline ser seguro e confiável… 1. Identifique problemas em produção rapidamente • Teste Continuo em Produção 2. Faça deploys seguros • Gerencie o deployment health • Segmentar produção é uma boa opção 3. Decida automaticamente quando lançar novas mudanças
  • 50.
    Dicas finais 4. CI/CDé obrigatório! • Commits frequentes • Build para cada commit 5. Tudo que é código (aplicação, infra, documentação) vai para um repositório • Se não está em um repositório, não vai para prod! 6. Auto-rollback é o mecanismo mais rápido de recuperação • Espere o rollback para depois começar o debug com logs/gráficos
  • 51.