

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation de GitLab CI/CD pour déployer Terraform, AWS CDK et des modèles CloudFormation
<a name="using-gitlab-cicd"></a>

DPA contient des modèles GitLab CI/CD que vous utilisez comme éléments de base pour déployer Terraform et le code IaC. AWS Cloud Development Kit (AWS CDK) CloudFormation Cette section décrit les éléments suivants pour ce cas d'utilisation :
+ Structure de pipeline normalisée
+ Stages et travaux réutilisables
+ Règles relatives à la structure du pipeline
+ Outils intégrés pour les scans de sécurité

## Conditions préalables
<a name="prerequisites-gitlab-cicd"></a>
+ Un actif Compte AWS
+ Autorisations pour provisionner des ressources à l'aide de modèles IaC
+ GitLab compte avec tout type de version sans licence, premium ou d'entreprise prenant en charge GitLab les fonctionnalités CI/CD
+ GitLab exécuteurs requis configurés pour exécuter des tâches avec des images Docker spécifiques

## Outils
<a name="tools-gitlab-cicd"></a>
+ [cdk\$1nag](https://github.com/cdklabs/cdk-nag#readme) est un outil open source qui utilise une combinaison de packs de règles pour vérifier que les AWS CDK applications respectent les meilleures pratiques.
+ [AWS CloudFormation Linter (cfn-lint) est un linter](https://github.com/aws-cloudformation/cfn-lint) [qui compare les modèles CloudFormation YAML ou JSON aux spécifications des ressources.AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Il effectue également d'autres contrôles, tels que la vérification de la validité des valeurs des propriétés des ressources et le respect des meilleures pratiques.
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) est un outil open source qui identifie les problèmes de sécurité potentiels dans les CloudFormation modèles en recherchant des modèles.
+ [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) est un outil d'analyse de code statique qui vérifie les erreurs de configuration liées à la sécurité et à la conformité dans iAC.
+ [Keeping Infrastructure as Code Secure (KICS)](https://github.com/Checkmarx/kics) est un outil open source qui identifie les vulnérabilités de sécurité, les problèmes de conformité et les erreurs de configuration de l'infrastructure au début du cycle de développement.
+ [tfsec](https://github.com/aquasecurity/tfsec) est un outil d'analyse de code statique qui vérifie le code Terraform pour détecter d'éventuelles erreurs de configuration.

## Instructions
<a name="instructions-gitlab-cicd"></a>

1. Copiez le `gitlab-ci` répertoire et hébergez-le dans votre groupe GitLab organisationnel.

1. Assurez-vous que les applications peuvent accéder au groupe GitLab organisationnel qui contient les modèles DPA.

1. Pour l'application, incluez le point d'entrée spécifique au DPA pour le pipeline comme suit :
   + 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. Pour l'application, définissez les variables suivantes afin de permettre le déploiement sur `DEV` et `INTEGRATION` les environnements.

   ```
     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
   ```