Usando CodePipeline para implantar o Terraform e modelos CloudFormation - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando CodePipeline para implantar o Terraform e modelos CloudFormation

Aviso

AWS CodeCommit não está mais disponível para novos clientes. Os clientes existentes do AWS CodeCommit podem continuar usando o serviço normalmente. Saiba mais

No DPA, você usa blocos de construção para criar aceleradores AWS CodePipeline para Terraform e IaC. CloudFormation Esta seção descreve o seguinte para esse caso de uso:

  • Estrutura de tubulação padronizada

  • Estágios e trabalhos reutilizáveis

  • Ferramentas integradas para escaneamentos de segurança

O repositório do DPA contém pastas para Terraform e. CloudFormation Cada uma dessas pastas contém as duas subpastas a seguir:

  • pipeline-modules — Essa pasta contém o código para implantar a estrutura padronizada do pipeline.

  • shared — Essa pasta contém arquivos ready-to-use buildspec para os estágios e trabalhos do DPA.

Pré-requisitos

  • Um ativo Conta da AWS

  • Permissões para provisionar recursos usando modelos de IaC

  • Permissões para criar AWS CodeCommit repositórios e componentes CodePipeline

Ferramentas

  • cfn-lint é um linter que verifica os modelos CloudFormation YAML ou JSON em relação à especificação do recurso.AWS CloudFormation Ele também realiza outras verificações, como a verificação de valores válidos para as propriedades dos recursos e a adesão às melhores práticas.

  • cfn_nag é uma ferramenta de código aberto que identifica possíveis problemas de segurança em CloudFormation modelos pesquisando padrões.

  • O Checkov é uma ferramenta estática de análise de código que verifica o IaC em busca de configurações incorretas de segurança e conformidade.

  • TFLinté um linter que verifica o código do Terraform em busca de possíveis erros e da adesão às melhores práticas.

  • O tfsec é uma ferramenta estática de análise de código que verifica possíveis erros de configuração no código do Terraform.

Instruções

Crie CodeCommit repositórios

  1. Crie dois CodeCommit repositórios separados da seguinte forma:

    • common-repo— Esse repositório contém as bibliotecas compartilhadas, os arquivos buildspec e as dependências.

    • app-repo— Esse repositório contém o Terraform ou CloudFormation modelos para implantar sua infraestrutura.

    Para obter instruções, consulte Criar um AWS CodeCommit repositório.

  2. No common-repo repositório, crie uma pasta chamadashared. Copie os arquivos buildspec do Terraform ou da pasta CloudFormationcompartilhada no repositório do GitHub DPA para a nova pasta. Para obter instruções, consulte Criar ou adicionar um arquivo a um AWS CodeCommit repositório.

  3. No app-repo repositório, crie uma pasta chamadaentrypoint. Copie o arquivo da pasta Terraform ou do CloudFormationponto de entrada no repositório do GitHub DPA para a nova pasta. Para obter mais informações sobre esses arquivos, consulteEntendendo o arquivo JSON do ponto de entrada.

  4. Examine o diretório Terraform ou CloudFormationexamples e estruture sua app-repo pasta de acordo com esses exemplos. Esses diretórios contêm exemplos de implantação de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) ou de um bucket do Amazon Simple Storage Service (Amazon S3).

  5. Continue até uma das duas seções a seguir:

Crie o pipeline e defina os estágios (Terraform)

  1. Clone o repositório DevOps Pipeline Accelerator (DPA) de sua estação de trabalho local GitHub.

  2. No repositório clonado, navegue até a aws-codepipeline/terraform/pipeline-modules pasta.

  3. No arquivo terraform.tfvars, atualize e valide o estado do Terraform e as variáveis específicas da função (IAM). AWS Identity and Access Management

  4. Crie uma imagem do Docker. Para obter instruções, consulte Criação de imagem do Docker para usar in CodeBuild (GitHub).

  5. Atualize a builder_image variável definida no arquivo terraform.tfvars.

  6. Insira os comandos a seguir: Isso inicializa, visualiza e implanta a infraestrutura por meio do Terraform.

    terraform init terraform plan terraform apply
  7. Faça login no Conta da AWS. No CodePipeline console, confirme se o novo pipeline foi criado.

    Nota: Se a primeira execução estiver em um failed estado, repita a etapa anterior.

  8. Quando o novo CodePipeline pipeline é criado, uma nova função do IAM para AWS CodeBuild é criada automaticamente. O nome dessa função criada automaticamente termina em-codebuild-role. Atualize essa função com as permissões necessárias para implantar sua infraestrutura.

Crie o pipeline e defina estágios (CloudFormation)

  1. Clone o repositório DevOps Pipeline Accelerator (DPA) de sua estação de trabalho local GitHub.

  2. No repositório clonado, navegue até a aws-codepipeline/cloudformation/pipeline-modules pasta.

  3. Implante o modelo CloudFormation pipeline-cft.yaml. A seguir estão os parâmetros obrigatórios que você deve passar para a pilha.

    • ArtifactsBucket— Nome do repositório que contém os artefatos do pipeline a serem atualizados

    • EcrDockerRepository— Identificador uniforme de recursos (URI) do repositório Amazon ECR com a tag image

    • CodeCommitAppRepo— Nome do CodeCommit repositório que contém os modelos

    • CodeCommitBaseRepo— Nome do CodeCommit repositório que contém os arquivos compartilhados

    • CodeCommitRepoBranch— Nome da ramificação do CodeCommit repositório

    • SNSMailAddress— Endereço de e-mail que receberá notificações do Amazon Simple Notification Service (Amazon SNS) sobre o status do pipeline

    Para obter instruções, consulte Como trabalhar com pilhas na CloudFormation documentação.

  4. Faça login na conta da AWS. No CodePipeline console, confirme se o novo pipeline foi criado.  

  5. Quando o novo CodePipeline pipeline é criado, uma nova função do IAM para AWS CodeBuild é criada automaticamente. O nome dessa função criada automaticamente termina em-codebuild-role. Atualize essa função com as permissões necessárias para implantar sua infraestrutura.

Entendendo o arquivo JSON do ponto de entrada

Arquivo de ponto de entrada do Terraform

Esse é o arquivo de configuração principal. Nesse arquivo, você pode personalizar e ativar ou desativar um estágio. Se você desativar um estágio, ele não excluirá nem removerá o estágio do pipeline. Em vez disso, o estágio é ignorado durante o tempo de execução.

{ "build_stage_required" : "true", "test_stage_required" : "true", "predeploy_stage_required": "true", "deploy_stage_required": "true", "postdeploy_stage_required": "true", "destroy_stage_required": "true", "bucket":"tf-state-dpa", # S3 bucket used for Terraform backend "key":"terraform_test.tfstate", # S3 key to be used "region":"us-east-1", "dynamodb_table":"tf-state-dpa" # DynamoDB Table for Terraform backend }

CloudFormation arquivo de ponto de entrada

Esse é o arquivo de configuração principal. Nesse arquivo, você personaliza os estágios e os ativa ou desativa. Se você desativar um estágio, ele não excluirá nem removerá o estágio do pipeline. Em vez disso, o pipeline pula o estágio durante o tempo de execução.

{ "init_stage_required" : "true", "test_stage_required" : "true", "createinfra_stage_required": "true", "envType" : "cloudformation", "stage_required" : "true", "cft_s3_bucket" : "pipeline-bucket", #S3 bucket from the destination account to keep CFT templates "stack_name" : "aws-cft-poc", #CloudFormation stack name "account" : "************", #Destination AWS account to deploy stack "roleName" : "codestack-poc-cross-account-role", #Cross-account IAM role name "region" : "us-east-1", "destroy_stack" : "false" #To destroy the provisioned stack, set this value to "true" }