Demonstração: Criar um pipeline para pilhas de produção e teste - AWS CloudFormation

Demonstração: Criar um pipeline para pilhas de produção e teste

Imagine um processo de liberação no qual você envia um modelo do AWS CloudFormation, que o AWS CloudFormation usa para criar automaticamente uma pilha de teste. Depois de verificar a pilha de teste, você pode visualizar como suas alterações modificarão sua pilha de produção e, em seguida, escolher se deseja implementá-las. Para realizar este fluxo de trabalho, você pode usar o AWS CloudFormation para criar sua pilha de teste, excluir a pilha de teste, criar um conjunto de alterações e, em seguida, executar o conjunto de alterações. No entanto, com cada ação, você precisa interagir manualmente com o AWS CloudFormation. Nesta demonstração, vamos criar um pipeline do CodePipeline que automatiza muitas dessas ações, ajudando a obter um fluxo de trabalho de entrega contínuo com suas pilhas do AWS CloudFormation.

Pré-requisitos

Essa descrição pressupõe que você tenha usado o CodePipeline e o AWS CloudFormation e saiba como pipelines e modelos e pilhas do AWS CloudFormation funcionam. Para obter mais informações sobre CodePipeline, consulte o Guia do usuário do AWS CodePipeline. Você também precisa ter um bucket do Amazon S3 na mesma região da AWS na qual você criará o pipeline.

Importante

O modelo do WordPress de amostra cria uma instância do EC2 que requer uma conexão com a Internet. Verifique se você tem uma VPC padrão e sub-rede que permitem o tráfego para a Internet.

Visão geral da demonstração

Esta apresentação cria um pipeline para um site do WordPress de amostra em uma pilha. O pipeline é separado em três etapas. Cada etapa deve conter pelo menos uma ação, que é uma tarefa que o pipeline executa em seus artefatos (sua entrada). Uma etapa organiza ações em um pipeline. O CodePipeline deve concluir todas as ações de uma etapa antes que o estágio processe novos artefatos, por exemplo, se você enviou uma nova entrada para executar novamente o pipeline.

Ao final desta apresentação, você terá um pipeline que executa o fluxo de trabalho a seguir:

  1. A primeira etapa do pipeline recupera um artefato de origem (um modelo de AWS CloudFormation e seus arquivos de configuração) de um repositório.

    Você preparará um artefato que inclui um modelo do WordPress de amostra e faz upload para um bucket do S3.

  2. Na segunda etapa, o pipeline cria uma pilha de teste e, em seguida, aguarda a sua aprovação.

    Depois de verificar a pilha de teste, você pode optar por continuar com o pipeline original ou criar e enviar outro artefato para fazer alterações. Se você aprovar, esta etapa exclui a pilha de teste e, em seguida, o pipeline continua para a próxima etapa.

  3. No terceiro estágio, o pipeline cria um conjunto de alterações em uma pilha de produção e, em seguida, aguarda a sua aprovação.

    Em sua execução inicial, você não terá uma pilha de produção. O conjunto de alterações mostra todos os recursos que o AWS CloudFormation criará. Se você aprovar, esta etapa executa o conjunto de alterações e cria sua pilha de produção.

nota

O AWS CloudFormation é um serviço gratuito. No entanto, você é cobrado pelos recursos da AWS, como a instância do EC2, que você inclui a sua pilha na taxa atual para cada um deles. Para obter mais informações sobre o preço da AWS, consulte a página de detalhes de cada produto em http://aws.amazon.com.

Etapa 1: Editar o artefato e fazer upload dele para um bucket do S3

Antes de criar o pipeline, você deve configurar seus arquivos e o repositório de origem. O CodePipeline copia estes arquivos de origem para o armazenamento de artefatos do pipeline e, em seguida, os utiliza para executar ações no pipeline, como a criação de uma pilha do AWS CloudFormation.

Quando você usa o Amazon Simple Storage Service (Amazon S3) como o repositório de origem, o CodePipeline requer que você compacte os arquivos de origem antes de enviá-los para um bucket do S3. O arquivo compactado é um artefato do CodePipeline que pode conter um modelo do AWS CloudFormation, um arquivo de configuração de modelo ou ambos. Fornecemos um artefato que contém um modelo do WordPress de amostra de dois arquivos de configuração de modelo. Os dois arquivos de configuração especificam valores de parâmetro para o modelo do WordPress. O CodePipeline os utiliza quando cria pilhas do WordPress. Um arquivo contém valores de parâmetro para uma pilha de teste e o outro para uma pilha de produção. Você precisará editar os arquivos de configuração, por exemplo, para especificar um nome do par de chaves do EC2 existente que você possui. Para obter mais informações sobre artefatos, consulte Artefatos do AWS CloudFormation.

Depois de criar o artefato, você fará upload para um bucket do S3.

Como editar e fazer upload do artefato
  1. Faça download e abra o artefato de amostra: https://s3.amazonaws.com/cloudformation-examples/user-guide/continuous-deployment/wordpress-single-instance.zip.

    O artefato contém três arquivos:

    • O modelo do WordPress de amostra: wordpress-single-instance.yaml

    • O arquivo de configuração do modelo para a pilha de teste: test-stack-configuration.json

    • O arquivo de configuração do modelo da pilha de produção: prod-stack-configuration.json

  2. Extraia todos os arquivos e, em seguida, use qualquer editor de texto para modificar os arquivos de configuração de modelo.

    Abra os arquivos de configuração para verificar se eles contêm pares de chave/valor que mapeiam os parâmetros de modelo do WordPress. Os arquivos de configuração especificam os valores de parâmetro que o pipeline usa ao criar as pilhas de teste e produção.

    Edite o arquivo test-stack-configuration.json para especificar valores de parâmetro da pilha de teste e o arquivo prod-stack-configuration.json da pilha de produção.

    • Altere os valores das chaves de ativação DBPassword e DBRootPassword para as senhas que você pode usar para fazer login em seu banco de dados do WordPress. Conforme definido no modelo do WordPress, os valores de parâmetro devem conter apenas caracteres alfanuméricos.

    • Altere o valor da chave de ativação KeyName de um nome do par de chaves do EC2 na região na qual você criará o pipeline.

  3. Adicione os arquivos de configuração modificados ao artefato original (.zip), substituindo arquivos duplicados.

    Você agora tem um artefato personalizado que pode fazer upload para um bucket do S3.

  4. Faça upload do artefato para um bucket do S3 que você possui.

    Observe o local do arquivo. Você especificará o local desse arquivo ao criar seu pipeline.

    Observações sobre o artefato e o bucket do S3:

    • Use um bucket que esteja na mesma região da AWS na qual você criará o pipeline.

    • O CodePipeline requer que o bucket esteja habilitado para versionamento.

    • Você também pode usar serviços que não exigem a compactação dos seus arquivos antes de fazer upload, como GitHub ou CodeCommit, para seu repositório de origem.

    • Os artefatos podem conter informações confidenciais, como senhas. Limite o acesso para que somente os usuários permitidos possam visualizar o arquivo. Quando você fizer isso, certifique-se de que o CodePipeline ainda pode acessar o arquivo.

Você agora tem um artefato que o CodePipeline pode extrair para o pipeline. Na próxima etapa, você especificará o local do artefato e criar o pipeline do WordPress.

Etapa 2: Criar a pilha do pipeline

Para criar o pipeline do WordPress, você usará um modelo do AWS CloudFormation de amostra. Além de criar o pipeline, o modelo define perfis de serviço do AWS Identity and Access Management (IAM) para o CodePipeline e o AWS CloudFormation, um bucket do S3 para o armazenamento de artefatos do CodePipeline e um tópico do Amazon Simple Notification Service (Amazon SNS) ao qual o pipeline envia notificações, como as notificações sobre avaliações. O modelo de amostra facilita o provisionamento e configura estes recursos em uma única pilha de AWS CloudFormation.

Para obter mais detalhes sobre a configuração do pipeline, consulte O que o pipeline faz.

Importante

O modelo do WordPress de amostra cria uma instância do EC2 que requer uma conexão com a Internet. Verifique se a sua VPC padrão e sub-rede permitem o tráfego para a Internet.

Como criar a pilha do pipeline
  1. Faça download do modelo de exemplo em https://s3.amazonaws.com/cloudformation-examples/user-guide/continuous-deployment/basic-pipeline.yml. Salve-o em seu computador.

  2. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation/.

  3. Escolha uma região da AWS que ofereça suporte ao CodePipeline e ao AWS CloudFormation.

    Para obter mais informações, consulte Regiões e endpoints da AWS na Referência geral da AWS.

  4. Selecione Criar pilha.

  5. Em Specify template (Especificar modelo), escolha Upload a template file (Fazer upload de um arquivo de modelo) e escolha o modelo que você acabou de obter por download, basic-pipeline.yml.

  6. Escolha Próximo.

  7. Para Nome da pilha, digite sample-WordPress-pipeline.

  8. Na seção Parâmetros, especifique os seguintes valores de parâmetros e, em seguida, escolha Próximo. Ao definir parâmetros da pilha, se você mantiver os mesmos nomes do modelo do WordPress e dos seus arquivos de configuração, será possível usar os valores padrão. Caso contrário, especifique os nomes dos arquivos que você usou.

    PipelineName

    O nome do seu pipeline, como WordPress-test-pipeline.

    S3 Bucket

    O nome do bucket do S3 onde você salvou seu artefato (arquivo .zip).

    SourceS3Key

    O nome de arquivo do artefato. Se você salvou o artefato em uma pasta, o inclua como parte do nome de arquivo, como folder/subfolder/wordpress-single-instance.zip.

    E-mail

    O endereço de e-mail para o qual o CodePipeline envia a notificação do pipeline, como myemail@example.com.

  9. Para esta demonstração, você não precisa adicionar tags ou especificar configurações avançadas, portanto escolha Próximo.

  10. Verifique se o nome da pilha e o URL do modelo estão corretos e escolha Create stack (Criar pilha).

  11. Para confirmar que você está ciente de que o AWS CloudFormation pode criar recursos do IAM, escolha a caixa de seleção.

Pode levar vários minutos para o AWS CloudFormation criar sua pilha. Para monitorar o progresso, visualize os eventos da pilha. Para ter mais informações, consulte Visualizar informações da pilha no console do CloudFormation.

Após a criação da pilha, o CodePipeline inicia seu novo pipeline. Para visualizar seu status, consulte o console do CodePipeline. Na lista de pipelines, escolha WordPress-test-pipeline.

O que o pipeline faz

Esta seção explica os três estágios do pipeline, usando trechos do modelo de pipeline do WordPress de amostra.

Fase 1: Fonte

A primeira etapa do pipeline é um estágio de origem no qual você especifica o local do seu código-fonte. Cada vez que você envia uma revisão para esse local, o CodePipeline executa novamente o pipeline.

O código-fonte está localizado em um bucket do S3 e é identificado por seu nome de arquivo. Você especificou estes valores como valores de parâmetros de entrada quando você criou a pilha do pipeline. Para permitir o uso do artefato de origem em estágios subsequentes, o trecho especifica a propriedade OutputArtifacts com o nome de TemplateSource. Para usar esse artefato em etapas posteriores, você especifica TemplateSource como um artefato de entrada.

- Name: S3Source Actions: - Name: TemplateSource ActionTypeId: Category: Source Owner: AWS Provider: S3 Version: '1' Configuration: S3Bucket: !Ref 'S3Bucket' S3ObjectKey: !Ref 'SourceS3Key' OutputArtifacts: - Name: TemplateSource

Fase 2: TestStage

Na etapa TestStage, o pipeline cria a pilha de teste, espera a aprovação e, em seguida, exclui a pilha de teste.

Para a ação CreateStack, o pipeline usa o arquivo de configuração de teste e o modelo do WordPress para criar a pilha de teste. Ambos os arquivos estão contidos no artefato de entrada TemplateSource, que é obtido a partir do estágio de origem. O trecho usa o modo de ação REPLACE_ON_FAILURE. Se houver falha na criação da pilha, o pipeline o substitui para que você não precise limpar ou solucionar problemas na pilha antes de poder executar novamente o pipeline. O modo de ação é útil para a iteração rápida em pilhas de teste. Para a propriedade RoleArn, o valor é uma função de serviço do AWS CloudFormation que é declarada em outro lugar no modelo.

A ação ApproveTestStack pausa o pipeline e envia uma notificação para o endereço de e-mail que você especificou quando você criou a pilha do pipeline. Embora o pipeline esteja pausado, você poderá verificar a pilha de teste do WordPress e seus recursos. Use o CodePipeline para aprovar ou rejeitar esta ação. A propriedade CustomData inclui uma descrição da ação que você está aprovando para que o pipeline adicione ao e-mail de notificação.

Depois de aprovar essa ação, o CodePipeline passa para a ação DeleteTestStack e exclui a pilha de teste do WordPress e seus recursos.

- Name: TestStage Actions: - Name: CreateStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: REPLACE_ON_FAILURE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName TemplateConfiguration: !Sub "TemplateSource::${TestStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveTestStack ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'Do you want to create a change set against the production stack and delete the ${TestStackName} stack?' RunOrder: '2' - Name: DeleteTestStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: DELETE_ONLY RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName RunOrder: '3'

Fase 3: ProdStage

A etapa ProdStage de pipeline cria um conjunto de alterações na pilha de produção existente, aguarda a aprovação e, em seguida, executa o conjunto de alterações.

Um conjunto de alterações fornece uma pré-visualização de todas as modificações que o AWS CloudFormation fará na sua pilha de produção antes de implementá-las. Em seu primeiro pipeline executado, você não terá uma pilha de produção em execução. O conjunto de alterações mostra as ações que o AWS CloudFormation executa ao criar a pilha de teste. Para criar o conjunto de alterações, a ação CreateChangeSet usa o modelo de amostra do WordPress e a configuração de modelo de produção do artefato de entrada TemplateSource.

Semelhante à etapa anterior, a ação ApproveChangeSet pausa o pipeline e envia uma notificação por e-mail. Embora o pipeline esteja pausado, você poderá visualizar o conjunto de alterações para verificar todas as modificações propostas à pilha de produção do WordPress. Use o CodePipeline para aprovar ou rejeitar esta ação para continuar ou interromper o pipeline, respectivamente.

Depois de aprovar essa ação, a ação ExecuteChangeSet executa o conjunto de alterações para que o AWS CloudFormation execute todas as ações descritas no conjunto de alterações. Para a execução inicial, o AWS CloudFormation cria a pilha de produção do WordPress. Em execuções subsequentes, o AWS CloudFormation atualiza a pilha.

- Name: ProdStage Actions: - Name: CreateChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName ChangeSetName: !Ref ChangeSetName TemplateConfiguration: !Sub "TemplateSource::${ProdStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveChangeSet ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'A new change set was created for the ${ProdStackName} stack. Do you want to implement the changes?' RunOrder: '2' - Name: ExecuteChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CHANGE_SET_EXECUTE ChangeSetName: !Ref ChangeSetName RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName RunOrder: '3'

Etapa 3: Visualizar a pilha do WordPress

Como o CodePipeline é executado por meio do pipeline, ele usa o AWS CloudFormation para criar pilhas de teste e produção. Para ver o status dessas pilhas e seu resultado, use o console de AWS CloudFormation.

Para visualizar uma pilha
  1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation/.

  2. Dependendo se o pipeline estiver na etapa de teste ou de produção, selecione a pilha Test-MyWordPressSite ou Prod-MyWordPressSite.

  3. Para verificar o status de sua pilha, visualize os eventos da pilha.

Se a pilha estiver em um estado de falha, visualize o motivo do status para encontrar o erro da pilha. Corrija o erro e, em seguida, execute novamente o pipeline. Se a pilha estiver no estado CREATE_COMPLETE, visualize suas saídas para obter o URL do site do WordPress.

Você usou o CodePipeline com êxito para criar um fluxo de trabalho de entrega contínuo para uma amostra do site do WordPress. Se você enviar as alterações ao bucket do S3, o CodePipeline detecta automaticamente uma nova versão e, em seguida, executa novamente o pipeline. Este fluxo de trabalho facilita o envio e o teste das alterações antes de fazer mudanças em seu site de produção.

Etapa 4: Limpar os recursos

Para ter certeza de que você não será cobrado por serviços indesejados, exclua seus recursos.

Importante

Exclua as pilhas de teste e produção do WordPress antes de excluir a pilha do pipeline. A pilha do pipeline contém uma função de serviço que é necessária para excluir as pilhas do WordPress. Se você excluiu as pilhas do pipeline primeiro, você poderá associar outro nome de recurso da Amazon (ARN) de função de serviço às pilhas do WordPress e, em seguida, excluí-las.

Para excluir objetos no armazenamento de artefato
  1. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Selecione o bucket do S3 que o CodePipeline usou como armazenamento de artefatos do pipeline.

    O nome do bucket segue o formato: stackname-artifactstorebucket-id. Se você seguiu esta apresentação, o nome do bucket pode ser semelhante ao exemplo a seguir: sample-WordPress-pipeline-artifactstorebucket-12345abcd12345.

  3. Exclua todos os objetos no bucket do S3 do armazenamento de artefato.

    Ao excluir a pilha do pipeline na próxima etapa, esse bucket deve estar vazio. Caso contrário, o AWS CloudFormation não poderá excluir o bucket.

Para excluir pilhas
  1. No console do AWS CloudFormation, selecione a pilha que você deseja excluir.

    Se as pilhas do WordPress que foram criadas pelo pipeline ainda estão em execução, selecione-as primeiro. Por padrão, os nomes de pilha são Test-MyWordPressSite e Prod-MyWordPressSite.

    Se você já excluiu as pilhas do WordPress, selecione a pilha sample-WordPress-pipeline.

  2. Escolha Ações e, em seguida, escolha Excluir pilha.

  3. Na mensagem de confirmação, escolha Sim, excluir.

O AWS CloudFormation excluirá a pilha de todos os recursos da pilha, como a instância do EC2, o tópico de notificação, a função de serviço e o pipeline.

Agora que você sabe como criar um fluxo de trabalho básico do AWS CloudFormation com o CodePipeline, é possível usar o modelo de exemplo e os artefatos como um ponto de partida para criar seus próprios.

Consulte também

Os recursos relacionados a seguir podem ajudar você à medida que trabalha com esses parâmetros.

  • Para obter mais informações sobre os parâmetros de ação do AWS CloudFormation no CodePipeline, consulte a referência de configuração de ações do AWS CloudFormation no Guia do usuário do AWS CodePipeline.

  • Para obter exemplos de valores do modelo por provedor de ação, como para o campo Owner ou para os campos configuration, consulte a Referência de estruturas de ações no Guia do usuário do AWS CodePipeline.

  • Para baixar exemplos de modelos de pilha de pipeline no formato YAML ou JSON, consulte os tutoriais em Criar um pipeline com o AWS CloudFormation, no Guia do usuário do AWS CodePipeline.

  • Para obter um arquivo de configuração do modelo de exemplo, consulte Artefatos do AWS CloudFormation.