Como o CloudFormation funciona
Este tópico descreve como o CloudFormation funciona e apresenta os principais conceitos que você precisa conhecer ao usá-lo.
Principais conceitos
Ao usar o CloudFormation, você trabalha com modelos e pilhas. Você cria modelos para descrever os recursos da AWS e suas respectivas propriedades. Sempre que você cria uma pilha, o CloudFormation provisiona os recursos descritos no modelo.
Modelos
Um modelo do CloudFormation é um arquivo de texto formatado em YAML ou JSON. Você pode salvar esses arquivos com qualquer extensão, por exemplo, .yaml
, .json
, .template
ou .txt
. O CloudFormation usa esses modelos como esquemas para a criação dos recursos da AWS. Por exemplo, em um modelo, é possível descrever uma instância do Amazon EC2, como o tipo de instância, o ID da AMI, os mapeamentos de dispositivos de blocos e o nome do par de chaves do Amazon EC2. Sempre que cria uma pilha, você também deve especificar um modelo usado pelo CloudFormation para criar o que você descreveu no modelo.
Por exemplo, caso você tenha criado uma pilha usando o modelo a seguir, o CloudFormation provisiona uma instância com uma ID da AMI ami-0ff8a91507f77f867
, um tipo de instância t2.micro
, um nome do par de chaves testkey
e um volume do Amazon EBS.
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } } } }
Também é possível especificar vários recursos em um único modelo e configurar esses recursos para que funcionem juntos. Por exemplo, é possível modificar o modelo anterior para incluir um endereço IP elástico (EIP) e associá-lo à instância Amazon EC2, conforme mostrado no seguinte exemplo:
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20 MyEIP: Type: 'AWS::EC2::EIP' Properties: InstanceId: !Ref MyEC2Instance
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } }, "MyEIP": { "Type": "AWS::EC2::EIP", "Properties": { "InstanceId": { "Ref": "MyEC2Instance" } } } } }
Os modelos anteriores se baseiam em uma instância do Amazon EC2 única. No entanto, os modelos do CloudFormation têm recursos adicionais que é possível usar para criar conjuntos complexos de recursos e reutilizar esses modelos em vários contextos. Por exemplo, é possível adicionar parâmetros de entrada cujos valores são especificados quando você cria uma pilha do CloudFormation. Em outras palavras, você pode especificar um valor como o tipo de instância ao criar uma pilha, em vez de quando cria o modelo, o que facilita a reutilização do modelo em situações diferentes.
Pilhas
Ao usar o CloudFormation, você gerencia recursos relacionados como uma unidade única chamada de pilha. Você pode criar, atualizar e excluir um conjunto de recursos criando, atualizando e excluindo pilhas. Todos os recursos em uma pilha são definidos pelo modelo CloudFormation dela. Suponhamos que você tenha criado um modelo que inclui um grupo do Auto Scaling, um load balancer do Elastic Load Balancing e uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS). Para criar esses recursos, você cria uma pilha enviando o modelo que criou, e o CloudFormation provisiona todos esses recursos para você.
Conjuntos de alterações
Caso precise fazer alterações nos recursos em execução em uma pilha, você atualiza a pilha. Antes de fazer alterações nos recursos, você pode gerar um conjunto de alterações, que é o resumo das alterações propostas. Os conjuntos de alterações permitem ver como as alterações podem afetar os recursos em execução, especialmente para recursos críticos, antes de implementá-las.
Por exemplo, se você alterar o nome de uma instância de banco de dados do Amazon RDS, o CloudFormation criará um novo banco de dados e excluirá o anterior. Você perderá os dados no banco de dados anterior, a menos que já tenha feito backup deles. Se gerar um conjunto de alterações, você verá que a alteração fará o banco de dados ser substituído, e poderá planejar de acordo antes de atualizar a pilha.
Como o CloudFormation funciona
Quando você usa o CloudFormation para criar sua pilha, o CloudFormation faz chamadas de serviço subjacentes à AWS para provisionar e configurar os recursos descritos no seu modelo. Você precisa de permissão para criar esses recursos. Por exemplo, para criar instâncias do EC2 usando o CloudFormation, você precisa ter permissões para criar instâncias. Você gerencia essas permissões com AWS Identity and Access Management (IAM).
As chamadas que o CloudFormation faz são todas declaradas por seu modelo. Por exemplo, suponha que você tem um modelo que descreve uma instância EC2 com um tipo de instância t2.micro
. Quando você usa esse modelo para criar uma pilha, o CloudFormation chama a API de criação de instância do Amazon EC2 e especifica o tipo de instância como t2.micro
. O diagrama a seguir resume o fluxo de trabalho do CloudFormation para a criação de pilhas.

Para criar uma pilha
-
Use um editor de texto para criar um modelo do CloudFormation no formato YAML ou JSON. O modelo de CloudFormation descreve os recursos que você deseja e suas configurações. Use Infrastructure Composer para visualizar e validar seu modelo. Isso ajuda você a garantir que seu modelo esteja adequadamente estruturado e livre de erros de sintaxe. Para ter mais informações, consulte Trabalhar com modelos do CloudFormation.
-
Salve o modelo do localmente ou em um bucket do Amazon S3.
-
Crie uma pilha do CloudFormation especificando o local de seu arquivo de modelo, como um caminho em seu computador local ou um URL do Amazon S3. Se o modelo contiver parâmetros, você poderá especificar valores de entrada ao criar a pilha. Os parâmetros permitem que você passe valores para seu modelo, para que possa personalizar seus recursos toda vez que você criar uma pilha.
nota
Se você especificar um arquivo de modelo armazenado localmente, o CloudFormation o carregará em um bucket do S3 na sua conta da AWS. O CloudFormation cria um bucket para cada região na qual você carrega um arquivo de modelo. Os buckets são acessíveis a qualquer pessoa com permissões do Amazon Simple Storage Service (Amazon S3) na sua conta da AWS. Se um bucket criado pelo CloudFormation já estiver presente, o modelo será adicionado a esse bucket.
É possível utilizar seu próprio bucket e gerenciar suas permissões carregando modelos manualmente no Amazon S3. Em seguida, sempre que você criar ou atualizar uma pilha, especifique o URL do Amazon S3 de um arquivo de modelo.
Depois que todos os recursos foram criados, o CloudFormation informa que sua pilha foi criada. Em seguida, você pode começar a usar os recursos de sua pilha. Se houver falha na criação da pilha, o CloudFormation reverterá as alterações excluindo os recursos que ele criou.
Para criar uma pilha Hello world do CloudFormation com o console, consulte Criar sua primeira pilha.
Atualizar uma pilha com um conjunto de alterações
Quando precisar atualizar os recursos da pilha, você poderá modificar o modelo da pilha. Você não precisa criar uma nova pilha e excluir a antiga. Para atualizar uma pilha, crie um conjunto de alterações enviando uma versão modificada do modelo da pilha original, diferentes valores de parâmetros de entrada ou ambos. O CloudFormation compara o modelo modificado com o modelo original e gera um conjunto de alterações. O conjunto de alterações lista as alterações propostas. Depois de revisar as alterações, você pode iniciar o conjunto de alterações para atualizar sua pilha ou pode criar um novo conjunto de alterações. O diagrama a seguir resume o fluxo de trabalho da atualização de uma pilha.

Para atualizar uma pilha com um conjunto de alterações
-
Você pode modificar um modelo de pilha do CloudFormation usando o Infrastructure Composer ou um editor de texto. Para ter mais informações, consulte Atualizar seu modelo de pilha.
Ao atualizar seu modelo, lembre-se de que as atualizações podem causar interrupções. Dependendo do recurso e das propriedades que você está atualizando, uma atualização pode interromper ou até substituir um recurso existente. Para ter mais informações, consulte Compreender atualização de comportamentos de recursos da pilha.
-
Salve o modelo do CloudFormation localmente ou em um bucket do S3.
-
Crie um conjunto de alterações especificando a pilha que você deseja atualizar e o local do modelo modificado, como um caminho no seu computador local ou um URL do Amazon S3. Para obter mais informações sobre como criar conjuntos de alterações, consulte Atualizar pilhas do CloudFormation usando conjuntos de alterações.
nota
Se você especificar um modelo armazenado em seu computador local, o CloudFormation carregará esse modelo automaticamente em um bucket do S3 na sua Conta da AWS.
-
Visualize o conjunto de alterações para verificar se o CloudFormation executará as alterações que você espera. Por exemplo, verifique se o CloudFormation substituirá todos os recursos cruciais da pilha. Você pode criar quantos conjuntos de alterações precisar até ter incluído as alterações desejadas.
Importante
Os conjuntos de alterações não indicam se a atualização da pilha será bem-sucedida. Por exemplo, um conjunto de alterações não verifica se você vai ultrapassar a cota de uma conta, se estiver atualizando um recurso que não permita alterações nem se tem permissões suficientes para modificar um recurso, o que pode provocar falha em uma atualização de pilha.
-
Inicie o conjunto de alterações que você deseja aplicar à sua pilha. O CloudFormation atualiza a pilha atualizando apenas os recursos que você modificou e sinaliza que sua pilha foi atualizada com êxito. Se houver falha na atualização da pilha, o CloudFormation reverterá as alterações para restaurar a pilha para o estado de funcionamento conhecido mais recente.