Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Se utiliza para implementar Terraform y plantillas CodePipeline CloudFormation
Aviso
AWS CodeCommit ya no está disponible para nuevos clientes. Los clientes actuales de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. Más información
En la DPA, se utilizan componentes básicos para crear aceleradores AWS CodePipeline para Terraform e iAC. CloudFormation En esta sección se describe lo siguiente para este caso de uso:
-
Estructura de canalización estandarizada
-
Etapas y trabajos reutilizables
-
Herramientas integradas para escaneos de seguridad
El repositorio de DPA contiene carpetas para Terraform
-
pipeline-modules: esta carpeta contiene el código para implementar la estructura de canalización estandarizada.
-
compartida: esta carpeta contiene archivos de ready-to-use especificaciones de compilación para las etapas y trabajos del DPA.
Requisitos previos
-
Un activo Cuenta de AWS
-
Permisos para aprovisionar recursos mediante plantillas de IaC
-
Permisos para crear AWS CodeCommit repositorios y componentes CodePipeline
Herramientas
-
cfn-lint es un linter
que compara las plantillas CloudFormation YAML o JSON con la especificación del recurso.AWS CloudFormation También realiza otras comprobaciones, como comprobar los valores válidos de las propiedades de los recursos y el cumplimiento de las mejores prácticas. -
cfn_nag
es una herramienta de código abierto que identifica posibles problemas de seguridad en las CloudFormation plantillas mediante la búsqueda de patrones. -
Checkov
es una herramienta de análisis de código estático que comprueba si el IaC está mal configurado en materia de seguridad y conformidad. -
TFLint
es un filtro que comprueba el código de Terraform para detectar posibles errores y si se cumplen las mejores prácticas. -
tfsec
es una herramienta de análisis de código estático que comprueba el código de Terraform para detectar posibles errores de configuración.
Instrucciones
Crea repositorios CodeCommit
-
Cree dos CodeCommit repositorios independientes de la siguiente manera:
-
common-repo
— Este repositorio contiene las bibliotecas compartidas, los archivos de especificaciones de compilación y las dependencias. -
app-repo
— Este repositorio contiene el Terraform o las CloudFormation plantillas para implementar su infraestructura.
Para obtener instrucciones, consulte Crear un AWS CodeCommit repositorio.
-
-
En el
common-repo
repositorio, crea una carpeta con el nombreshared
. Copie los archivos buildspec de Terraformo de la carpeta CloudFormation compartida del repositorio de GitHub DPA a la nueva carpeta. Para obtener instrucciones, consulte Crear o añadir un archivo a un repositorio. AWS CodeCommit -
En el
app-repo
repositorio, cree una carpeta con el nombreentrypoint
. Copie el archivo de la carpeta Terraformo CloudFormation entrypoint del repositorio de GitHub DPA a la nueva carpeta. Para obtener más información sobre estos archivos, consulte. Comprender el archivo JSON del punto de entrada -
Revise el directorio Terraform
o de CloudFormation ejemplos y, a continuación, estructure app-repo
la carpeta de acuerdo con estos ejemplos. Estos directorios contienen ejemplos para implementar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) o un bucket de Amazon Simple Storage Service (Amazon S3). -
Continúe con una de las dos secciones siguientes:
Cree la canalización y defina las etapas (Terraform)
-
Clone el repositorio de DevOps Pipeline Accelerator (DPA)
en su estación de GitHub trabajo local. -
En el repositorio clonado, navegue hasta la carpeta.
aws-codepipeline/terraform/pipeline-modules
-
En el archivo terraform.tfvars, actualiza y valida el estado de Terraform y las variables específicas del rol (IAM). AWS Identity and Access Management
-
Crea una imagen de Docker. Para obtener instrucciones, consulte Creación de imágenes de Docker para usarlas en CodeBuild
()GitHub. -
Actualice la
builder_image
variable definida en el archivo terraform.tfvars. -
Introduzca los comandos siguientes. Esto inicializa, previsualiza y despliega la infraestructura a través de Terraform.
terraform init terraform plan terraform apply
-
Inicie sesión en. Cuenta de AWS En la CodePipeline consola
, confirme que se ha creado la nueva canalización. Nota: Si la primera ejecución está en un
failed
estado, repita el paso anterior. -
Cuando se crea la nueva CodePipeline canalización, se crea automáticamente una nueva función de AWS CodeBuild IAM. El nombre de este rol creado automáticamente termina en
-codebuild-role
. Actualice este rol con los permisos necesarios para implementar su infraestructura.
Cree la canalización y defina las etapas (CloudFormation)
-
Clone el repositorio de DevOps Pipeline Accelerator (DPA)
en su estación GitHub de trabajo local. -
En el repositorio clonado, navegue hasta la carpeta.
aws-codepipeline/cloudformation/pipeline-modules
-
Implemente la plantilla CloudFormation pipeline-cft.yaml. Los siguientes son los parámetros obligatorios que debes pasar a la pila.
-
ArtifactsBucket
— Nombre del repositorio que contiene los artefactos de canalización que se van a actualizar -
EcrDockerRepository
— Identificador uniforme de recursos (URI) del repositorio de Amazon ECR con la etiquetaimage
-
CodeCommitAppRepo
— Nombre del CodeCommit repositorio que contiene las plantillas -
CodeCommitBaseRepo
— Nombre del CodeCommit repositorio que contiene los archivos compartidos -
CodeCommitRepoBranch
— Nombre de la rama del CodeCommit repositorio -
SNSMailAddress
— Dirección de correo electrónico que recibirá las notificaciones del Amazon Simple Notification Service (Amazon SNS) sobre el estado de la canalización
Para obtener instrucciones, consulte Cómo trabajar con pilas en la CloudFormation documentación.
-
-
Inicie sesión en la cuenta de AWS. En la CodePipeline consola
, confirme que se ha creado la nueva canalización. -
Cuando se crea la nueva CodePipeline canalización, se crea automáticamente una nueva función de IAM para AWS CodeBuild . El nombre de este rol creado automáticamente termina en
-codebuild-role
. Actualice este rol con los permisos necesarios para implementar su infraestructura.
Comprender el archivo JSON del punto de entrada
Archivo de puntos de entrada de Terraform
Este es el archivo de configuración principal. En este archivo, puede personalizar y activar o desactivar una etapa. Si deshabilita una etapa, no se elimina ni elimina la etapa de la canalización. En su lugar, la etapa se omite durante el tiempo de ejecución.
{ "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 archivo de punto de entrada
Este es el archivo de configuración principal. En este archivo, puede personalizar las etapas y habilitarlas o deshabilitarlas. Si deshabilita una etapa, no se elimina ni elimina la etapa de la canalización. En su lugar, la canalización omite la etapa durante el tiempo de ejecución.
{ "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" }