Webinar: Introdução à Distribuição Contínua na AWS

Post on 07-Jan-2017

549 views 1 download

Transcript of Webinar: Introdução à Distribuição Contínua na AWS

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Paulo Miguel AlmeidaArquiteto Soluções

20 de julho de 2016

DevOps na AWS:

Introdução a entrega contínua na AWS

https://secure.flickr.com/photos/mgifford/4525333972

Por que

estamos aqui

hoje?

A velocidade de desenvolvimento esta crescendo rapidamente

A criação e a distribuição de software estão mais fáceis e

mais rápidas do que nunca:

• As startups agora podem competir com gigantes com

pouco ou nenhum investimento.

• Colocar seu software nas mãos de milhões de pessoas

está a um download de distância

Antigo modelo de fornecimento

de software

O modelo de distribuição de software mudou bastante

Novo modelo de fornecimento de

software

Quais ferramentas são necessárias alcançar isso?

Disponibilizar software nesse novo cenário voltado para entrega de

software requer muitas coisas:

• Ferramentas para gerenciar o fluxo do processo de entrega de

desenvolvimento de software.

• Ferramentas para testar e inspecionar devidamente

o código quanto suas falhas e possíveis problemas.

• Ferramentas para deploy (implantar) suas aplicações.

Primeiro, precisamos

entender um pouco mais

sobre os processos de

entrega de softwarehttps://www.flickr.com/photos/jurvetson/5201796697/

• Testes de

integração com

outros sistemas

• Testes de carga

• Testes de

interface do

usuário

• Pen test

Processos de entrega têm quatro fases principais

Código Construção Teste Produção

• Desenvolver

código-fonte

como arquivos

.java.

• Revisar o novo

código

• Compilar

o código

• Testes de

unidade

• Verificadores

de estilo

• Métricas de

código

• Criar imagens

de contêiner

• Implantação em

ambientes de

produção

Níveis dos processos de entrega

Código Construção Teste Produção

Integração contínua

Entrega contínua

Implantação contínua

Níveis dos processos de liberação

Código Construção Teste Produção

Integração contínua

Implantação contínua

Entrega contínua

Nosso foco hoje

Benefícios da entrega contínua

Melhorar

a produtividade do

desenvolvedor

Encontrar e resolver

bugs rapidamente

Fornecer atualizações

com mais rapidez

Automatizar o processo

de entrega de software

Considerações sobre

o desenvolvimento

na Amazon...

https://secure.flickr.com/photos/pixelthing/15806918992/

2001

Transformação do desenvolvimento na Amazon: 2001-2009

2009

aplicação

monolítico + equipesmicro serviços + equipes de 2 pizzas

Tudo melhorou muito

com esse modelo

e as equipes estavam

desenvolvendo

funcionalidades mais

rápido do que nunca,

mas sentimos que ainda

podíamos melhorar.

Em 2009,

realizamos um

estudo para

identificar onde

ainda poderia

haver ineficiências

Ficamos somente esperando.

EsperarEscrever

código EsperarConstrução

código EsperarImplantar para testar

Implantar para

produção

Ficamos somente esperando.

EsperarEscrever

código EsperarConstrução

código EsperarImplantar para testar

Implantar para

produção

Min. Dias Min. Dias Min. Dias Min.

Ficamos somente esperando.

EsperarEscrever

código EsperarConstrução

código EsperarImplantar para testar

Implantar para

produção

Semanas

Min. Dias Min. Dias Min. Dias Min.

Ficamos somente esperando.

EsperarEscrever

código EsperarConstrução

código EsperarImplantar para testar

Implantar para

produção

Semanas

Min Dias Min Dias Min Dias Min

Criamos ferramentas

para automatizar nosso

processo de entrega de

softwarehttps://secure.flickr.com/photos/lindseygee/5894617854/

Ações e transições automatizadas; do início até a produção

Benefícios de desenvolvimento:

• Mais rápido

• Mais seguro

• Consistente e padronizado

• Visualização do processo

Pipelines

Serviço de entrega contínua para atualizações

de aplicativo rápidas e confiáveis

Elabore e visualize seu processo de entrega

de software

Cria, testa e implanta seu código sempre que

há uma alteração de código

Integra-se a ferramentas de terceiros e da AWS

AWS CodePipeline

Benefícios do AWS CodePipeline

Fluxo de trabalho

configurável

Fácil de integrar Melhora a qualidade

das entregas

Entrega rápida Comece a usar

rapidamente

Código

Código

GitHub

Construção

JenkinsOnEC2

Jenkins

Implantação

JavaApp

Elastic Beanstalk

EstruturaEstágio

Ação

Transição

CodePipeline

MyApplication

Código

Código

GitHub

Construção

JenkinsOnEC2

Jenkins

Implantação

JavaApp

Elastic Beanstalk

Notificar_Devs

Lambda

CodePipeline

MyApplication

Ações paralelas

Código

Código

GitHub

Construção

JenkinsOnEC2

Jenkins

Implantação

JavaApp

Elastic Beanstalk

Notificar_Devs

Lambda

TesteAPI

Runscope

CodePipeline

MyApplication

Ações sequenciais

8. Recuperar artefato

construído

Instância do EC2

CodePipeline

Código

Código

GitHub

Construção

JenkinsOnEC2

Jenkins

Implantação

JavaApp

Elastic Beanstalk

Artefato de origem

S3

Criar artefato

S3

5. Obter artefato

de origem

1. Obter alterações

6. Armazenar artefato

construído

3. Satisfazer tarefa

4. Confirmar tarefa

7. Realizar com êxito

9. Implantar artefato

construído

Elastic Beanstalk

Contêiner da Web

Aplicativo

Java

MyApplication

Temos uma boa lista de parceiros, que está crescendo

Código Construção Teste Implantação

Integrações de serviços da AWS

Código Invocar lógica Implantar

AWS Elastic BeanstalkAmazon S3

AWS CodeDeploy

AWS Lambda

AWS CodeCommit

Criando seu processo de

entrega contínua de com

o AWS Pipeline

https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/

Construindo e testando

seu aplicativo

https://secure.flickr.com/photos/spenceyc/7481166880

Construção/Compilação do código

“Construir” o código normalmente envolve

linguagens que precisam ser compiladas:

• Linguagens .NET: C#, F#, VB.net etc.

• Linguagens que rodam em cima de uma JVM:

Java, Scala, JRuby

• Go

• Linguagens: iOS: Swift, Objective-C

Também chamamos o processo de criação de

imagens do contêiner de Docker de ”construção" da

imagem.EC2

Caso onde compilar não é necessário

Muitas linguagens não precisam de criação. Elas

são consideradas linguagens interpretadas:

• PHP

• Ruby

• Python*

• Node.js*

Você pode simplesmente implantar seu código!EC2

Testando seu código

O teste é tanto uma ciência quanto uma forma de

arte!

Objetivos do teste do código:

• Confirmar a funcionalidade desejada

• Identificar erros de sintaxe de programação

• Padronizar formato e padrões de código

• Reduzir bugs decorrentes do uso indesejado do

aplicativo e falhas lógicas

• Deixar os aplicativos mais seguros

Implantação de

aplicações

https://secure.flickr.com/photos/simononly/15386966677

Automatiza as implantações de código em

qualquer instância

Lida com a complexidade da atualização dos

aplicativos

Evite o tempo de indisponibilidade durante

a implantação da aplicação.

Funciona com Amazon EC2 ou em

servidores locais, em qualquer linguagem e

em qualquer sistema operacional

Integra-se a ferramentas de terceiros

e da AWS

AWS CodeDeploy

Exemplo de appspec.ymlversion: 0.0os: linuxfiles:

- source: /destination: /var/www/html

permissions:- object: /var/www/html

pattern: “*.html”owner: rootgroup: rootmode: 755

hooks:ApplicationStop:

- location: scripts/deregister_from_elb.shBeforeInstall:

- location: scripts/install_dependencies.shApplicationStart:

- location: scripts/start_httpd.shValidateService:

- location: scripts/test_site.sh- location: scripts/register_with_elb.sh

Exemplo de appspec.ymlversion: 0.0os: linuxfiles:

- source: /destination: /var/www/html

permissions:- object: /var/www/html

pattern: “*.html”owner: rootgroup: rootmode: 755

hooks:ApplicationStop:

- location: scripts/deregister_from_elb.shBeforeInstall:

- location: scripts/install_dependencies.shApplicationStart:

- location: scripts/start_httpd.shValidateService:

- location: scripts/test_site.sh- location: scripts/register_with_elb.sh

• Remover/adicionar instância ao

ELB

• Instalar pacotes de dependência

• Iniciar Apache

• Confirmar implantação bem-

sucedida

• Mais!

• Enviar arquivos do aplicativo para

um diretório

e os arquivos de configuração

para outro

• Definir permissões específicas

em diretórios

e arquivos específicos

v2 v2 v2 v2 v2 v2

um de cada vez

metade de cada vez

tudo de uma vez

v2 v2 v2 v1 v1 v1

v2 v1 v1 v1 v1 v1 Agente Agente

Grupo de implantação de

desenvolvimento

OUGrupo de implantação de produção

Agente

AgenteAgente

Agente Agente

Agente

Escolher velocidade e grupo de implantação

https://www.flickr.com/photos/spacex/16510243060/

Implantação em

produção

Implantação em produção

Depois de criar e testar o código e passar por

algumas implantações de pré-produção,

é hora de passar para o mundo real!

Convém pensar sobre:

• Impacto para os clientes

• Impacto para a infraestrutura

• Impacto para a empresa

Como podemos acompanhar isso

e comunicar as implantações?

Usando ações personalizadas o AWS CodePipeline

Atualizar tickets Provisionar recursos

Atualizar painéis

Testes em

dispositivos móveis

Enviar notificações Verificação de

segurança

Qual método de extensão devo usar?

Lambda Ação personalizada

Tarefas curtas são fáceis de criar É possível executar qualquer tipo de

tarefas

As tarefas longas envolvem mais

trabalho

Controle sobre os links exibidos no

console

Suporte para Node.js, Python e Java Suporte para qualquer linguagem

Executado na AWS Pode ser executado em ambiente on-

premises

Nenhum servidor para provisionar ou

gerenciar

Requer recursos de computação

FIN, ACK

Vimos um breve resumo hoje dos benefícios da entrega contínua para

o nosso processo de entrega de software:

• A integração contínua (construção/teste) ajuda a diminuir muito o

ciclo de feedback

• Podemos disponibilizar o software para os usuários com muito mais

rapidez

• Melhorias na qualidade do software através da automação de

processos.

• O CodePipeline permite a integração com praticamente qualquer

serviço ou ferramenta que se possa imaginar!

• Maior visualização do que está acontecendo!

Experimente hoje mesmo

Experimente o CodePipeline e aproveite uma estrutura

completa de fornecimento contínuo usando o Starter Kit

bit.ly/AWSCodeStarterKit

Recursos para saber mais:• Integração contínua: https://aws.amazon.com/devops/continuous-integration/

• Entrega contínua: https://aws.amazon.com/devops/continuous-delivery/

• CodePipeline

• https://aws.amazon.com/codepipeline/

• https://aws.amazon.com/documentation/codepipeline/

• CodeDeploy

• https://aws.amazon.com/codedeploy/

• https://aws.amazon.com/documentation/codedeploy/

• https://github.com/awslabs/aws-codedeploy-samples

• Code Services Starter Kit: http://bit.ly/AWSCodeStarterKit

Aguarde porque ainda tem muito mais!

Obrigado!