O AWS CloudFormation oferece aos desenvolvedores e administradores de sistemas uma maneira fácil de criar e gerenciar um grupo de recursos relacionados à AWS, e fornecê-los e atualizá-los de uma forma organizada e previsível.
É possível usar os modelos de exemplo do AWS CloudFormation ou criar seus próprios modelos para descrever os recursos da AWS e quaisquer dependências associadas ou parâmetros de tempo de execução exigidos para executar seu aplicativo. Não é necessário descobrir a ordem na qual os serviços da AWS devem ser fornecidos ou as sutilezas de como fazer com que essas dependências funcionem. O CloudFormation cuida disso para você. Uma vez implementados, é possível modificar e atualizar os recursos da AWS de maneira previsível e controlada, permitindo que você controle a versão da infraestrutura do seu AWS da mesma forma que controla a versão do seu software.
Você pode implementar e atualizar um modelo e o conjunto de recursos associados (chamado de pilha) por meio do AWS Management Console, ferramentas de linha de comando do CloudFormation ou APIs. O CloudFormation está disponível gratuitamente e você paga somente pelos recursos de AWS necessários para executar seus aplicativos.
Para usar o AWS CloudFormation, basta:
Oferece suporte a uma ampla gama de recursos da AWS – O AWS CloudFormation é compatível com muitos recursos da AWS, permitindo que você crie uma infraestrutura de AWS altamente disponível, confiável e escalável para as necessidades do seu aplicativo. Hoje, o AWS CloudFormation oferece suporte a:
Fácil de usar – O CloudFormation facilita a organização de uma coleta de recursos da AWS que você deseja implementar e permite a descrição de quaisquer dependências ou parâmetros especiais que podem ser transmitidos no tempo de execução. Não é necessário descobrir a ordem na qual os serviços da AWS devem ser provisionados ou as sutilezas de como fazer com que as dependências funcionem. O CloudFormation cuida disso para você. É possível usar um dos muitos modelos de exemplo do CloudFormation – seja verbatim ou como um ponto de partida – ou criar o seu próprio.
Hoje o AWS CloudFormation é fornecido com os seguintes modelos de exemplo prontos para execução:
Não é necessário reinventar a roda – Um modelo pode ser usado repetidamente para criar cópias idênticas da mesma pilha (ou para usar como base para iniciar uma nova pilha). Você pode capturar e controlar variações da infraestrutura específicas da região, como AMIs do Amazon EC2, assim como os nomes de snapshots do Amazon Elastic Block Store (EBS) e do Amazon RDS.
Transparente e aberto – Os modelos são arquivos de texto simples JSON formatados que podem ser dispostos em seus mecanismos de controle de origem normais, armazenados em localizações privadas ou públicas, como o Amazon S3, e trocados via e-mail. O AWS CloudFormation permite que você "abra o capô" para visualizar exatamente quais recursos da AWS são usados para criar uma pilha. Você mantém o controle total e tem a capacidade de modificar qualquer um dos recursos da AWS criados como parte de uma pilha.
Declarativo e flexível – Para criar a infraestrutura que você deseja, enumere quais recursos da AWS, valores de configuração e interconexões são necessárias em um modelo e, em seguida, permita que o AWS CloudFormation faça o restante com alguns cliques simples no AWS Management Console, por meio de ferramentas de linha de comando ou ao chamar as APIs. Você não terá de rechamar os detalhes de como criar e interconectar os respectivos recursos da AWS por meio de suas APIs de serviço; o AWS CloudFormation faz isso. Também não é necessário gravar um modelo do zero se você preferir começar com um dos muitos modelos de exemplo fornecidos com o AWS CloudFormation.
Personalizado via parâmetros – Os parâmetros permitem que você personalize aspectos do seu modelo no tempo de execução quando a pilha é criada. Por exemplo, o tamanho do banco de dados do RDS, tipos de instância do EC2, banco de dados e número de portas do servidor da Web podem ser transmitidos para o AWS CloudFormation quando uma pilha for criada. Também é possível usar um modelo parametrizado para criar várias pilhas que poderão diferir de uma forma controlada. Por exemplo, os tipos de instância do EC2, limites de alarme do Amazon CloudWatch e definições de réplica de leitura do Amazon Relational Database Service (Amazon RDS) poderão diferir entre as regiões da AWS se você receber mais tráfego de clientes nos EUA do que na Europa. Você pode usar parâmetros de modelo para aprimorar as definições e os limites em cada região separadamente e ainda certificar-se de que o aplicativo esteja implementado de forma consistente nas regiões.
Preparado para integração – O AWS CloudFormation publica os eventos em andamento por meio do AWS Simple Notification Service (SNS). Isso permite que você monitore a criação de pilhas e o andamento da exclusão via e-mail, e integre com outros processos de modo programático.
Nenhum encargo extra – O AWS CloudFormation está disponível em encargos extras. Haverá uma cobrança somente pelas tarifas normais referentes aos recursos da AWS que são criados pelo AWS CloudFormation e usados pelo seu aplicativo.
Não há encargo adicional para o AWS CloudFormation. Pague pelos recursos do AWS (por ex., instâncias do EC2, Elastic Load Balancers etc.) criados usando o AWS CloudFormation da mesma forma como se você os tivesse criado manualmente.
Para evitar que você faça login individualmente em todos os serviços compatíveis com o AWS CloudFormation, efetuamos login automaticamente para você em todos esses serviços quando você efetuar login no AWS CloudFormation. Isso facilita o uso de modelos de exemplo do AWS CloudFormation sem a necessidade de verificar manualmente se você está habilitado para os respectivos serviços do AWS. Com todos os serviços do AWS, pague somente pelo o que você usar, ao usar; não há taxas mínimas nem compromissos prévios exigidos.
Um modelo é um arquivo de texto formatado de JSON (Javascript Object Notation) que descreve a infraestrutura da AWS necessária para executar um aplicativo ou serviço juntamente com qualquer interconexão entre eles. Os modelos capturam relações de recursos de forma concisa, tais como instâncias de EC2 que devem ser associadas a um Elastic Load Balancer ou ao fato de que um volume de EBS deve estar na mesma Zona da disponibilidade do EC2, como a instância à qual está conectado. O modelo pode ser parametrizado para permitir que um único modelo seja usado para muitas implantações de infraestrutura que têm valores de configuração diferentes, tais como quantas instâncias se dirigirão para o aplicativo. Os modelos também oferecem propriedades de saída que podem ser usadas para comunicar facilmente a configuração ou os resultados da implantação do modelo para o usuário. Por exemplo, quando instanciado, um modelo pode fornecer a URL do ponto de extremidade do Elastic Load Balancer, que o cliente deve usar para se conectar ao aplicativo recentemente instanciado. Todos os recursos da AWS em um modelo são identificados usando nomes lógicos, permitindo que várias pilhas sejam criadas a partir de um modelo sem medo de nomear colisões entre os recursos da AWS.
Você fornece o modelo para a operação do CreateStack no Console da AWS, na ferramenta de linha de comando ou na API. Não é necessário registrar o modelo com o AWS CloudFormation previamente. O AWS CloudFormation mantém uma cópia do modelo de pilha para que você possa utilizar o AWS Management Console, as ferramentas de linha de comando ou as APIs para pesquisar exatamente as configurações de recurso que foram aplicadas durante a criação da pilha.
Um modelo tem a seguinte estrutura de alto nível de JSON:
{
''Description'' : ''A text description for the template usage'',
''Parameters'': {
// A set of inputs used to customize the template per deployment
},
''Resources'' : {
// The set of AWS resources and relationships between them
},
''Outputs'' : {
// A set of values to be made visible to the stack creator
},
''AWSTemplateFormatVersion'' : ''2010-09-09''
}
O modelo a seguir é um exemplo simples que mostra como criar uma instância EC2:
{
''Description'' : ''Create an EC2 instance running the Amazon Linux 32 bit AMI.”
''Parameters'' : {
''KeyPair'' : {
''Description'' : ''The EC2 Key Pair to allow SSH access to the instance'',
''Type'' : ''String''
}
},
''Resources'' : {
''Ec2Instance'' : {
''Type'' : ''AWS::EC2::Instance'',
''Properties'' : {
''KeyName'' : { ''Ref'' : ''KeyPair'' },
''ImageId'' : ''ami-75g0061f''
}
}
},
''Outputs'' : {
''InstanceId'' : {
''Description'' : ''The InstanceId of the newly created EC2 instance'',
''Value'' : { ''Ref'' : ''Ec2Instance'' }
}
},
''AWSTemplateFormatVersion'' : ''2010-09-09''
}
A coleção de recursos que resultam de instanciar um modelo é conhecida como uma pilha. Uma pilha é criada, fornecendo um modelo e todos os parâmetros necessários para o serviço do AWS CloudFormation. Com base no modelo, o serviço determina quais recursos da AWS precisam ser criados e em que ordem. A ordem é determinada pelas dependências especificadas entre os recursos declaradas no modelo. Algumas dessas dependências são implícitas, por exemplo, para associar um volume de EBS a uma instância EC2, o nome do volume EBS deve ser passado para a instância. Para que isso aconteça, o volume de EBS deverá ser criado primeiro, para que ele receba um nome ou um identificador. Em outros casos, a dependência é explícita. Por exemplo, se um aplicativo é implantado usando um grupo de autodimensionamento e necessita acessar uma instância do serviço de banco de dados relacional do Amazon, a instância do banco de dados deve ser criada antes que as instâncias EC2 sejam criadas. Neste caso, o autor do modelo pode definir uma dependência entre os recursos, garantindo que um foi criado antes do outro.
As pilhas são criadas, atualizadas e excluídas usando o serviço do AWS CloudFormation. Durante a criação da pilha, o AWS CloudFormation registra o mapeamento do nome lógico dado no modelo (por exemplo, "myServer") para o nome real do recurso que é instanciado (por exemplo, nome da instância EC2 "i-19d3ac161"). O status da criação da pilha e o mapeamento do nome do recurso estão disponíveis através de uma API simples. Além disso, o AWS CloudFormation marca os recursos EC2, tais como instâncias e volumes EBS, com o nome da pilha.
As pilhas são atualizadas pelo fornecimento de um modelo que contém a configuração desejada de todos os recursos em sua pilha. É possível modificar as propriedades dos recursos existentes em sua pilha para reagir às alterações em seu ambiente ou nas novas exigências de aplicação. Por exemplo, você pode alterar os limiares de alarme em seus alarmes do AWS CloudWatch ou atualizar a execução do AMI em uma instância em sua pilha. O AWS CloudFormation se encarrega pela reversão das alterações nos diferentes recursos em sua pilha. Em muito casos, as alterações serão feitas sem que haja impacto ao aplicativo em execução, porém, se uma alteração não puder ser feita de maneira dinâmica (como atualizar um AMI em uma instância do EC2), o AWS CloudFormation irá criar um novo recurso e religá-lo à pilha, excluindo o recurso antigo uma vez que o serviço estiver certo de que a atualização será concluída com sucesso.
Uma pilha será criada ou atualizada na sua totalidade ou revertida se ela não puder ser totalmente instanciada ou modificada. Durante a criação de pilhas, para fins de depuração, a operação de reversão pode ser desabilitada e iniciada manualmente em um momento posterior.
O AWS CloudFormation pode ser facilmente acessado por meio do AWS Management Console, que fornece a você uma interface baseada na web do tipo apontar e clicar para implementar e gerenciar pilhas. Você pode criar, excluir e atualizar um aplicativo de dentro do AWS Management Console em algumas etapas simples. O AWS CloudFormation também fornece um simples conjunto de APIs que são fáceis de usar e muito flexíveis. Para obter uma lista completa das APIs disponíveis para o AWS CloudFormation, consulte o Guia de referência de API do AWS CloudFormation. Algumas das APIs usadas com mais frequência e suas funcionalidades estão listadas abaixo:
O AWS CloudFormation é integrado com o Amazon Simple Notification Service (Amazon SNS), permitindo que você receba notificações, à medida que a criação, atualização e a exclusão da pilha está progredindo. Além de fornecer o status, isso permite também que outros programas tomem conhecimento de eventos dentro do CloudFormation e respondam ou até mesmo participem do processo de configuração da pilha.
O modelo do AWS CloudFormation é projetado para potencializar sua experiência existente com a AWS. Cada recurso tem um conjunto de parâmetros com nomes idênticos aos nomes usados para criar os recursos por meio de suas APIs nativas. O trecho de modelo a seguir mostra como definir um Amazon EBS Volume. O nome lógico do volume no modelo é "myVolume"e seu tipo é "AWS::EC2::Volume" As propriedades parecerão muito familiares se os volumes EBS foram utilizados anteriormente.
''myVolume'' : {
''Type'' : ''AWS::EC2::Volume'',
''Properties'' : {
''Size'' : ''10'',
''SnapshotId'' : ''snap-7b8fd361'',
''AvailabilityZone'' : ''us-east-1a''
}
}
O AWS CloudFormation fornece uma série de números de scripts de auxílio que podem ser implementados às suas instâncias do EC2. Esses scripts fornecem uma maneira simples de ler metadados de recursos de sua pilha e utilizá-los para configurar seu aplicativo, implementar pacotes e arquivos à sua instância que está listada em seu modelo e reagir a atualizações de pilha como mudanças na configuração ou nas atualizações do seu aplicativo.
Os seguintes scripts estão disponíveis:
Os scripts do CloudFormation podem ser utilizados individualmente ou junto ao CloudInit, um recurso disponível no Amazon Linux AMI e em alguns outros Linux AMIs. Para maiores detalhes sobre bootstrapping de aplicativos e atualização de configuração, consulte os whitepapers do AWS CloudFormation
A melhor maneira de começar a usar o AWS CloudFormation é consultar o Guia de Introdução, que está incluído em nossa documentação técnica. Em poucos minutos, você será capaz de implantar um dos modelos do exemplo e de começar a criar suas próprias configurações de infraestrutura.
O uso deste serviço está sujeito ao Acordo do Cliente da Amazon Web Services.