

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.

# Uso de GitLab CI/CD para implementar Terraform, AWS CDK y plantillas CloudFormation
<a name="using-gitlab-cicd"></a>

El DPA contiene plantillas de GitLab CI/CD que se utilizan como componentes básicos para implementar el código de Terraform e IaC. AWS Cloud Development Kit (AWS CDK) CloudFormation En esta sección se describe lo siguiente para este caso de uso:
+ Estructura de canalización estandarizada
+ Etapas y trabajos reutilizables
+ Reglas de estructura de oleoductos
+ Herramientas integradas para escaneos de seguridad

## Requisitos previos
<a name="prerequisites-gitlab-cicd"></a>
+ Un activo Cuenta de AWS
+ Permisos para aprovisionar recursos mediante plantillas de IaC
+ GitLab cuenta con cualquier tipo de versión sin licencia, premium o empresarial que admita las funciones de CI/CD GitLab 
+ GitLab ejecutores necesarios configurados para ejecutar trabajos con imágenes específicas de Docker

## Tools (Herramientas)
<a name="tools-gitlab-cicd"></a>
+ [cdk\$1nag](https://github.com/cdklabs/cdk-nag#readme) es una herramienta de código abierto que utiliza una combinación de paquetes de reglas para comprobar si AWS CDK las aplicaciones cumplen las mejores prácticas.
+ [AWS CloudFormation Linter (cfn-lint) es un linter](https://github.com/aws-cloudformation/cfn-lint) [que compara las plantillas YAML o JSON con la especificación del recurso. CloudFormation AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) También realiza otras comprobaciones, como verificar los valores válidos de las propiedades de los recursos y el cumplimiento de las prácticas recomendadas.
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) es una herramienta de código abierto que identifica posibles problemas de seguridad en las plantillas mediante la búsqueda de patrones. CloudFormation
+ [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) 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.
+ [Keeping Infrastructure as Code Secure (KICS) es una herramienta de código](https://github.com/Checkmarx/kics) abierto que identifica las vulnerabilidades de seguridad, los problemas de cumplimiento y las configuraciones incorrectas de la infraestructura al principio del ciclo de desarrollo.
+ [tfsec](https://github.com/aquasecurity/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
<a name="instructions-gitlab-cicd"></a>

1. Copia el `gitlab-ci` directorio y alojalo en tu grupo de organización. GitLab

1. Asegúrese de que las aplicaciones puedan acceder al grupo GitLab organizativo que contiene las plantillas de DPA.

1. Para la aplicación, incluya el punto de entrada específico de la DPA para la canalización, de la siguiente manera:
   + Terraform

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/terraform-infrastructure.yml
     ```
   + AWS CDK

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/cdk-infrastructure.yml
     ```
   + CloudFormation

     ```
       include:
           - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME>
             ref: main # best practise to create release tag and use the same 
             file: gitlab-ci/entrypoints/gitlab/cf-infrastructure.yml
     ```

1. Para la aplicación, defina las siguientes variables para permitir la implementación en `DEV` cualquier entorno. `INTEGRATION`

   ```
     AWS_REGION: us-east-2 # region where deployment should happen
     DEV_AWS_ACCOUNT: 123456789012 # Dev environment AWS account number
     DEV_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Dev 
     DEV_DEPLOY: "true" # true / false to enable deployment to DEV environment
     DEV_ENV: "dev" # Dev environment name
     INT_AWS_ACCOUNT: 123456789012 # Integration environment AWS account number
     INT_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Integration 
     INT_DEPLOY: "true" # true / false to enable deployment to Integration environment
     INT_ENV: "int" # Integration environment name
   ```