Você está na página 1de 85

DEV301

DevOps na AWS: Construindo Sistemas


para Entregas Rápidas

Fernando Sapata
Enterprise Solutions Architect, Amazon Web Services

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Por que estamos
aqui hoje?
https://secure.flickr.com/photos/mgifford/4525333972
Agenda

O que é DevOps?
A história de DevOps da Amazon
AWS Code Services
Serviços de DevOps da AWS
O software muda
rápidamente
Por que DevOps é importante?

5x 440x 46x 44%


Menos chances de Mais rápido entre o Deploys mais Mais tempo gasto
falhas commit e o deploy frequentes com novas
funcionalidades e
código

Fonte: Puppet 2017 State of DevOps Report


© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
O que é DevOps?
O que é DevOps?

• Filosofias culturais
• Práticas
• Ferramentas
Cultura DevOps

• Dev & Ops caminham juntos


• Sem silos
• Responsabilidade compartilhada
• Visibilidade e comunicação
Práticas DevOps

Microserviços
• Migrando de aplicações monolíticas para arquiteturas
baseadas em microserviços
Práticas DevOps

• Integração contínua
• Deploy contínuo
Práticas DevOps

Infraestrutura como código


• Defina seus recursos na AWS utilizando código
Práticas DevOps

• Monitoração e log
• Monitore e analise métricas e logs
• Compreenda o desempenho da infra-estrutura
e da aplicação em tempo real
Benefícios do DevOps

Colaboração otimizada Entrega rápida Confiabilidade

Segurança Escala Velocidade


Olhando para o
desenvolvimento
na Amazon
https://secure.flickr.com/photos/pixelthing/15806918992/
Transformação no desenvolvimento da Amazon: 2001–2009

2001 2009

Aplicações Microserviços + “two-pizza


monolíticas teams”
As coisas foram bem
melhores com este modelo,
e as equipes entregaram
mais rápido do que nunca,
mas sentimos que ainda
poderíamos melhorar.
Em 2009,
realizamos um
estudo para
descobrir onde
ainda podiam
existir ineficiências.
Nós estávamos apenas esperando

Write
code Wait Build
code Wait Deploy
to test Wait Deploy
to prod
Nós estávamos apenas esperando

Write
code Wait Build
code Wait Deploy
to test Wait Deploy
to prod

Mins Days Mins Days Mins Days Mins


Nós estávamos apenas esperando
Semanas

Write
code Wait Build
code Wait Deploy
to test Wait Deploy
to prod

Mins Dias Mins Dias Mins Dias Mins


Nós estávamos apenas esperando
Weeks

Write
code Wait Build
code Wait Deploy
to test Wait Deploy
to prod

Mins Days Mins Days Mins Days Mins


Criamos ferramentas
para automatizar nosso
processo de entrega de
software
https://secure.flickr.com/photos/lindseygee/5894617854/
Ações automatizadas e
transições; do check-in
Pipelines à produção

Benefícios:
• Mais rápido
• Mais seguro
• Simplificação e
Padronização
• Visualização do
processo
E funcionou muito bem …

Em 2014:
• Milhares de times de serviços na Amazon
• Construindo microserviços
• Utilizando entrega contínua
• Diversos ambientes (staging, beta, production)

50 milhões de deploys
E funcionou muito bem …

Todos os anos na Amazon, realizamos uma pesquisa com todos os


nossos desenvolvedores de software. Os resultados de 2014
mostraram que apenas uma ferramenta / serviço de desenvolvimento
poderia ser correlacionada estatisticamente com um desenvolvedor
mais feliz:

Nosso serviço de pipeline!

Entrega contínua = Desenvolvedores mais felizes!


Por onde começar ?
Cinco principais fases da entrega e monitoração

Source Build Test Deploy Monitor

• Faça Check in • Compile • Testes • Deploy no • Monitore a


do código • Testes integrados com ambiente de aplicação em
fonte unitários outros sistemas produção produção para
• Revisão do • Verificações de • Teste de carga identificar
novo código estilo • Testes de problemas
• Métricas de usabilidade rapidamente
código • Testes de
• Criar as vulnerabilidade
imagens do
contêiner

© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Fases do processo de release

Source Build Test Production

Integração contínua

Entrega contínua

Deploy contínuo
AWS Code services
Etapas do processo de release de software

AWS
CodeStar

Source Build Test Deploy Monitor

AWS CodeCommit AWS CodeBuild AWS CodeBuild AWS CodeDeploy AWS X-Ray
+ third party

Amazon
AWS CodePipeline CloudWatch
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
AWS DevOps portfolio
Desenvolvimento de Software Infraestrutura como código Monitoração e Log

AWS CloudFormation
AWS CodeStar AWS X-Ray

AWS CodeCommit
Amazon CloudWatch

AWS OpsWorks
AWS CodeBuild
AWS CloudTrail

AWS CodeDeploy

AWS OpsWorks for


Chef Automate AWS Config
AWS CodePipeline
Desenvolva e teste sua
aplicação

https://secure.flickr.com/photos/spenceyc/7481166880
AWS CodeBuild
Serviço de build totalmente gerenciado que compila o
código-fonte, executa testes e produz pacotes de
software

Escala continuamente e processa vários builds


simultaneamente

Você pode criar ambientes de build personalizados


utilizando imagens do Docker

Pague apenas pelos minutos dos recursos de


computação que você utilizar

Lançado com integração do AWS CodePipeline e


Jenkins
Como funciona?

1. Realiza o download do código fonte


2. Executa os commandos definidos no arquivo build
spec em contêiners temporários (são criadas novas
instâncias para cada build)
3. Envia os logs do build para a console e para o Amazon
CloudWatch logs
4. Envia os artefatos gerados para um bucket no Amazon
S3
Como automatizar o processo de build com AWS CodeBuild?

• Integrado com o AWS CodePipeline para CI/CD

• Facilmente plugável (API/CLI)

• Construa seu ambiente de build


• Crie imagens Docker com as ferramentas que precisar

• Plugin open-source para o Jenkins


• Utilize o AWS CodeBuild como worker de um Jenkins Master
Exemplo do arquivo buildspec.yml
version: 0.1

environment_variables:
plaintext:
JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64"

phases:
install:
commands:
- apt-get update -y
- apt-get install -y maven
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- echo Build started on `date`
- mvn install
post_build:
commands:
- echo Build completed on `date`
artifacts:
type: zip
files:
- target/messageUtil-1.0.jar
discard-paths: yes
Exemplo do arquivo buildspec.yml
version: 0.1

environment_variables: • Variáveis a serem utilizadas na


plaintext:
JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" fase de build
phases: • Exemplo do que pode ser feito
install:
commands: na fase de build:
- apt-get update -y • Você pode instalar pacotes ou
- apt-get install -y maven
executar commandos de
pre_build:
commands: preparação do ambiente.
- echo Nothing to do in the pre_build phase... • Executar verificações de sintaxe
build: na etapa de pre_build.
commands:
- echo Build started on `date`
• Executar o commando de build
- mvn install • Testar sua aplicação ou criar
post_build: uma imagem na etapa de
commands: post_build
- echo Build completed on `date`
artifacts:
type: zip
files: • Criar e armazenar um artefato
- target/messageUtil-1.0.jar no Amazon S3
discard-paths: yes
Realizando o build do seu código
Tipicamente o processo de build se refere a
linguagens que precisam ser compiladas:
• .NET: C#, F#, VB.net, etc.
• Java e JVM: Java, Scala, JRuby
• Go
• iOS: Swift, Objective-C

Também nos referimos ao processo de criação


de imagens do Docker como build EC2
E se não precisar realizar o build …

Diversas linguagens não precisam de build. Elas


são consideradas linguagens interpretadas:
• PHP
• Ruby
• Python
• Node.js EC2

Você simplesmente realiza o deploy do seu código


Testando seu código

O teste é uma ciência e uma forma de arte!

Objetivos para testar seu código:


• Garantir a funcionalidade desejada
• Capturar erros de sintaxe
• Padronizar o código
• Reduzir erros devido a falhas de lógica
• Tornar as aplicações mais seguras
Onde focar os testes

UI 10%

Service 20%

Unit 70%
Qual serviço e etapa do processo de release corresponde a quais testes?

UI

Test
Service
Third-party
tooling

Build
Unit AWS CodeBuild
Preço

• Pague pelos minutos


• Três tipos de instâncias diferentes (CPU e memória)

Compute instance type Memory (GB) vCPU Price per build minute ($)
build.general1.small 3 2 0.005
build.general1.medium 7 4 0.010
build.general1.large 15 8 0.020

• 100 minutos grátis da instância build.general1.small

*As of May 25, 2018


Realizando o Deploy
de sua aplicação

https://secure.flickr.com/photos/simononly/15386966677
AWS CodeDeploy
Automatiza implantações de código em
qualquer instância

Lida com a complexidade de atualizar as


aplicações

Previne indisponibilidade durante o deploy

Realiza a volta automática em caso de falha

Deploy no Amazon EC2 ou servidores on-


premises, em qualquer linguagem e qualquer
sistema operacional

Integra-se com ferramentas de terceiros e AWS


Exemplo do arquivo 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
Exemplo do arquivo appspec.yml
version: 0.0
os: linux
files: • Envia arquivos da aplicação
- source: / para um diretório e os de
destination: /var/www/html configuração para outro
permissions:
- object: /var/www/html
pattern: “*.html” • Define permissões específicas
owner: root em diretórios e arquivos
group: root
mode: 755
hooks:
ApplicationStop:
- location: scripts/deregister_from_elb.sh • Remove / adiciona instâncias
BeforeInstall: ao Elastic Load Balancing
- location: scripts/install_dependencies.sh • Instala pacotes de
ApplicationStart:
dependências
- location: scripts/start_httpd.sh
ValidateService: • Inicia o Apache
- location: scripts/test_site.sh • Confirma o sucesso do deploy
- location: scripts/register_with_elb.sh
Escolha a velocidade e o grupo de implantação
Dev deployment group

Um por vez
v2 v1 v1 v1 v1 v1 Agent Agent

OR
Metade por vez Prod deployment group

v2 v2 v2 v1 v1 v1
Agent Agent Agent

Todos de uma vez


v2 v2 v2 v2 v2 v2 Agent Agent Agent
Orquestrando o Build e o
Deploy com um Pipeline

https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/
AWS CodePipeline
Serviço de entrega contínua para atualizações
rápidas e confiáveis de aplicações

Modele e visualize seu processo de release de


software

Realiza o build, testes, e deploy do código


sempre que ocorrer uma alteração

Integra-se com ferramentas de terceiros e


AWS
AWS CodePipeline
MyApplication
Source

Source
GitHub

Build
Stage
AWS CodeBuild Pipeline
AWS CodeBuild Action

Transition
Deploy
JavaApp
AWS Elastic
Beanstalk
AWS CodePipeline
MyApplication
Source

Source
GitHub

Build

AWS CodeBuild Notify Developers


AWS CodeBuild AWS Lambda

Parallel actions
Deploy

JavaApp
Elastic Beanstalk
AWS CodePipeline
MyApplication
Source

Source
GitHub

Build

AWS CodeBuild NotifyDevelopers


AWS CodeBuild Lambda
Sequential actions
Test API
Runscope

Deploy

JavaApp
Elastic Beanstalk
AWS CodePipeline
MyApplication
Build
AWS CodeBuild
AWS CodeBuild

Staging-Deploy

JavaApp
Elastic Beanstalk

QATeamReview
Manual Approval
Manual approvals
Review

Prod-Deploy
JavaApp
Elastic Beanstalk
AWS CodeCommit
Repositório de código Git seguro, gerenciado e
escalável

Use ferramentas no padrão do Git

Escalabilidade, disponibilidade, e durabilidade do


Amazon S3

Criptografia em repouso com chaves do cliente

Repositório sem limite de tamanho

Gatilhos de pós commit para chamar o Amazon SNS


ou Lambda
Controle de códigos fonte na nuvem

Seguro Gerenciado Altamente Armazene


Disponível qualquer objeto
AWS CodeCommit

Objetos Git no
Amazon S3

Índice Git no
Amazon DynamoDB
SSH or HTTPS

Git pull/push AWS CodeCommit Chaves de criptografia


no AWS KMS
A mesma experiência do Git
$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
Cloning into 'aws-cli'...
Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (9900/9900), done.
Checking connectivity... done.
$ nano README.rst
$ git commit -am 'updated README'
[master 4fa0318] updated README
1 file changed, 1 insertion(+)
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote:
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
4dacd6d..4fa0318 master -> master
Preço
AWS CodeCommit
$1 por usuário ativo por mês (primeiros 5 usuários grátis)

AWS CodePipeline
$1 por pipeline ativo por mês (primeiro grátis)

AWS CodeDeploy
Grátis para deploy no Amazon EC2
$0.02 por atualização em servidores on-premises

AWS CodeBuild

Compute Instance Memory(GB) vCPU Price per build minute


Type ($)
Small 3 2 0.005
Medium 7 4 0.010
Large 15 8 0.020
AWS CodeStar
• Desenvolva, crie e implante
aplicativos rapidamente na AWS
• Comece a desenvolver na AWS em
minutos
• Trabalhe em toda a sua equipe, com
segurança
• Gerencie facilmente a entrega de
software
• Escolha entre uma variedade de
modelos de projetos
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
AWS CodeStar
Templates de projeto para Amazon EC2, Lambda, e Elastic Beanstalk
Selecione a ferramente de versionamento de código
AWS CodeStar
Ferramentas de entrega continua pré-configuradas
AWS CodeStar
Conecte facilmente sua IDE preferida
AWS CodeStar
Configure o acesso de toda a equipe em apenas alguns cliques
AWS CodeStar
Painel unificado – Gerenciamento de fluxos de entrega e problemas
AWS CodeStar
Painel unificado – Monitoração da aplicação e histórico de commits
AWS X-Ray
Debug tradicional

Developer Local test

Add Add log


Developer breakpoints statements

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Arquiteturas monolíticas x orientadas a serviços

Monolíticas Orientada a serviços

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
O processo tradicional de depuração não é efetivo para
aplicações em produção ou aplicações que utilizam
arquiteturas orientadas a serviços, de microserviços ou
serverless.

É cansativo, repetitivo e demorado,


exigindo mais tempo dos times de DevOps na depuração.

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Como o X-Ray pode ajudar?

Identifica gargalos Aponta falhas Identifica erros Identifica o impacto


de performance específicas para os usuários

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Serviço X-Ray

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Fluxo do X-Ray

X-Ray console
DevOps team HTTPS

Local host
UDP
HTTPS HTTPS
Loca lhost
UDP App & X-Ray
SDK
App & X-Ray X-Ray API
SDK
X-Ray
AWS
X-Ray daemon
credentials
EC2 role daemon
On-premises server
EC2 Instance/Containers/Lambda

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
X-Ray SDK
Disponível para Java, .NET, .NET Core, Python, Ruby, Go, & Node.js

Adiciona filtros automaticamente para capturar chamadas:


 Serviços AWS através do AWS SDK
 Serviços non-AWS sobre HTTP e HTTPS
 Bancos de Dados (MySQL, PostgreSQL, e Amazon DynamoDB)
 Filas (Amazon SQS)

Permite que você inicie rapidamente sem precisar instrumentar


manualmente o código da aplicação.
Código Fonte no GitHub https://github.com/aws?q=xray-sdk

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Processo do X-Ray
Recebe os dados do SDK utilizando UDP e salva em um buffer local.
Os dados são enviados para o backend a cada segundo ou quando o
buffer local estiver cheio

Disponível para Amazon Linux AMI, RHEL, Ubuntu, macOS, e


Windows.

Pré-instalado no Lambda.

Pode ser executado em qualquer lugar, desde que as credenciais da


AWS sejam fornecidas (por exemplo, Amazon EC2, Amazon ECS,
máquina de desenvolvedor e outras).
Código fonte no https://github.com/aws/aws-xray-daemon
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Links Úteis
Acesse https://aws.amazon.com/xray para saber mais
Documentação: http://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html

Exemplos:
 .NET: https://github.com/awslabs/aws-xray-dotnet-webapp
 Java: https://github.com/awslabs/eb-java-scorekeep/tree/xray
 Node.js: https://github.com/awslabs/eb-node-express-sample/tree/xray
 Python: https://github.com/awslabs/eb-py-flask-signup/tree/xray
 Lambda: https://github.com/awslabs/aws-xray-rekognition-lambda-sample
 Alarms & alerts: https://github.com/aws-samples/aws-xray-cloudwatch-event
 Latency trends: https://github.com/aws-samples/aws-xray-scatter-sample

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
AWS Cloud9
Ambiente de desenvolvimento integrado
baseado em nuvem (IDE)
Permite você escrever, executar, e depurar
seu código somente com o browser
Compartilhe seu ambiente com a equipe para
colaboração em tempo real
Acesso direto ao terminal
Fornece ótima experiência no
desenvolvimento serverless: permite testes
locais e pré-configura o ambiente de
desenvolvimento com todos os SDKs,
bibliotecas e plugins
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Editor completo

© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Ampla seleção de Run Times
Depuração completa

© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Ferramentas integradas para desenvolvimento Serverless
Entrega Contínua: Aplicações Serverless
AWS CodeStar

AWS
CodePipeline

Author Source repository Build Deploy Monitor

AWS AWS AWS X-Ray


AWS Cloud9 CodeCommit CodeBuild AWS Lambda

Or And
/ Or Amazon
CloudWatch
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Entrega Contínua: Containers

Amazon ECR

AWS
CodePipeline
Source
repository Build Deploy

AWS AWS Amazon ECS


CodeCommit CodeBuild
Or Or

© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Please complete the session survey in the
summit mobile app.

© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Submit Session Feedback
1. Tap the Schedule icon. 2. Select the session 3. Tap Session Evaluation
you attended. to submit your feedback.

Obrigado!

Você também pode gostar