Infraestrutura como Código – 3ª Edição
Projetando e distribuindo sistemas dinâmicos para a era da computação em nuvem
Descrição do livro
Na década passada, a nuvem e a Infraestrutura como Código saíram dos bastidores da TI e das startups para se tornarem algo do mundo convencional. Muitas organizações se apressaram para adotar novas tecnologias como parte de sua transformação em empresas digitais, gerando a proliferação de bases de código de infraestrutura difíceis de manter. Agora há a necessidade de consolidar os sistemas baseados em nuvem em alicerces maduros para o crescimento sustentável.
Neste livro, Kief Morris descreve padrões e práticas para a construção e a evolução da Infraestrutura como Código. A terceira edição atualizada fornece um contexto mais amplo para a infraestrutura, explicando como ela deve ser projetada e implementada para suportar os objetivos e desafios estratégicos de uma empresa, como manter-se crescendo sem deixar de, ao mesmo tempo, gerenciar melhor os custos.
O livro aborda:
• Conceitos básicos, incluindo a exploração de linguagens de infraestrutura declarativas e procedurais
• Arquitetura de infraestrutura, com base em lições aprendidas com o design e a engenharia de softwares para a construção de bases de código de infraestrutura que possam ser melhorados
• Padrões para a construção de uma infraestrutura que suporte serviços de plataforma nos complexos e diversificados cenários dos sistemas de TI do mundo real
• Fluxos de trabalho e modelos operacionais que combinam automação e nuvem com abordagens inovadoras como o desenvolvimento ágil e DevOps
Ver menos ▲Sumário
- Prefácio
- Parte I: Fundamentos
- Capítulo 1: O que é Infraestrutura como Código?
- Infraestrutura como Código
- Da Idade do Ferro à Era da Computação em Nuvem
- Abordagens da Era da Computação em Nuvem para a gestão de mudanças
- O caminho para a Era da Computação em Nuvem
- Objetivos estratégicos e Infraestrutura como Código
- Objetivos de arquitetura do sistema e Infraestrutura como Código
- Use a Infraestrutura como Código para otimizar a mudança
- Mito: a infraestrutura não muda com muita frequência
- Mito: podemos construir a infraestrutura primeiro e automatizá-la depois
- Mito: a velocidade e a qualidade são intercambiáveis
- As quatro métricas essenciais
- Práticas essenciais para a Infraestrutura como Código
- Definir tudo como código
- Testar e entregar continuamente todo o trabalho em andamento
- Construir partes pequenas e simples que possam ser alteradas independentemente
- Conclusão
- Capítulo 2: Princípios da infraestrutura de nuvem
- Presuma que os sistemas não são confiáveis
- Torne tudo reproduzível
- Evite sistemas floco de neve
- Crie itens descartáveis
- Reduza a variação
- Assegure-se de que qualquer procedimento possa ser repetido
- Aplique princípios de design de software ao código da infraestrutura
- Conclusão
- Capítulo 3: Plataformas de infraestrutura
- Plataformas de infraestrutura
- Recursos de infraestrutura
- IaaS no data center
- Multinuvem
- Plataformas de engenharia
- Serviços de plataforma
- Fornecendo funcionalidade de serviço de plataforma
- Serviços de entrega de plataforma
- Serviços de entrega de aplicação
- Serviços de entrega de infraestrutura
- Serviços de gerenciamento de plataforma
- Conclusão
- Capítulo 4: Ferramentas e linguagens de Infraestrutura como Código
- Codificando infraestrutura
- Indo além do scripting baseado em tarefas
- Entendendo o que você pode definir como código
- Código ou configuração?
- Definindo configuração como código
- Gerenciando seu código em um repositório de código-fonte
- Processamento de código de infraestrutura
- Sabendo quando o código é executado
- Processando e implantando código de infraestrutura
- Visualizando alterações
- Rastreando a execução do código de infraestrutura
- Gerenciando o estado da infraestrutura
- Ferramentas de Infraestrutura como Código
- Tipos de linguagens para codificação de infraestrutura
- Código procedural e idempotente
- Linguagens e ferramentas imperativas e declarativas
- Linguagens específicas de domínio e de uso geral
- Linguagens de baixo nível e de alto nível
- Infraestrutura a partir de Código
- Conclusão
- Parte II: Design
- Capítulo 5: Princípios de design para a Infraestrutura como Código
- Considerações de design para a Infraestrutura como Código
- Propriedades CUPID do design
- Coesão e acoplamento
- Provedores, consumidores e interfaces
- Gerenciamento de interfaces entre componentes
- Uso de interfaces para componentização
- Design nos estágios do ciclo de vida do código de infraestrutura
- Fatores de design
- Fatores de design para código-fonte
- Fatores de design para o empacotamento e a implantação de infraestrutura
- Fatores de design para runtime
- Fatores de design entre os estágios do ciclo de vida
- Conclusão
- Capítulo 6: Componentes de infraestrutura
- Os componentes da infraestrutura
- O começo do design da infraestrutura: workloads
- Composições de infraestrutura
- Pilhas de implantação de infraestrutura
- Bibliotecas de código de infraestrutura
- Bibliotecas como pilhas implantáveis
- Compartilhamento e reutilização de código de infraestrutura
- Compartilhando componentes do código de infraestrutura
- Compartilhando código de pilha entre várias instâncias
- Compartilhando instâncias de pilha entre workloads
- Design de infraestrutura orientado por aplicações
- Design horizontal
- Design vertical
- Infraestrutura compartilhada incluída no design vertical
- Design de infraestrutura orientado por aplicações de referência
- Fluxo de trabalho do design
- Conclusão
- Capítulo 7: Projetando pilhas de infraestrutura implantáveis
- Padrões para o dimensionamento e a estruturação de pilhas
- Full System Stack
- Monolithic Stack
- Application Group Stack
- Single Service Stack
- Micro Stacks
- Shared Stack
- Padrões de pilha para múltiplas instâncias de infraestrutura
- Multi-Environment Stack
- Snowflakes as Code
- Reusable Stack
- Conclusão
- Capítulo 8: Configurando instâncias de pilha de infraestrutura
- Conceitos-chave
- Use parâmetros de pilha para criar identificadores únicos
- Mantenha os parâmetros simples
- Exemplo de pilha
- Padrões para a configuração de pilhas
- Configuration in Code
- Manual Stack Parameters
- Stack Environment Variables
- Scripted Parameters
- Stack Configuration Files
- Deployment Wrapper Stack
- Pipeline Stack Parameters
- Stack Parameter Registry
- Implementando um registro de configuração
- Registros integrados de ferramentas de automação de infraestrutura
- Registros de configuração empacotados independentes
- Serviços de registro de plataforma de IaaS
- Seu próprio registro de configuração
- Registros de configuração únicos ou múltiplos
- Manipulando segredos
- Gerenciando segredos
- Armazenando segredos em arquivos criptografados
- Usando um serviço de armazenamento de segredos
- Injetando segredos no runtime
- Conclusão
- Capítulo 9: Integrando pilhas de infraestrutura
- Exemplo de pilhas de implantação de infraestrutura
- Padrões de descoberta de recursos
- Resource Matching
- Stack State Lookup
- Integration Registry Lookup
- Implementando a descoberta de recursos
- Implementando a descoberta no código da pilha
- Usando a injeção de dependências
- Gerenciando dependências em um script de implantação
- Integrando pilhas com uma composição
- Conclusão
- Capítulo 10: Projetando bibliotecas de código de infraestrutura
- Facade Module
- Também conhecido como
- Motivação
- Aplicabilidade
- Consequências
- Implementação
- Padrões relacionados
- Obfuscation Module
- Motivação
- Aplicabilidade
- Consequências
- Implementação
- Padrões relacionados
- Unshared Module
- Motivação
- Aplicabilidade
- Consequências
- Implementação
- Bundle Module
- Motivação
- Aplicabilidade
- Consequências
- Implementação
- Padrões relacionados
- Spaghetti Module
- Motivação
- Consequências
- Implementação
- Padrões relacionados
- Infrastructure Domain Entity
- Motivação
- Aplicabilidade
- Implementação
- Padrões relacionados
- Stack Module
- Também conhecido como
- Motivação e Aplicabilidade
- Implementação
- Modular Monolith
- Motivação
- Consequências
- Implementação
- Padrões relacionados
- Conclusão
- Capítulo 11: Construindo servidores como código
- Definindo servidores
- O que há em um servidor
- De onde vêm os elementos
- Código de configuração do servidor
- Roles de servidor
- Criando e provisionando uma nova instância de servidor
- Criando um servidor usando provisionamento de rede
- Criando um servidor de IaaS manualmente
- Criando um servidor como parte de uma pilha
- Criando um servidor a partir de um evento
- Configurando uma nova instância de servidor
- Fazendo o baking de imagens e o frying de instâncias
- Configuração pull com scripts de inicialização
- Configuração push com comandos externos
- Atualizando e alterando servidores
- Push on Change
- Sincronização de configuração contínua
- Alterando servidores por substituição
- Servidor imutável
- Construindo imagens de servidor
- Clonagem a quente de um servidor existente
- Inicializando um instalador de sistema operacional
- Modificando uma imagem padrão
- Orquestrando a construção de imagens
- Conclusão
- Capítulo 12: Projetando ambientes
- Arquiteturas multiambiente
- Múltiplos ambientes de entrega
- Divisão de ambientes para alinhamento
- Alinhando os ambientes à arquitetura do sistema
- Alinhando os ambientes à estrutura organizacional
- Alinhando os ambientes a preocupações de governança
- Múltiplas réplicas de ambiente
- Projetando ambientes para cenários de operabilidade
- Distribuindo ambientes geograficamente
- Replicando ambientes para bases de usuários
- Camadas de implementação de ambientes
- Utilizando os fatores de design para escolher a camada de implementação de ambiente
- Testando e entregando alterações na infraestrutura do ambiente
- Grupos de recursos de IaaS e os ambientes
- Ambientes com várias pilhas
- Conclusão
- Capítulo 13: Fornecendo infraestrutura de runtime de aplicação
- Design de infraestrutura orientado pela aplicação
- Plataformas de runtime de aplicação
- Servidores como código
- Clusters de servidores como código
- Clusters de aplicações como código
- Infraestrutura de aplicação serverless
- Topologias de cluster
- Vários ambientes em um único cluster
- Um cluster por ambiente
- Vários clusters por ambiente
- Clusters entre ambientes
- Conclusão
- Parte III: Entrega
- Capítulo 14: Fluxos de trabalho básicos de entrega de infraestrutura
- Princípios de entrega contínua para a Infraestrutura como Código
- Automatize o processo inteiro
- Só faça alterações usando o processo automatizado
- Assegure-se de que os ambientes sejam consistentes
- Entregue alterações de maneira abrangente
- Mantenha os ciclos de entrega curtos
- Mantenha todo o código pronto para a produção
- Assegure-se de que o código e os recursos implantados sejam consistentes
- Reduza a interrupção ao implantar alterações
- Fluxo de trabalho básico para entrega de infraestrutura
- Estágio de desenvolvimento
- Estágio de build
- Estágios de teste
- Estágio de lançamento
- Estágio de execução
- Ciclos do fluxo de trabalho
- Fluxos de trabalho e topologias de equipe para a entrega de software e infraestrutura
- Equipes de gerenciamento de instância de infraestrutura
- Equipe de infraestrutura full stack
- Equipe facilitadora de infraestrutura
- Medindo a eficácia da entrega de infraestrutura
- Conclusão
- Capítulo 15: Construindo e distribuindo Infraestrutura como Código
- Estágio de build: preparando para distribuição
- Etapas de processamento de código para construção e implantação
- Fluxo de trabalho de construção na implantação
- Fluxo de trabalho construir uma vez, implantar muitas
- Empacotando ou bloqueando dependências
- Pull requests e desenvolvimento baseado em tronco
- Distribuição de código de infraestrutura
- Distribuindo branches de código como artefatos
- Distribuindo pacotes de pilha como artefatos
- Distribuindo bibliotecas como artefatos
- Fluxos de trabalho de integração
- Fan-in: integrando componentes durante a entrega
- Federação: integrando componentes no runtime
- Monorepo: integrando componentes no build
- Pré-teste de infraestrutura
- Equipes de serviço de infraestrutura
- Infraestrutura compartilhada como serviço
- Provisionando uma instância de infraestrutura sob demanda
- Fornecendo infraestrutura implantável como componente
- Várias equipes de plataforma de infraestrutura
- Conclusão
- Capítulo 16: Implementando a entrega de infraestrutura com pipelines
- Organizando projetos em um codebase
- Organizando projetos de build e repositórios
- Organizando os tipos de código
- Trabalhando em código localmente
- Emuladores locais de IaaS
- Ambientes pessoais de Iaas
- Ambiente na medida certa
- Projetando pipelines de entrega de infraestrutura
- Conteúdo de um estágio de pipeline
- Ações de um estágio de pipeline
- Contexto de um estágio de pipeline
- Softwares e serviços do pipeline de entrega
- Usando scripts de orquestração de entrega
- Conclusão
- Capítulo 17: Estratégia de teste para código de infraestrutura
- Por que testar continuamente o código de infraestrutura?
- O que significa testar continuamente
- Teste imediato e teste eventual
- O que devemos testar na infraestrutura?
- Desafios do teste de código de infraestrutura
- Geralmente os testes para código declarativo têm baixo valor
- Geração de código para teste de unidade
- É lento testar código de infraestrutura
- As dependências dificultam testar a infraestrutura
- Teste progressivo
- Pirâmide de testes
- Modelo de teste do queijo suíço
- Testando na produção
- O que você não pode replicar fora da produção
- Gerenciando os riscos dos testes na produção
- Conclusão
- Capítulo 18: Implementação do teste de código de infraestrutura
- Estágios de teste offline para pilhas
- Verificação de sintaxe
- Análise de código estática offline
- Análise estática de código conectada
- Verificações da cadeia de suprimentos
- Emuladores locais de infraestrutura
- Use test fixtures para manipular dependências
- Use test fixtures para substituir provedores
- Use test fixtures para substituir consumidores
- Refatore os componentes para que eles possam ser isolados
- Estágio de teste online para pilhas
- Visualização: vendo quais alterações serão feitas
- Verificação: fazendo asserções sobre recursos de infraestrutura
- Resultados: comprovando se a infraestrutura funciona corretamente
- Ciclos de vida da instância de teste
- Persistent Test Stack
- Ephemeral Test Stack
- Dual Persistent and Ephemeral Stack Stages
- Periodic Stack Rebuild
- Continuous Stack Reset
- Orquestração de testes
- Considere usar ferramentas de orquestração de testes
- Suporte ao teste local
- Evite um acoplamento forte nas ferramentas de pipeline
- Conclusão
- Capítulo 19: Implantando infraestrutura
- Entendendo as estratégias de implantação de software
- Implantação push para software
- Implantação pull para software
- Implantação GitOps para software
- Usando estratégias de implantação de infraestrutura
- Implantação de infraestrutura isolada
- Descritor de infraestrutura de aplicação
- Infraestrutura a partir de código
- Executando implantações de infraestrutura
- Implantando o código de infraestrutura a partir do seu computador
- Implantando a partir de um serviço central
- Implantando a partir de um pipeline de entrega
- Usando um serviço de implantação de código de infraestrutura
- Infraestrutura como dados
- Scripts de implantação de infraestrutura
- Acionando implantações de infraestrutura
- Usando materiais de entrada para a implantação
- Acionando a implantação manualmente
- Acionando a implantação automaticamente
- Implementando gatilhos
- Conclusão
- Capítulo 20: Alterando a infraestrutura existente
- Alterando um sistema de forma incremental
- Divida uma alteração em incrementos
- Manipule alterações incompletas
- Alterando com segurança a infraestrutura da produção
- Remapeamento manual da infraestrutura na produção
- Remapeie a infraestrutura da produção em pipelines
- Defina alterações na infraestrutura da produção em código
- Use scripts para alterações na infraestrutura da produção
- Redução da interrupção quando da implantação de alterações
- Implantações azul-verde
- Atualizações contínuas e lançamentos canário
- Gerenciando dados quando da alteração da infraestrutura da produção
- Armazenar e carregar
- Use a transferência de dados contínua
- Segregue a infraestrutura de dados
- Separe as alterações no software e nos dados
- Use a recuperação de desastres contínua
- Conclusão
- Capítulo 21: Governança
- Shift Left
- Fluxo de trabalho para o shift left
- Topologias de equipe para o shift left
- Conformidade como código
- Controles por camada de design de componentes
- Controles por fluxo de trabalho
- Conclusão
- Sobre o autor
- Colofão
- Índice remissivo
Sobre o autor
Kief Morris é um engenheiro de destaque na Thoughtworks, onde ajuda clientes e equipes a aplicar tecnologia de nuvem e infraestrutura para fornecer mais valor de forma rápida e confiável. Há mais de 20 anos ele projeta, constrói e opera infraestrutura de TI automatizada, tralhando com tudo, desde shell scripts e Perl até o CFEngine, Puppet, Chef,… Ver perfil completo ▶






