

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.

# DevOps
<a name="devops-pattern-list"></a>

**Topics**
+ [Accélérez MLOps avec Backstage et les modèles Amazon SageMaker AI en libre-service](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Automatisez AWS les opérations d'infrastructure en utilisant Amazon Bedrock](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Automatisez les CloudFront mises à jour lorsque les points de terminaison de l'équilibreur de charge changent à l'aide de Terraform](automate-cloudfront-updates-when-load-balancer-endpoints-change.md)
+ [Automatisez les CodeGuru révisions Amazon pour les applications AWS CDK Python à l'aide d' GitHub Actions](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatisez le déploiement de lacs de AWS Supply Chain données dans une configuration multi-référentiels à l'aide d' GitHub Actions, Artifactory et Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatisez l'évaluation des ressources AWS](automate-aws-resource-assessment.md)
+ [Installez automatiquement les systèmes SAP à l'aide d'outils open source](install-sap-systems-automatically-by-using-open-source-tools.md)
+ [Automatisez le déploiement du portefeuille et des produits AWS Service Catalog à l'aide d'AWS CDK](automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.md)
+ [Automatisez la gestion dynamique du pipeline pour le déploiement de solutions de correctifs dans les environnements Gitflow en utilisant et AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Automatisez la suppression des AWS CloudFormation piles et des ressources associées](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatisez l'ingestion et la visualisation des métriques personnalisées Amazon MWAA sur Amazon Managed Grafana à l'aide de Terraform](automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.md)
+ [Automatisez le déploiement d'ensembles de piles à l'aide d'AWS CodePipeline et d'AWS CodeBuild](automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.md)
+ [Associez automatiquement une politique gérée par AWS pour Systems Manager aux profils d' EC2 instance à l'aide de Cloud Custodian et d'AWS CDK](automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.md)
+ [Créez automatiquement des CI/CD pipelines et des clusters Amazon ECS pour les microservices à l'aide d'AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Créez et envoyez des images Docker vers Amazon ECR à l'aide d' GitHub Actions et de Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Créez et testez des applications iOS avec AWS CodeCommit CodePipeline, AWS et AWS Device Farm](build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm.md)
+ [Configurer l'authentification TLS mutuelle pour les applications exécutées sur Amazon EKS](configure-mutual-tls-authentication-for-applications-running-on-amazon-eks.md)
+ [Automatisez la création de ressources Amazon WorkSpaces Applications à l'aide de AWS CloudFormation](automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.md)
+ [Créez un analyseur de journaux personnalisé pour Amazon ECS à l'aide d'un routeur de journaux Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Créez un cadre d'orchestration des ressources piloté par API à l'aide GitHub d'Actions et de Terragrunt](create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.md)
+ [Créez des pull requests automatisées pour l'infrastructure gérée par Terraform à l'aide AWS d'Actions GitHub](create-automated-pull-requests-for-terraform-managed-aws-infrastructure.md)
+ [Créez automatiquement des pipelines CI dynamiques pour les projets Java et Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Déployez des CloudWatch canaris Synthetics à l'aide de Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Déployez une ChatOps solution pour gérer les résultats du scan SAST en utilisant Amazon Q Developer dans les applications de chat, les actions personnalisées et CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Déployez des systèmes agentic sur Amazon Bedrock avec le framework CrewAI en utilisant Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Déployer une tâche AWS Glue avec un pipeline AWS CodePipeline CI/CD](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Déployez du code dans plusieurs régions AWS à l'aide d'AWS CodePipeline CodeCommit, AWS et AWS CodeBuild](deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild.md)
+ [Déployez des charges de travail à partir de DevOps pipelines Azure vers des clusters Amazon EKS privés](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Exécutez des requêtes SQL Amazon Redshift à l'aide de Terraform](execute-redshift-sql-queries-using-terraform.md)
+ [Exportez les rapports AWS Backup de l'ensemble d'une organisation dans AWS Organizations sous forme de fichier CSV](export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.md)
+ [Exporter les balises d'une liste d' EC2 instances Amazon vers un fichier CSV](export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.md)
+ [Générez un CloudFormation modèle AWS contenant les règles gérées par AWS Config à l'aide de Troposphere](generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.md)
+ [Donnez aux instances de SageMaker bloc-notes un accès temporaire à un CodeCommit référentiel dans un autre compte AWS](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Mettre en œuvre une stratégie GitHub de branchement Flow pour les environnements multi-comptes DevOps](implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.md)
+ [Mettre en œuvre une stratégie de branchement Gitflow pour les environnements multi-comptes DevOps](implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.md)
+ [Mettre en œuvre une stratégie de branchement Trunk pour les environnements multi-comptes DevOps](implement-a-trunk-branching-strategy-for-multi-account-devops-environments.md)
+ [Mettez en œuvre une analyse Checkov personnalisée et centralisée pour appliquer la politique avant de déployer AWS l'infrastructure](centralized-custom-checkov-scanning.md)
+ [Implémentez les diagnostics et le dépannage de Kubernetes basés sur l'IA grâce à l'intégration de K8sGPT et Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Détectez automatiquement les modifications et lancez différents CodePipeline pipelines pour un monorepo dans CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Intégrer un référentiel Bitbucket à AWS Amplify à l'aide d'AWS CloudFormation](integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.md)
+ [Lancez un CodeBuild projet sur des comptes AWS à l'aide de Step Functions et d'une fonction proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Gérez le basculement multi-AZ pour les clusters EMR à l'aide d'Application Recovery Controller](multi-az-failover-spark-emr-clusters-arc.md)
+ [Gérez les blue/green déploiements de microservices vers plusieurs comptes et régions à l'aide des services de code AWS et des clés multirégionales AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Surveillez les référentiels Amazon ECR pour détecter les autorisations génériques à l'aide d'AWS et d'AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Optimisez les déploiements multicomptes sans serveur en utilisant les flux de travail et AWS CDK Actions GitHub](optimize-multi-account-serverless-deployments.md)
+ [Provisionner AWS Service Catalog des produits basés sur AWS CloudFormation des modèles à l'aide d' GitHub actions](provision-aws-service-catalog-products-using-github-actions.md)
+ [Fournissez des rôles IAM avec le moindre privilège en déployant une solution de distribution automatique de rôles](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)
+ [Publier CloudWatch les statistiques Amazon dans un fichier CSV](publish-amazon-cloudwatch-metrics-to-a-csv-file.md)
+ [Supprimez les EC2 entrées Amazon Comptes AWS de l'autre côté AWS Managed Microsoft AD en utilisant l' AWS Lambda automatisation](remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.md)
+ [Supprimez EC2 les entrées Amazon dans le même Compte AWS formulaire AWS Managed Microsoft AD en utilisant l' AWS Lambda automatisation](remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.md)
+ [Exécutez des tests unitaires pour les tâches ETL Python en AWS Glue utilisant le framework pytest](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [Configuration d'un CI/CD pipeline à l'aide d'AWS CodePipeline et d'AWS CDK](set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.md)
+ [Configurez une journalisation centralisée à l'échelle de l'entreprise à l'aide de Terraform](set-up-centralized-logging-at-enterprise-scale-by-using-terraform.md)
+ [Configurer le end-to-end chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Simplifiez le déploiement d'applications multi-locataires Amazon EKS en utilisant Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Simplifiez le développement et le déploiement des robots Amazon Lex à l'aide d'un flux de travail automatisé](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Coordonnez la dépendance des ressources et l'exécution des tâches à l'aide de la structure AWS Fargate WaitCondition hook](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Utiliser des référentiels sources Git tiers dans AWS CodePipeline](use-third-party-git-source-repositories-in-aws-codepipeline.md)
+ [Créez un CI/CD pipeline pour valider les configurations Terraform à l'aide d'AWS CodePipeline](create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.md)
+ [Plus de modèles](devops-more-patterns-pattern-list.md)

# Accélérez MLOps avec Backstage et les modèles Amazon SageMaker AI en libre-service
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates"></a>

*Ashish Bhatt, Shashank Hirematt et Shivanshu Suryakar, Amazon Web Services*

## Résumé
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-summary"></a>

Organisations qui utilisent des systèmes d'opérations d'apprentissage automatique (MLOps) sont confrontées à des défis importants en matière de mise à l'échelle, de standardisation et de sécurisation de leur infrastructure de machine learning. Ce modèle introduit une approche transformatrice qui combine [Backstage](https://backstage.io/), un portail de développement open source, avec [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/) et des modules d'infrastructure en tant que code (iAc) renforcés afin d'améliorer la manière dont vos équipes de science des données peuvent développer, déployer et gérer des flux de travail de machine learning.

Les modules IaC pour ce modèle sont fournis dans le référentiel GitHub [AWS AIOps des modules](https://github.com/awslabs/aiops-modules/tree/main/modules/sagemaker). Ces modules proposent des modèles prédéfinis pour configurer l'infrastructure ML et créer des environnements ML cohérents. Cependant, les data scientists ont souvent du mal à utiliser directement ces modèles car ils nécessitent une expertise en matière d'infrastructure. L'ajout d'un portail de développement tel que Backstage permet aux data scientists de déployer des environnements ML standardisés sans avoir à comprendre les détails de l'infrastructure sous-jacente.

En utilisant Backstage comme plateforme en libre-service et en intégrant des modèles d' SageMaker IA préconfigurés, vous pouvez :
+ Réduisez le délai de rentabilisation de vos initiatives de machine learning.
+ Contribuez à renforcer la cohérence de la sécurité et de la gouvernance.
+ Fournissez aux data scientists des environnements normalisés et conformes.
+ Réduisez les frais d'exploitation et la complexité de l'infrastructure.

Ce modèle fournit une solution qui répond aux défis critiques MLOps et fournit également un cadre évolutif et reproductible qui permet l'innovation tout en respectant les normes organisationnelles.

**Public cible**

Ce modèle est destiné à un large public impliqué dans le ML, l'architecture cloud et l'ingénierie des plateformes au sein d'une organisation. Cela inclut notamment les éléments suivants :
+ **Les ingénieurs de ML** qui souhaitent standardiser et automatiser les déploiements de flux de travail ML.
+ **Les scientifiques des données** qui souhaitent accéder en libre-service à des environnements ML préconfigurés et conformes.
+ **Ingénieurs de plateforme** chargés de créer et de maintenir des plateformes de développement internes et une infrastructure partagée.
+ Des **architectes cloud** qui conçoivent des solutions cloud évolutives, sécurisées et économiques pour MLOps.
+ **DevOps ingénieurs** intéressés par l'extension des pratiques d'intégration continue et de livraison continue (CI/CD) au provisionnement de l'infrastructure ML et aux flux de travail.
+ **Responsables techniques et responsables** qui supervisent les initiatives de machine learning et souhaitent améliorer la productivité, la gouvernance et les délais de mise sur le marché des équipes.

Pour plus d'informations sur MLOps les défis, les MLOps modules d' SageMaker IA et la manière dont la solution fournie par ce modèle peut répondre aux besoins de vos équipes de ML, consultez la section [Informations supplémentaires](#accelerate-mlops-with-backstage-and-sagemaker-templates-additional).

## Conditions préalables et limitations
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-prereqs"></a>

**Conditions préalables**
+ Gestion des identités et des accès AWS [rôles et autorisations](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#prerequisites) (IAM) pour le provisionnement de ressources dans votre Compte AWS
+ Compréhension des concepts d'[Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), [SageMaker des projets](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-whatis.html), des [SageMaker pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html) et [du SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)
+ Compréhension des principes de l'IaC et expérience avec des outils tels que [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)

**Limites**
+ **Couverture limitée des modèles**. Actuellement, la solution ne prend en charge que les AIOps modules SageMaker liés à l'IA issus de la [AIOps solution](https://github.com/awslabs/aiops-modules) globale. D'autres modules, tels que Ray on Amazon Elastic Kubernetes Service (Amazon EKS), Apache Airflow et MLflow Finetuning for Amazon Bedrock, ne sont pas encore disponibles sous forme de modèles Backstage.
+ **Paramètres par défaut non configurables**. Les modèles utilisent des configurations par défaut fixes issues des AIOps SageMaker modules, sans aucune personnalisation. Vous ne pouvez pas modifier les types d'instances, les tailles de stockage, les configurations réseau ou les politiques de sécurité via l'interface Backstage, ce qui limite la flexibilité pour des cas d'utilisation spécifiques.
+ **AWS-support uniquement**. La plateforme est conçue exclusivement pour les AWS déploiements et ne prend pas en charge les scénarios multicloud. Organisations qui utilisent des services cloud externes AWS Cloud ne peuvent pas utiliser ces modèles pour leurs besoins en infrastructure de machine learning.
+ **Gestion manuelle des informations d'identification**. Vous devez fournir manuellement vos AWS informations d'identification pour chaque déploiement. Cette solution ne permet pas d'intégration avec les fournisseurs d'identité d'entreprise ni de rotation automatique des informations d'identification. AWS IAM Identity Center
+ **Gestion du cycle de vie limitée**. Les modèles ne disposent pas de fonctionnalités complètes de gestion du cycle de vie des ressources, telles que des politiques de nettoyage automatisées, des recommandations d'optimisation des coûts et la détection de la dérive de l'infrastructure. Vous devez gérer et surveiller manuellement les ressources déployées après leur création.

## Architecture
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-architecture"></a>

Le schéma suivant montre l'architecture de la solution pour un portail de développement unifié qui normalise et accélère le déploiement de l'infrastructure ML avec l' SageMaker IA dans tous les environnements.

![\[Architecture pour un portail de développement unifié avec Backstage, CNOE, GitHub Actions et Seed-Farmer.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c16160cf-d637-423e-93a7-485ffbb28646/images/233adab3-83cf-42f3-a1de-72d0b8ade5ae.png)


Dans cette architecture :

1. AWS les [plans de modernisation des applications](https://github.com/aws-samples/appmod-blueprints.git) fournissent la configuration de l'infrastructure avec un cluster [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) comme base pour le framework [Cloud Native Operational Excellence (CNOE)](https://cnoe.io/). Cette solution complète répond aux défis complexes de gestion de l'infrastructure native du cloud en fournissant une plateforme de développement interne (IDP) évolutive. Les plans proposent une approche structurée pour mettre en place une infrastructure robuste et flexible capable de s'adapter à l'évolution de vos besoins organisationnels.

1. Le framework open source CNOE consolide les DevOps outils et résout la fragmentation de l'écosystème grâce à une approche d'ingénierie de plate-forme unifiée. En réunissant des outils et des technologies disparates, il simplifie le paysage complexe du développement cloud natif, afin que vos équipes puissent se concentrer sur l'innovation plutôt que sur la gestion de la chaîne d'outils. Le framework fournit une méthodologie standardisée pour sélectionner, intégrer et gérer les outils de développement.

1. Avec CNOE, Backstage est déployé en tant que out-of-the-box solution au sein du cluster Amazon EKS. [Backstage est doté d'une authentification robuste via [Keycloak](https://www.keycloak.org/) et de flux de travail de déploiement complets via Argo CD.](https://argo-cd.readthedocs.io/en/stable/) Cette plate-forme intégrée crée un environnement centralisé pour gérer les processus de développement et fournit aux équipes un endroit unique pour accéder, déployer et surveiller leur infrastructure et leurs applications dans plusieurs environnements.

1. Un GitHub référentiel contient des modèles de AIOps logiciels préconfigurés qui couvrent l'ensemble du cycle de vie de l' SageMaker IA. Ces modèles répondent aux besoins critiques en matière d'infrastructure ML, notamment le provisionnement de SageMaker Studio, la formation des modèles, les pipelines d'inférence et la surveillance des modèles. Ces modèles vous aident à accélérer vos initiatives de machine learning et à garantir la cohérence entre les différents projets et équipes.

1. [GitHub Actions](https://github.com/features/actions) implémente un flux de travail automatisé qui déclenche dynamiquement le provisionnement des ressources via l'utilitaire [Seed-Farmer](https://github.com/awslabs/seed-farmer). Cette approche intègre le catalogue Backstage au référentiel des AIOps modules et crée un processus de déploiement d'infrastructure rationalisé. L'automatisation réduit les interventions manuelles, minimise les erreurs humaines et garantit une création d'infrastructure rapide et cohérente dans différents environnements.

1. [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)Cela vous aide à définir et à provisionner l'infrastructure sous forme de code, et garantit un déploiement des ressources reproductible, sécurisé et conforme sur l'ensemble des spécifications Comptes AWS. Cette approche fournit une gouvernance maximale avec une intervention manuelle minimale, ce qui vous permet de créer des modèles d'infrastructure standardisés qui peuvent être facilement répliqués, contrôlés par version et audités.

## Outils
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/) est un service de machine learning géré qui vous aide à créer et à former des modèles de machine learning, puis à les déployer dans un environnement hébergé prêt pour la production.

**Autres outils**
+ [Backstage](https://backstage.io/) est un framework open source qui vous aide à créer des portails de développement internes.
+ [GitHub Actions](https://github.com/features/actions) est une CI/CD plateforme qui automatise les flux de travail de développement de logiciels, y compris les tâches telles que la création, le test et le déploiement de code.

**Référentiels de code**

Ce modèle utilise le code et les modèles des GitHub référentiels suivants :
+ [AIOps plate-forme de développement interne (IDP) avec référentiel Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ SageMaker Modules liés à l'IA issus du référentiel de [AWS AIOps modules](https://github.com/awslabs/aiops-modules)
+ [Ingénierie moderne sur le AWS](https://github.com/aws-samples/appmod-blueprints) référentiel

**Mise en œuvre**

Cette implémentation utilise un modèle de déploiement de niveau production pour Backstage, issu de l'[ingénierie moderne sur le référentiel](https://github.com/aws-samples/appmod-blueprints). AWS Cette approche simplifie considérablement le processus de configuration tout en intégrant les AWS meilleures pratiques en matière de sécurité et d'évolutivité.

La section [Epics](#accelerate-mlops-with-backstage-and-sagemaker-templates-epics) de ce modèle décrit l'approche de mise en œuvre. Pour obtenir des instructions de step-by-step déploiement détaillées, consultez le [guide de déploiement](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md) complet disponible sur la [plateforme de développement AIOps interne (IDP) avec le référentiel Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). La mise en œuvre inclut :
+ Déploiement initial de la plateforme Backstage
+ Intégration de modèles de SageMaker logiciels à Backstage
+ Utilisation et maintenance des modèles Backstage

Le guide de déploiement inclut également des conseils pour la maintenance continue, le dépannage et le dimensionnement de la plateforme.

## Bonnes pratiques
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-best-practices"></a>

Suivez ces bonnes pratiques pour garantir la sécurité, la gouvernance et l'excellence opérationnelle lors de la mise en œuvre de votre MLOps infrastructure.

**Gestion des modèles**
+ N'apportez jamais de modifications importantes aux modèles dynamiques.
+ Testez toujours les mises à jour de manière approfondie avant le déploiement en production.
+ Conservez des versions de modèles claires et bien documentées.

**Sécurité**
+ Épinglez GitHub les actions à des algorithmes de hachage sécurisés spécifiques (SHAs) pour aider à prévenir les attaques contre la chaîne d'approvisionnement.
+ Utilisez des rôles IAM dotés du moindre privilège avec des autorisations détaillées.
+ Stockez les informations d'identification sensibles dans [GitHub Secrets](https://docs.github.com/en/actions/concepts/security/secrets) et [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html).
+ Ne codez jamais en dur les informations d'identification dans les modèles.

**Gouvernance et suivi**
+ Mettez en œuvre des normes complètes de balisage des ressources.
+ Permettez un suivi précis des coûts et une surveillance de la conformité.
+ Maintenez des pistes d'audit claires pour les modifications de l'infrastructure.

Ce guide fournit une base solide pour la mise en œuvre de ces meilleures pratiques en utilisant les modules Backstage, SageMaker AI et IaC.

## Épopées
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-epics"></a>

### Configurez votre environnement ML
<a name="set-up-your-ml-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez Backstage. | Cette étape utilise les plans de l'[ingénierie moderne sur](https://github.com/aws-samples/appmod-blueprints) le AWS référentiel pour créer une infrastructure robuste et évolutive qui intègre plusieurs Services AWS afin de créer un IDP centralisé pour les flux de travail ML. Suivez les instructions de la [section Déploiement Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#backstage-deployment) du guide de déploiement pour cloner le référentiel, installer les dépendances, AWS CDK configurer les variables d'environnement et déployer la plateforme Backstage.L'infrastructure utilise Amazon EKS comme plate-forme d'orchestration de conteneurs pour le déploiement de composants IDP. L'architecture Amazon EKS inclut des configurations réseau sécurisées pour établir une isolation stricte du réseau et contrôler les modèles d'accès. La plateforme intègre des mécanismes d'authentification pour sécuriser l'accès des utilisateurs à tous les services et environnements. | Ingénieur de plateforme | 
| Configurez vos modèles d' SageMaker IA. | Cette étape utilise les scripts de la [plateforme de développement GitHub AIOps interne (IDP) avec le référentiel Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). Suivez les instructions de la section de [configuration du SageMaker modèle](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-template-setup) du guide de déploiement pour cloner le référentiel, configurer les prérequis et exécuter le script de configuration.Ce processus crée un référentiel contenant les modèles d' SageMaker IA nécessaires à l'intégration avec Backstage. | Ingénieur de plateforme | 
| Intégrez les**** modèles d' SageMaker IA à Backstage. | Suivez les instructions de la section [Intégration des SageMaker modèles](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-templates-integration) du guide de déploiement pour enregistrer vos modèles d' SageMaker IA.Cette étape intègre les AIOps modules (modèles d'SageMaker IA de la dernière étape) dans votre déploiement Backstage afin que vous puissiez répondre en libre-service à vos besoins en matière d'infrastructure ML. | Ingénieur de plateforme | 
| Utilisez les modèles d' SageMaker IA de Backstage. | Suivez les instructions de la section [Utilisation de SageMaker modèles](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#using-sagemaker-templates) du guide de déploiement pour accéder au portail Backstage et créer l'environnement ML dans SageMaker Studio.Dans le portail Backstage, vous pouvez choisir parmi les modèles d' SageMaker IA disponibles, notamment des options pour les environnements SageMaker Studio, les SageMaker blocs-notes, les modèles de SageMaker projets personnalisés et les pipelines de déploiement de modèles. Une fois que vous avez fourni les paramètres de configuration, la plateforme crée automatiquement des référentiels dédiés et provisionne les AWS ressources via GitHub Actions et Seed-Farmer. Vous pouvez suivre les progrès via GitHub les journaux d'actions et le catalogue de composants Backstage. | Scientifique des données, Ingénieur de données, Développeur | 

### Gérez les modèles pour la gouvernance et la conformité
<a name="manage-templates-for-governance-and-compliance"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour les modèles d' SageMaker IA. | Pour mettre à jour un modèle d' SageMaker IA dans Backstage, procédez comme suit.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingénieur de plateforme | 
| Créez et gérez plusieurs versions d'un modèle. | Pour des modifications importantes ou des mises à niveau, vous souhaiterez peut-être créer plusieurs versions d'un modèle d' SageMaker IA.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingénieur de plateforme | 

### Étendez votre environnement ML
<a name="extend-your-ml-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Élargissez la couverture des modèles au-delà de SageMaker l'IA. | La solution actuelle n'implémente que des AIOps modèles SageMaker liés à l'IA. Vous pouvez étendre l'environnement ML en ajoutant des [AIOps modules](https://github.com/awslabs/aiops-modules) et en intégrant des modèles logiciels personnalisés pour des applications supplémentaires Services AWS et des applications. Vous pouvez les créer en utilisant l'interface du concepteur de modèles dans Backstage, en implémentant des actions d'échafaudage personnalisées ou en gérant des référentiels de modèles avec des métadonnées standard. La plateforme prend en charge la gestion des versions des modèles, le partage entre équipes et les flux de travail de validation pour des raisons de cohérence. Pour plus d'informations, consultez la [documentation Backstage](https://backstage.io/docs/overview/what-is-backstage/).Vous pouvez également implémenter des modèles d'héritage pour créer des versions spécialisées des modèles de base. Cette extensibilité vous permet de gérer diverses AWS ressources et applications au-delà de l' SageMaker IA tout en préservant l'expérience simplifiée des développeurs et en respectant les normes de votre entreprise. | Ingénieur de plateforme | 
| Utilisez l'injection dynamique de paramètres. | Les modèles actuels utilisent des configurations par défaut sans personnalisation et exécutent la CLI Seed-Farmer pour déployer des ressources avec des variables par défaut. Vous pouvez étendre la configuration par défaut en utilisant l'injection dynamique de paramètres pour les configurations spécifiques au module. | Ingénieur de plateforme | 
| Améliorez la sécurité et la conformité. | Pour renforcer la sécurité lors de la création de ressources AWS, vous pouvez activer l'intégration du contrôle d'accès basé sur les rôles (RBAC) avec l'authentification unique (SSO), le SAML, OpenID Connect (OIDC) et les politiques en tant que code d'application. | Ingénieur de plateforme | 
| Ajoutez un nettoyage automatique des ressources. | Vous pouvez activer des fonctionnalités pour les politiques de nettoyage automatisées et également ajouter la détection et la correction des dérives de l'infrastructure. | Ingénieur de plateforme | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez l'infrastructure des coulisses et les ressources d' SageMaker IA. | Lorsque vous avez fini d'utiliser votre environnement ML, suivez les instructions de la section [Nettoyage et gestion des ressources](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#cleanup-and-resource-management) du guide de déploiement pour supprimer l'infrastructure Backstage et supprimer les ressources d' SageMaker IA de votre environnement de machine learning. | Ingénieur de plateforme | 

## Résolution des problèmes
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| AWS CDK échecs de bootstrap |  Vérifiez les AWS informations d'identification et la configuration de la région. | 
| Problèmes d'accès au cluster Amazon EKS | Vérifiez la configuration de **kubectl** et les autorisations IAM. | 
| Problèmes de connectivité avec Application Load Balancer | Assurez-vous que les groupes de sécurité autorisent le trafic entrant sur le port 80/443. | 
| GitHub problèmes d'intégration | Vérifiez les autorisations des GitHub jetons et l'accès à l'organisation. | 
| SageMaker Échec du déploiement de l'IA | Vérifiez les [Service AWS quotas](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) et les autorisations IAM. | 

## Ressources connexes
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-resources"></a>
+ [Ingénierie de plateforme](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-caf-platform-perspective/platform-eng.html) (dans le guide *AWS Cloud Adoption Framework : Platform perspective*)
+ [Documentation Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/)
+ [Modèles de logiciels Backstage (site](https://backstage.io/docs/features/software-templates/) Web Backstage)
+ [AIOps référentiel de modules](https://github.com/awslabs/aiops-modules) (collection de modules iAc réutilisables pour le ML)
+ [AIOps plate-forme de développement interne (IDP) avec référentiel Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ [Ingénierie moderne sur le AWS](https://github.com/aws-samples/appmod-blueprints) référentiel
+ [Site Web d'excellence opérationnelle native dans le cloud (CNOE)](https://cnoe.io/)

## Informations supplémentaires
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-additional"></a>

**Défis commerciaux**

Organisations qui lancent ou étendent leurs MLOps initiatives sont fréquemment confrontées aux défis commerciaux et techniques suivants :
+ **Environnements incohérents**. L'absence d'environnements de développement et de déploiement standardisés complique la collaboration et augmente les risques liés au déploiement.
+ **Frais généraux liés au provisionnement manuel**. La configuration manuelle d'une infrastructure de machine learning à l'aide de SageMaker Studio, de buckets Amazon Simple Storage Service (Amazon S3), de rôles IAM et de pipelines est chronophage CI/CD et source d'erreurs, et détourne les data scientists de leur tâche principale, à savoir le développement de modèles.
+ **Manque de découvrabilité et de réutilisation**. L'absence de catalogue centralisé complique la recherche de modèles, d'ensembles de données et de pipelines de machine learning existants. Cela entraîne des tâches redondantes et des occasions manquées de réutilisation.
+ **Gouvernance et conformité complexes**. Il peut être difficile de s'assurer que les projets de machine learning respectent les politiques de sécurité organisationnelles, les réglementations en matière de confidentialité des données et les normes de conformité telles que la loi HIPAA (Health Insurance Portability and Accountability Act) et le règlement général sur la protection des données (RGPD) sans garde-fous automatisés.
+ Le **délai de valorisation est lent**. L'effet cumulatif de ces défis entraîne des cycles de vie prolongés des projets de ML et retarde la réalisation de la valeur commerciale des investissements dans le ML.
+ **Risques liés à la sécurité**. Des configurations et des processus manuels incohérents peuvent introduire des failles de sécurité qui compliquent l'application du principe du moindre privilège et l'isolation du réseau.

Ces problèmes prolongent les cycles de développement, augmentent les frais opérationnels et introduisent des risques de sécurité. La nature itérative du machine learning nécessite des flux de travail reproductibles et une collaboration efficace.

Gartner prévoit que d'ici 2026, 80 % des entreprises d'ingénierie logicielle disposeront d'équipes de plateforme. (Voir L'[ingénierie des plateformes permet aux développeurs d'être meilleurs, plus rapides et plus heureux](https://www.gartner.com/en/experts/top-tech-trends-unpacked-series/platform-engineering-empowers-developers) sur le site Web de Gartner.) Cette prédiction met en évidence la manière dont un IDP peut accélérer la livraison de logiciels. En tant qu'IDP, Backstage aide à rétablir l'ordre dans une infrastructure complexe afin que les équipes puissent fournir un code de haute qualité rapidement et en toute sécurité. L'intégration de Backstage à des AIOps modules renforcés vous permet de passer d'un dépannage réactif à une prévention proactive.

**MLOps SageMaker modules**

Les [AIOps modules](https://github.com/awslabs/aiops-modules) du GitHub référentiel utilisés pour ce modèle fournissent une base précieuse pour la standardisation AWS via un MLOps IAc réutilisable et renforcé. Ces modules encapsulent les meilleures pratiques pour le provisionnement de SageMaker projets, de pipelines et de ressources réseau et de stockage associées, dans le but de réduire la complexité et d'accélérer la configuration des environnements de machine learning. Vous pouvez utiliser ces modèles pour différents cas d' MLOps utilisation afin d'établir des modèles de déploiement cohérents et sécurisés qui favorisent une approche plus gouvernée et plus efficace des flux de travail de machine learning. 

L'utilisation directe AIOps des modules nécessite souvent que les équipes de la plateforme déploient et gèrent ces modèles IaC, ce qui peut présenter des défis pour les data scientists qui souhaitent accéder en libre-service. La découverte et la compréhension des modèles disponibles, la configuration des paramètres nécessaires et le déclenchement de leur déploiement peuvent nécessiter de naviguer dans les Service AWS consoles ou d'interagir directement avec les outils IaC. Cela peut créer des frictions, augmenter la charge cognitive des data scientists qui préfèrent se concentrer sur les tâches de machine learning, et potentiellement entraîner un paramétrage incohérent ou des écarts par rapport aux normes organisationnelles si ces modèles ne sont pas gérés via une interface centralisée et conviviale. L'intégration de ces puissants AIOps modules à un IDP tel que Backstage permet de relever ces défis en fournissant une expérience rationalisée en libre-service, une meilleure visibilité et des contrôles de gouvernance renforcés pour l'utilisation de ces éléments de base standardisés. MLOps 

**Dans les coulisses en tant qu'IDP**

Une plate-forme de développement interne (IDP) est une couche en libre-service créée par les équipes de plateforme pour simplifier et normaliser la façon dont les développeurs créent, déploient et gèrent les applications. Il réduit la complexité de l'infrastructure et permet aux développeurs d'accéder facilement aux outils, aux environnements et aux services via une interface unifiée.

L'objectif principal d'un IDP est d'améliorer l'expérience et la productivité des développeurs en :
+ Activation du libre-service pour des tâches telles que la création et le déploiement de services.
+ Promouvoir la cohérence et la conformité grâce à des modèles standard.
+ Intégrer des outils tout au long du cycle de développement (CI/CD, surveillance et documentation).

Backstage est un portail de développement open source créé par Spotify et qui fait désormais partie de la Cloud Native Computing Foundation (CNCF). Il aide les organisations à créer leur propre IDP en fournissant une plate-forme centralisée et extensible pour gérer les composants logiciels, les outils et la documentation. Avec Backstage, les développeurs peuvent :
+ Découvrez et gérez tous les services internes via un catalogue de logiciels.
+ Créez de nouveaux projets en utilisant des modèles prédéfinis via le plugin Scaffolder.
+ Accédez à des outils intégrés tels que des CI/CD pipelines, des tableaux de bord Kubernetes et des systèmes de surveillance à partir d'un seul endroit.
+ Maintenez une documentation cohérente basée sur le markdown grâce à. TechDocs

**FAQ**

**Quelle est la différence entre l'utilisation de ce modèle Backstage et le déploiement manuel de SageMaker Studio via la SageMaker console ?**

Le modèle Backstage offre plusieurs avantages par rapport au déploiement manuel sur AWS console, notamment des configurations standardisées conformes aux meilleures pratiques organisationnelles, le déploiement automatisé d'iAc à l'aide de Seed-Farmer et le AWS CDK, des politiques de sécurité et des mesures de conformité intégrées, ainsi que l'intégration aux flux de travail des développeurs de votre organisation via le biais de celui-ci. GitHub Le modèle crée également des déploiements reproductibles avec contrôle de version, ce qui facilite la réplication des environnements à différentes étapes (développement, préparation, production) et garantit la cohérence entre les équipes. En outre, le modèle inclut des fonctionnalités de nettoyage automatique et s'intègre au système de gestion des identités de votre organisation via Backstage. Le déploiement manuel via la console nécessite une AWS expertise approfondie et ne fournit pas de contrôle de version ni le même niveau de standardisation et de gouvernance que celui proposé par le modèle. Pour ces raisons, les déploiements de console sont plus adaptés aux expériences ponctuelles que les environnements ML de production.

**Qu'est-ce que Seed-Farmer et pourquoi cette solution l'utilise-t-elle ?**

Seed-Farmer est un outil d'orchestration de AWS déploiement qui gère les modules d'infrastructure en utilisant le. AWS CDK Ce modèle utilise Seed-Farmer car il fournit des composants d'infrastructure standardisés et réutilisables spécialement conçus pour les AI/ML charges de travail, gère Services AWS automatiquement les dépendances complexes et garantit des déploiements cohérents dans différents environnements.

**Dois-je installer le pour AWS CLI utiliser ces modèles ?**

Non, il n'est pas nécessaire de l'installer AWS CLI sur votre ordinateur. Les modèles s'exécutent entièrement via GitHub Actions dans le cloud. Vous fournissez vos AWS informations d'identification (clé d'accès, clé secrète et jeton de session) via l'interface Backstage, et le déploiement s'effectue automatiquement dans l'environnement GitHub Actions.

**Combien de temps faut-il pour déployer un environnement SageMaker Studio ?**

Un déploiement de SageMaker Studio prend généralement 15 à 25 minutes. Cela inclut le AWS CDK démarrage (2 à 3 minutes), la configuration de la chaîne d'outils Seed-Farmer (3 à 5 minutes) et la création de ressources (10 à 15 minutes). L'heure exacte dépend de votre configuration réseau Région AWS et de la complexité de celle-ci.

**Puis-je déployer plusieurs SageMaker environnements dans le même environnement Compte AWS ?**

Oui, vous pouvez. Chaque déploiement crée des ressources avec des noms uniques basés sur le nom du composant que vous indiquez dans le modèle. Attention toutefois aux Service AWS quotas : chaque compte peut avoir un nombre limité de SageMaker domaines par région. [Vérifiez donc vos quotas](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) avant de créer plusieurs environnements.

# Automatisez AWS les opérations d'infrastructure en utilisant Amazon Bedrock
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock"></a>

*Ishwar Chauthaiwale et Anand Bukkapatnam Tirumala, Amazon Web Services*

## Résumé
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-summary"></a>

Dans les solutions cloud natives, l'automatisation des opérations d'infrastructure communes joue un rôle essentiel dans le maintien d'environnements efficaces, sécurisés et rentables. La gestion manuelle des opérations prend du temps et est sujette à des erreurs humaines. En outre, les membres de l'équipe ayant différents niveaux d' AWS expertise doivent effectuer ces tâches tout en garantissant le respect des protocoles de sécurité. Ce modèle montre comment utiliser Amazon Bedrock pour automatiser les opérations d' AWS infrastructure courantes par le biais du traitement du langage naturel (NLP).

Ce modèle peut aider les entreprises à développer un code réutilisable, modulaire et sécurisé pour déployer une infrastructure générative basée sur l'IA dans plusieurs environnements. En se concentrant sur l'infrastructure en tant que code (IaC) et sur l'automatisation, il offre des DevOps avantages clés, notamment le contrôle des versions, des déploiements cohérents, une réduction des erreurs, un provisionnement plus rapide et une collaboration améliorée.

Le modèle met en œuvre une architecture sécurisée qui permet aux équipes de gérer les opérations liées aux clés Services AWS , notamment :
+ Gestion des versions des compartiments Amazon Simple Storage Service (Amazon S3)
+ Création d'instantanés Amazon Relational Database Service (Amazon RDS)
+ Gestion des instances Amazon Elastic Compute Cloud (Amazon EC2)

L'architecture utilise des points de terminaison Amazon Virtual Private Cloud (Amazon VPC) et un réseau privé pour une communication sécurisée, avec des AWS Lambda fonctions fonctionnant comme des exécuteurs de tâches au sein de sous-réseaux privés. Amazon S3 assure la gestion des données et met en œuvre des rôles et des autorisations complets Gestion des identités et des accès AWS (IAM) pour garantir des contrôles d'accès appropriés. Cette solution n'inclut pas de fonctionnalité d'historique des discussions, et la discussion n'est pas stockée.

## Conditions préalables et limitations
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-prereqs"></a>
+ Un actif Compte AWS.
+ Des mesures de contrôle d'accès appropriées doivent être mises en place pour sécuriser et contrôler l'accès. Les exemples de contrôle d'accès incluent l'utilisation de l'accès aux modèles de base AWS Systems Manager, un rôle IAM pour le déploiement et des rôles basés sur les services, la désactivation de l'accès public aux compartiments Amazon S3 et la mise en place d'une file d'attente de lettres mortes.
+ Une AWS Key Management Service (AWS KMS) [clé gérée par le client](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).
+ AWS Command Line Interface (AWS CLI) version 2 ou ultérieure, [installée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) et [configurée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) dans l'environnement de déploiement.
+ Terraform AWS Provider version 4 ou ultérieure [installée et configurée](https://registry.terraform.io/providers/-/aws/latest/docs/guides/version-4-upgrade).
+ Terraform version 1.5.7 ou ultérieure [installée](https://developer.hashicorp.com/terraform/install) et configurée.
+ Passez en revue et [définissez des schémas OpenAPI pour les groupes d'action de vos agents dans Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html) afin de vous protéger contre les accès non autorisés et de préserver l'intégrité des données.
+ [Accès activé](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) [dans votre compte Compte AWS pour les Amazon Titan Text Embeddings v2 requis et pour les modèles de base Claude 3.5 Sonnet ou Claude 3 Haiku.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) Pour éviter l'échec du déploiement, vérifiez que votre déploiement cible Région AWS [prend en charge les modèles requis](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html).
+ Un cloud privé virtuel (VPC) configuré qui suit les meilleures pratiques du [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-design.html).
+ Révision de la [politique Amazon Responsible AI](https://aws.amazon.com/ai/responsible-ai/policy/) terminée.

**Versions du produit**
+ Amazon Titan Text Embeddings v2
+ Sonnet Anthropic Claude 3.5 ou Haïku Claude 3
+ Terraform AWS Provider version 4 ou ultérieure
+ Terraform version 1.5.7 ou ultérieure

## Architecture
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail pour automatiser les opérations courantes de l'infrastructure AWS à l'aide d'Amazon Bedrock.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/924e503f-bfc5-4452-abdf-d72a58d4d36f/images/bd56ad29-b435-4543-8ee8-dc4e1d38df18.png)


L'architecture de la solution se compose de plusieurs couches qui fonctionnent ensemble pour traiter les demandes en langage naturel et exécuter les AWS opérations correspondantes :

1. L'utilisateur fait des demandes d'opérations via la console de chat Amazon Bedrock.

1. Le chatbot utilise les bases de connaissances Amazon Bedrock pour le traitement des demandes. Il implémente le modèle Amazon Titan Text Embeddings v2 pour le traitement du langage naturel.

1. Si l'invite utilisateur inclut une demande d'action, le groupe d'actions Amazon Bedrock utilise le modèle Anthropic Claude 3 Haiku ou le modèle Claude 3.5 Sonnet (selon votre choix) pour la logique d'exécution et définit les opérations via un schéma OpenAPI.

1. Le groupe d'actions atteint les [points de terminaison](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) Amazon VPC à l'aide d'une communication AWS PrivateLink de service sécurisée.

1. La AWS Lambda fonction est accessible via les points de terminaison Amazon VPC pour les services Amazon Bedrock.

1. Les fonctions Lambda constituent le principal moteur d'exécution. Sur la base de la demande, la fonction Lambda appelle l'API pour effectuer des actions sur le. Services AWS La fonction Lambda gère également le routage et l'exécution des opérations.

1. La requête Services AWS get the API from the Lambda et les opérations correspondantes sont effectuées.

1. La fonction Lambda calcule une charge utile de sortie comprise par Amazon Bedrock.

1. Cette charge utile est envoyée à Amazon Bedrock à l'aide d'une communication PrivateLink de service sécurisée. Le modèle de langage étendu (LLM) utilisé par Amazon Bedrock comprend cette charge utile et la convertit dans un format compréhensible par l'homme.

1. Le résultat est ensuite présenté à l'utilisateur sur la console de discussion Amazon Bedrock.

La solution permet les opérations principales suivantes :
+ Amazon S3 — Activez la gestion des versions des compartiments pour le contrôle des versions.
+ Amazon RDS — Créez des instantanés de base de données à des fins de sauvegarde.
+ Amazon EC2 — Répertoriez les instances et contrôlez le démarrage et l'arrêt des instances.

## Outils
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-tools"></a>

**Services AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) est un service entièrement géré qui met à votre disposition des modèles de base très performants (FMs) issus des principales startups d'IA et d'Amazon via une API unifiée.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) offre une capacité de calcul évolutive dans l' AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) est une configuration sans serveur à la demande pour Amazon OpenSearch Service.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)vous permet de créer des connexions privées unidirectionnelles entre vos clouds privés virtuels (VPCs) et des services extérieurs au VPC.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) vous aide à configurer, exploiter et dimensionner une base de données relationnelle dans le. AWS Cloud
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)vous aide à gérer vos applications et votre infrastructure exécutées dans le AWS Cloud. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos AWS ressources en toute sécurité à grande échelle.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué et open source.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources sur site et dans le cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt GitHub [infra-ops-orchestratoraws-samples/](https://github.com/aws-samples/infra-ops-orchestrator).

## Bonnes pratiques
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-best-practices"></a>
+ Surveillez régulièrement les journaux d'exécution Lambda. Pour plus d'informations, consultez la section [Surveillance et résolution des problèmes des fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Pour plus d'informations sur les meilleures pratiques, consultez la section [Meilleures pratiques d'utilisation des AWS Lambda fonctions](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).
+ Passez régulièrement en revue les configurations de sécurité pour vous assurer qu'elles sont conformes aux exigences de votre entreprise. Pour plus d'informations, consultez la section [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-bp.html).
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-epics"></a>

### Déploiement de la solution
<a name="deploy-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt sur votre machine locale, exécutez la commande suivante :<pre>git clone "git@github.com:aws-samples/infra-ops-orchestrator.git"<br />cd infra-ops-orchestrator</pre> | AWS DevOps, DevOps ingénieur | 
| Modifiez les variables d'environnement. | Modifiez le `terraform.tfvars` fichier. dans le répertoire racine du dépôt cloné. Passez en revue les espaces réservés indiqués par `[XXXXX]` et mettez-les à jour en fonction de votre environnement. | AWS DevOps, DevOps ingénieur | 
| Créez l'infrastructure. | Pour créer l'infrastructure, exécutez les commandes suivantes :<pre>terraform init</pre><pre>terraform plan</pre>Révisez attentivement le plan d'exécution. Si les modifications prévues sont acceptables, exécutez la commande suivante :<pre>terraform apply --auto-approve</pre> | AWS DevOps, DevOps ingénieur | 

### Accédez à la solution
<a name="access-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez à la solution. | Une fois le déploiement réussi, procédez comme suit pour utiliser l'interface basée sur le chat :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-infrastructure-operations-by-using-amazon-bedrock.html) | AWS DevOps, DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources créées. | Pour supprimer toute l'infrastructure créée par ce modèle, exécutez la commande suivante :<pre>terraform plan -destroy </pre>Révisez attentivement le plan de destruction. Si les suppressions prévues sont acceptables, exécutez la commande suivante :<pre>terraform destroy</pre>Remarque : Cette commande supprimera définitivement toutes les ressources créées par ce modèle. La commande demandera une confirmation avant de supprimer des ressources. | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Comportement des agents  | Pour plus d'informations sur ce problème, consultez la section [Tester et résoudre les problèmes du comportement des agents](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) dans la documentation Amazon Bedrock. | 
| Problèmes liés au réseau Lambda | Pour plus d'informations sur ces problèmes, consultez la section [Résoudre les problèmes de réseau dans Lambda dans](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) la documentation Lambda. | 
| Autorisations IAM | Pour plus d'informations sur ces problèmes, consultez la section [Résolution des problèmes liés à l'IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) dans la documentation IAM. | 

## Ressources connexes
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-resources"></a>
+ [Création d'un instantané de base de données pour une instance de base de données mono-AZ pour Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [Définissez des schémas OpenAPI pour les groupes d'action de votre agent dans Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html)
+ [Activation de la gestion des versions sur les buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)
+ [Comment fonctionne Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [Récupérez des données et générez des réponses basées sur l'IA avec les bases de connaissances Amazon Bedrock](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Accédez en toute sécurité à Services Over AWS PrivateLink](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Arrêtez et démarrez les instances Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
+ [Utilisez des groupes d'actions pour définir les actions que votre agent doit effectuer](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html)

# Automatisez les CloudFront mises à jour lorsque les points de terminaison de l'équilibreur de charge changent à l'aide de Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamilselvan P, Mohan Annam et Naveen Suthar, Amazon Web Services*

## Résumé
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

Lorsque les utilisateurs d'Amazon Elastic Kubernetes Service (Amazon EKS) suppriment et réinstallent leur configuration d'entrée via des graphiques Helm, un nouvel Application Load Balancer (ALB) est créé. Cela pose problème car Amazon CloudFront continue de faire référence à l'enregistrement DNS de l'ancien ALB. Par conséquent, les services destinés à ce point de terminaison ne seront pas accessibles. (Pour plus de détails sur ce flux de travail problématique, voir [Informations supplémentaires](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

Pour résoudre ce problème, ce modèle décrit l'utilisation d'une AWS Lambda fonction personnalisée développée avec Python. Cette fonction Lambda détecte automatiquement lorsqu'un nouvel ALB est créé par le biais des règles Amazon. EventBridge À l'aide de AWS SDK pour Python (Boto3), la fonction met ensuite à jour la CloudFront configuration avec l'adresse DNS du nouvel ALB, garantissant ainsi que le trafic est acheminé vers le point de terminaison approprié.

Cette solution automatisée assure la continuité du service sans routage ni latence supplémentaires. Le processus permet de garantir qu'il fait CloudFront toujours référence au point de terminaison DNS ALB correct, même lorsque l'infrastructure sous-jacente change.

## Conditions préalables et limitations
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Exemple d'application Web de test et de validation déployée sur Amazon EKS à l'aide de Helm. Pour plus d'informations, consultez la section [Déployer des applications avec Helm sur Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) dans la documentation Amazon EKS.
+ Configurez CloudFront pour acheminer les appels vers un ALB créé par un contrôleur d'[entrée](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Helm. Pour plus d'informations, consultez [Installer le contrôleur AWS Load Balancer avec Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) dans la documentation Amazon EKS et [Restreindre l'accès aux équilibreurs de charge d'application](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) dans la documentation. CloudFront 
+ Terraform [installé](https://developer.hashicorp.com/terraform/install?product_intent=terraform) et configuré dans un espace de travail local.

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ Terraform version 1.0.0 ou ultérieure
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) version 4.20 ou ultérieure

## Architecture
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail à mettre à jour CloudFront avec la nouvelle adresse DNS ALB détectée par le biais d'une EventBridge règle.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Cette solution exécute les étapes suivantes :

1. Le contrôleur d'entrée Amazon EKS crée un nouvel Application Load Balancer (ALB) à chaque redémarrage ou déploiement de Helm.

1. EventBridge recherche les événements de création d'ALB.

1. L'événement de création ALB déclenche la fonction Lambda.

1. La fonction Lambda a été déployée sur la base de python 3.9 et utilise l'API boto3 pour appeler. Services AWS La fonction Lambda met à jour l' CloudFront entrée avec le dernier nom DNS de l'équilibreur de charge, qui provient des événements de création de l'équilibreur de charge.

## Outils
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Services AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accélère la diffusion de votre contenu Web en le diffusant via un réseau mondial de centres de données, ce qui réduit le temps de latence et améliore les performances.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, AWS Lambda des fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

## Épopées
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Configuration d'un poste de travail local
<a name="set-up-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez et configurez la CLI Git. | Pour installer et configurer l'interface de ligne de commande (CLI) Git sur votre poste de travail local, suivez les instructions [Getting Started — Install Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) de la documentation Git. | DevOps ingénieur | 
| Créez le dossier du projet et ajoutez les fichiers. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Provisionner l'architecture cible à l'aide de la configuration Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la solution. | Pour déployer des ressources dans la cible Compte AWS, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Vérification du déploiement
<a name="verify-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

### Nettoyer les infrastructures
<a name="clean-up-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez l'infrastructure. | Pour nettoyer l'infrastructure que vous avez créée précédemment, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Erreur lors de la validation des informations d'identification du fournisseur | Lorsque vous exécutez le Terraform `apply` ou `destroy` les commandes depuis votre machine locale, vous pouvez rencontrer une erreur similaire à la suivante :<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Cette erreur est due à l'expiration du jeton de sécurité pour les informations d'identification utilisées dans la configuration de votre machine locale.Pour résoudre l'erreur, consultez la section [Définir et afficher les paramètres de configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dans la documentation AWS Command Line Interface (AWS CLI). | 

## Ressources connexes
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS resources**
+ [Restreindre l'accès aux équilibreurs de charge des applications](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Acheminez le trafic Internet avec le AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentation Terraform**
+ [AWS Fournisseur](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Installez Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [État distant](https://developer.hashicorp.com/terraform/language/state/remote)

## Informations supplémentaires
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flux de travail problématique**

![\[Flux de travail qui produit une entrée DNS out-of-date ALB dans. CloudFront\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Le schéma suivant illustre le flux de travail suivant :

1. Lorsque l'utilisateur accède à l'application, l'appel passe à CloudFront.

1. CloudFront achemine les appels vers l'Application Load Balancer (ALB) correspondant.

1. L'ALB inclut les adresses IP cibles qui sont les adresses IP du pod d'application. À partir de là, l'ALB fournit les résultats attendus à l'utilisateur.

Toutefois, ce flux de travail présente un problème. Les déploiements d'applications se font par le biais de diagrammes Helm. Chaque fois qu'il y a un déploiement ou si quelqu'un redémarre Helm, l'entrée correspondante est également recréée. Par conséquent, le contrôleur d'équilibrage de charge externe recrée l'ALB. De plus, lors de chaque recréation, l'ALB est recréé avec un nom DNS différent. De ce fait, l'entrée dans les paramètres d'origine CloudFront sera obsolète. En raison de cette entrée périmée, l'application ne sera pas accessible à l'utilisateur. Ce problème entraîne des interruptions de service pour les utilisateurs.

**Solution alternative**

Une autre solution possible consiste à créer un [DNS externe](https://github.com/kubernetes-sigs/external-dns) pour l'ALB, puis à le pointer vers le point de terminaison de la zone hébergée privée Amazon Route 53. CloudFront Cependant, cette approche ajoute un autre saut dans le flux des applications, ce qui peut entraîner une latence des applications. La solution de fonction Lambda de ce modèle ne perturbe pas le flux de courant.

# Automatisez les CodeGuru révisions Amazon pour les applications AWS CDK Python à l'aide d' GitHub Actions
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy et Sarat Chandra Pothula, Amazon Web Services*

## Résumé
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

Remarque : à compter du 7 novembre 2025, vous ne pourrez plus créer de nouvelles associations de référentiels dans Amazon CodeGuru Reviewer. Pour en savoir plus sur les services dotés de fonctionnalités similaires à celles de CodeGuru Reviewer, consultez l'[évolution de la disponibilité d'Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) dans la documentation de CodeGuru Reviewer.

Ce modèle illustre l'intégration des révisions de code CodeGuru automatisées Amazon pour les applications AWS Cloud Development Kit (AWS CDK) Python, orchestrées par le biais GitHub d'actions. La solution déploie une architecture sans serveur définie en Python AWS CDK . En automatisant l'analyse du code expert au sein du pipeline de développement, cette approche permet d'obtenir les résultats suivants pour les projets AWS CDK Python :
+ Améliorez la qualité du code.
+ Simplifiez les flux de travail
+ Maximisez les avantages de l'informatique sans serveur.

## Conditions préalables et limitations
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Command Line Interface [(AWS CLI) version 2.9.11 ou ultérieure, [installée et configurée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html).](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Un GitHub compte actif et un GitHub référentiel avec des autorisations de lecture et d'écriture dans le flux de travail et la création de pull requests (PR) par GitHub Actions pour garantir le bon fonctionnement du flux de travail des relations publiques.
+ Un rôle OpenID Connect (OIDC) dans GitHub Actions pour déployer la solution dans le. Compte AWS Pour créer le rôle, utilisez la [AWS CDK construction](https://github.com/aws-samples/github-actions-oidc-cdk-construct).

**Limites**
+ Amazon CodeGuru Profiler [prend en charge les applications](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support) écrites dans tous les langages de machine virtuelle Java (JVM) (tels que Scala et Kotlin) et les environnements d'exécution, ainsi que Python 3.6 ou version ultérieure.
+ Amazon CodeGuru Reviewer [prend en charge les associations](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html) avec les référentiels de code Java et Python provenant uniquement des fournisseurs de sources suivants : AWS CodeCommit Bitbucket GitHub, GitHub Enterprise Cloud et GitHub Enterprise Server. En outre, les référentiels Amazon Simple Storage Service (Amazon S3) ne sont pris en charge que par le biais d'actions. GitHub 
+ Il n'existe aucun moyen automatique d'imprimer les résultats pendant le pipeline d'intégration continue et de déploiement continu (CI/CD). Ce modèle utilise plutôt GitHub les actions comme méthode alternative pour gérer et afficher les résultats.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

Le schéma suivant montre l'architecture de cette solution.

![\[Flux de travail pour intégrer la révision CodeGuru du code pour les applications AWS CDK Python à l'aide d' GitHub Actions.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


Comme le montre le schéma, lorsqu'un développeur crée une pull request (PR) à des fins de révision, GitHub Actions déclenche les étapes suivantes :

1. Hypothèse du rôle IAM — Le pipeline utilise le rôle IAM spécifié dans GitHub Secrets pour effectuer les tâches de déploiement.

1. Analyse du code
   + CodeGuru Reviewer analyse le code stocké dans le compartiment Amazon S3. Il identifie les défauts et fournit des recommandations pour les corriger et les optimiser.
   + CodeGuru Analyses de sécurité pour détecter les violations des politiques et les vulnérabilités.

1. Examen des résultats
   + Le pipeline imprime un lien vers le tableau de bord des résultats dans la sortie de la console.
   + Si des résultats critiques sont détectés, le pipeline tombe immédiatement en panne.
   + Pour les résultats de gravité élevée, normale ou faible, le pipeline passe à l'étape suivante.

1. Approbation PR
   + Un réviseur doit approuver manuellement le PR.
   + Si le PR est refusé, le pipeline échoue et interrompt les étapes de déploiement ultérieures.

1. Déploiement du CDK — Une fois le PR approuvé, le processus de déploiement du CDK commence. Il met en place les éléments suivants Services AWS et les ressources :
   + CodeGuru Profileur
   + AWS Lambda fonction
   + File d'attente Amazon Simple Queue Service (Amazon SQS)

1. Génération de données de profilage — Pour générer suffisamment de données de profilage pour CodeGuru Profiler :
   + Le pipeline invoque la fonction Lambda à plusieurs reprises en envoyant régulièrement des messages à la file d'attente Amazon SQS.

## Outils
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) est un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre AWS CDK application.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) collecte les données de performances d'exécution de vos applications en ligne et fournit des recommandations qui peuvent vous aider à affiner les performances de vos applications.
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) utilise l'analyse des programmes et l'apprentissage automatique pour détecter les défauts potentiels difficiles à détecter pour les développeurs. CodeGuru Profiler propose ensuite des suggestions pour améliorer votre code Java et Python.
+ Amazon CodeGuru Security est un outil de sécurité des applications statique qui utilise l'apprentissage automatique pour détecter les violations des politiques de sécurité et les vulnérabilités. Il fournit des suggestions pour faire face aux risques de sécurité et génère des métriques afin que vous puissiez suivre le niveau de sécurité de vos applications.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python).

## Bonnes pratiques
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ Adhérez aux [meilleures pratiques pour développer et déployer une infrastructure cloud avec le AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html).
+ Suivez les [meilleures pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) lors de l'utilisation des flux de travail Services AWS in GitHub Actions, notamment :
  + Ne stockez pas les informations d'identification dans le code de votre référentiel.
  + [Assumez un rôle IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles) pour recevoir des informations d'identification temporaires, et utilisez des informations d'identification temporaires lorsque cela est possible.
  + [Accordez le moindre privilège au](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) rôle IAM utilisé dans les flux de travail GitHub Actions. Accordez uniquement les autorisations nécessaires pour effectuer les actions dans vos flux de travail GitHub Actions. 
  + [Surveillez l'activité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) du rôle IAM utilisé dans les flux de travail GitHub Actions.
  + Effectuez régulièrement une rotation des informations d'identification à long terme que vous utilisez.

## Épopées
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les AWS informations d'identification. | Pour exporter les variables qui définissent la pile Compte AWS et Région AWS où vous la déployez, exécutez les commandes suivantes :<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Les AWS informations d'identification AWS CDK sont fournies par le biais de variables d'environnement. | AWS DevOps, DevOps ingénieur | 
| Pour cloner le référentiel. | Pour cloner le dépôt sur votre machine locale, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps ingénieur | 
| Installez le kit d'outils CDK. | Pour confirmer que le kit d'outils CDK est installé et pour vérifier la version, exécutez la commande suivante : <pre>cdk --version</pre>Si la version du CDK Toolkit est antérieure à 2.27.0, entrez la commande suivante pour la mettre à jour vers la version 2.27.0 :<pre>npm install -g aws-cdk@2.27.0</pre>Si le kit d'outils CDK *n'est pas* installé, exécutez la commande suivante pour l'installer :<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingénieur | 
| Installez les dépendances obligatoires. | Pour installer les dépendances de projet requises, exécutez la commande suivante :<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps ingénieur | 
| Démarrez l'environnement CDK. | Pour [démarrer un](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) environnement AWS CDK, exécutez les commandes suivantes :<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Une fois que vous avez réussi à démarrer l'environnement, le résultat suivant doit s'afficher :<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps, DevOps ingénieur | 

### Déployez l'application CDK
<a name="deploy-the-cdk-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Synthétisez l' AWS CDK application. | Pour synthétiser une AWS CDK application, exécutez la commande suivante :<pre>cdk synth</pre>Pour plus d'informations sur cette commande, consultez [cdk synthesize](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) dans la AWS CDK documentation. | AWS DevOps, DevOps ingénieur | 
| Déployez les ressources. | Pour déployer les ressources, exécutez la commande suivante :<pre>cdk deploy --require-approval never</pre>L'`--require-approval never`indicateur signifie que le CDK approuvera et exécutera automatiquement toutes les modifications. Cela inclut les modifications que le CDK signalerait normalement comme nécessitant une révision manuelle (telles que les modifications de la politique IAM ou la suppression de ressources). Assurez-vous que votre code CDK et votre CI/CD pipeline sont bien testés et sécurisés avant d'utiliser l'`--require-approval never`indicateur dans les environnements de production. | AWS DevOps, DevOps ingénieur | 

### Créez des GitHub secrets et un jeton d'accès personnel
<a name="create-github-secrets-and-personal-access-token"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les secrets requis dans GitHub. | Pour permettre aux flux de travail GitHub Actions d'accéder aux AWS ressources en toute sécurité sans exposer d'informations sensibles dans le code de votre référentiel, créez des secrets. Pour créer les secrets dans GitHub for`ROLE_TO_ASSUME`, et `CodeGuruReviewArtifactBucketName``AWS_ACCOUNT_ID`, suivez les instructions de la section [Création de secrets pour un référentiel](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository) dans la documentation GitHub Actions.Vous trouverez ci-dessous des informations supplémentaires sur les variables :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingénieur | 
| Créez un jeton d'accès GitHub personnel. | Pour configurer un moyen sécurisé d'authentification et d'interaction avec vos flux de travail GitHub Actions GitHub, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingénieur | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| nettoyer les ressources. | Pour nettoyer votre application AWS CDK Python, exécutez la commande suivante :<pre>cdk destroy --all</pre> | DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Afficher le lien vers les résultats du tableau de bord. | Il n'existe aucun moyen d'imprimer les résultats pendant le CI/CD pipeline. Ce modèle utilise plutôt GitHub les actions comme méthode alternative pour gérer et afficher les résultats. | 

## Ressources connexes
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS resources**
+ [AWS Kit de développement Cloud](https://aws.amazon.com/cdk/)
+ [ CodeGuru Documentation Amazon](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [Gestion des identités et des accès AWS](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [Qu'est-ce que c'est AWS Lambda ?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub documentation**
+ [Configuration d'OpenID Connect dans Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Actions](https://github.com/features/actions)
+ [Réutilisation des flux de travail](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [Déclenchement d'un workflow](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 

# Automatisez le déploiement de lacs de AWS Supply Chain données dans une configuration multi-référentiels à l'aide d' GitHub Actions, Artifactory et Terraform
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes"></a>

*Keshav Ganesh, Amazon Web Services*

## Résumé
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-summary"></a>

Ce modèle fournit une approche automatisée pour le déploiement et la gestion des lacs de AWS Supply Chain données à l'aide d'une intégration continue multi-référentiels et de fonctionnalités de déploiement continu (CI/CD) pipeline. It demonstrates two deployment methods: automated deployment using GitHub Actions workflows, or manual deployment using Terraform directly. Both approaches use Terraform for infrastructure as code (IaC), with the automated method adding GitHub Actions and JFrog Artifactory for enhanced CI/CDfonctionnalités).

La solution s'appuie sur AWS Supply Chain Amazon Simple Storage Service (Amazon S3) pour établir l'infrastructure du lac de données, tout en utilisant l'une ou l'autre des méthodes de déploiement pour automatiser la configuration et la création de ressources. AWS Lambda Cette automatisation élimine les étapes de configuration manuelles et garantit des déploiements cohérents dans tous les environnements. En outre, il AWS Supply Chain élimine le besoin d'une expertise approfondie en matière d'extraction, de transformation et de chargement (ETL) et peut fournir des informations et des analyses basées sur Amazon Quick Sight.

En mettant en œuvre ce modèle, les entreprises peuvent réduire le temps de déploiement, maintenir l'infrastructure sous forme de code et gérer les lacs de données de la chaîne d'approvisionnement grâce à un processus automatisé contrôlé par version. L'approche multi-référentiels fournit un contrôle d'accès précis et permet le déploiement indépendant de différents composants. Les équipes peuvent choisir la méthode de déploiement la mieux adaptée à leurs outils et processus existants.

## Conditions préalables et limitations
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs"></a>

**Conditions préalables**

Assurez-vous que les éléments suivants sont installés sur votre ordinateur local :
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) version 2
+ [GitHub INTERFACE DE LIGNE DE COMMANDE (CLI)](https://docs.github.com/en/get-started/git-basics/set-up-git)
+ [Python v3.13](https://www.python.org/downloads/)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) v1.12 ou version ultérieure

Assurez-vous que les éléments suivants sont en place avant le déploiement :
+ Un actif Compte AWS.
+ Un [cloud privé virtuel (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) avec deux [sous-réseaux privés](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) Compte AWS dans l'espace Région AWS de votre choix.
+ Autorisations suffisantes pour le rôle Gestion des identités et des accès AWS (IAM) utilisé pour le déploiement vers les services suivants :
  + AWS Supply Chain — L'accès complet est préféré pour déployer ses composants tels que les ensembles de données et les flux d'intégration, ainsi que pour y accéder depuis le AWS Management Console.
  + Amazon CloudWatch Logs : pour créer et gérer des groupes de CloudWatch journaux.
  + Amazon Elastic Compute Cloud (Amazon EC2) — Pour les groupes de sécurité Amazon EC2 et les points de terminaison Amazon Virtual Private Cloud (Amazon VPC).
  + Amazon EventBridge — À utiliser par AWS Supply Chain.
  + IAM — Pour créer des rôles AWS Lambda de service.
  + AWS Key Management Service (AWS KMS) — Pour accéder au compartiment d'artefacts AWS KMS keys utilisé pour le compartiment d'artefacts Amazon S3 et le compartiment AWS Supply Chain intermédiaire Amazon S3.
  + AWS Lambda — Pour créer les fonctions Lambda qui déploient les AWS Supply Chain composants.
  + Amazon S3 — Pour accéder au compartiment d'artefacts Amazon S3, au compartiment de journalisation des accès au serveur et au AWS Supply Chain compartiment intermédiaire. Si vous utilisez le déploiement manuel, les autorisations pour le compartiment d'artefacts Amazon S3 Terraform sont également requises.
  + Amazon VPC — Pour créer et gérer un VPC.

Si vous préférez utiliser les flux de travail GitHub Actions pour le déploiement, procédez comme suit :
+ Configurez [OpenID Connect (OIDC)](https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws#configuring-the-role-and-trust-policy) pour le rôle IAM avec les autorisations mentionnées précédemment.
+ Créez un rôle IAM avec des autorisations similaires pour accéder au AWS Management Console. Pour plus d'informations, consultez la section [Créer un rôle pour accorder des autorisations à un utilisateur IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) dans la documentation IAM.

Si vous préférez effectuer un déploiement manuel, procédez comme suit :
+ Créez un utilisateur IAM pour assumer le rôle IAM avec les autorisations mentionnées précédemment. Pour plus d'informations, consultez la section [Créer un rôle pour accorder des autorisations à un utilisateur IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) dans la documentation IAM.
+ [Assumez le rôle](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-role.html) dans votre terminal local.

Si vous préférez utiliser les flux de travail GitHub Actions pour le déploiement, configurez les éléments suivants :
+ Un [compte JFrog Artifactory](https://jfrog.com/artifactory/?utm_source=google&utm_medium=cpc_search&utm_campaign=SearchDSKBrandAPACIN202506&utm_term=jfrog%20cloud&gads_network=g&utm_content=u-bin&gads_campaign_id=22674833884&gads_adgroup_id=184501797241&gads_extension_id=233003714635&gads_target_id=aud-312135645780:kwd-1598615735032&gads_matchtype=b&gad_source=1&gad_campaignid=22674833884&gbraid=0AAAAADqV85U5B37iapTR9IIFHBvydF5AQ&gclid=CjwKCAjwiY_GBhBEEiwAFaghvqdNV-odNLZXPHjT7NAwf8lA-QuMtg666hgvDW1oCJ4nn7wvf869_xoCW4IQAvD_BwE) pour obtenir le nom d'hôte, le nom d'utilisateur de connexion et le jeton d'accès.
+ Une [clé de JFrog projet et un référentiel](https://jfrog.com/help/r/jfrog-platform-administration-documentation/step-1-set-up-a-new-project) pour le stockage des artefacts.

**Limites**
+ L' AWS Supply Chain instance ne prend pas en charge les techniques de transformation de données complexes.
+ AWS Supply Chain est particulièrement adapté aux domaines de la chaîne d'approvisionnement car il fournit des analyses et des informations intégrées. Pour tout autre domaine, il AWS Supply Chain peut être utilisé comme magasin de données dans le cadre de l'architecture du lac de données.
+ Les fonctions Lambda utilisées dans cette solution devront peut-être être améliorées pour gérer les nouvelles tentatives d'API et la gestion de la mémoire dans le cadre d'un déploiement à l'échelle de la production.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-architecture"></a>

Vous pouvez déployer cette solution soit à l'aide de flux de travail GitHub Actions automatisés, soit manuellement à l'aide de Terraform.

**Déploiement automatisé avec des GitHub actions**

Le schéma suivant montre l'option de déploiement automatique qui utilise les flux de travail GitHub Actions. JFrog Artifactory est utilisé pour la gestion des artefacts. Il stocke les informations sur les ressources et les sorties à utiliser dans le cadre d'un déploiement multi-référentiels.

![\[Option de déploiement automatique qui utilise les flux de travail GitHub Actions et JFrog.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/d454a5c5-ed51-421c-a87f-ff74cfcb30be.png)


**Déploiement manuel avec Terraform**

Le schéma suivant montre l'option de déploiement manuel via Terraform. Au lieu d' JFrog Artifactory, Amazon S3 est utilisé pour la gestion des artefacts.

![\[Option de déploiement manuel à l'aide de Terraform et Amazon S3.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/1130e728-44d5-4ae7-9586-1e497f54352a.png)


**Flux de travail de déploiement**

Les diagrammes montrent le flux de travail suivant :

1. Déployez l'infrastructure des ensembles de données de AWS Supply Chain service et les bases de données à l'aide de l'une des méthodes de déploiement suivantes :
   + **Déploiement automatisé** : utilise GitHub les flux de travail Actions pour orchestrer toutes les étapes de déploiement et utilise JFrog Artifactory pour la gestion des artefacts.
   + **Déploiement manuel** : exécute les commandes Terraform directement pour chaque étape de déploiement et utilise Amazon S3 pour la gestion des artefacts.

1. Créez les AWS ressources de support nécessaires au fonctionnement AWS Supply Chain du service :
   + Points de terminaison et groupes de sécurité Amazon VPC
   + AWS KMS keys
   + CloudWatch Logs, journaux, groupes

1. Créez et déployez les ressources d'infrastructure suivantes :
   + Fonctions Lambda qui gèrent (créent, mettent à jour et suppriment) l'instance de AWS Supply Chain service, les espaces de noms et les ensembles de données.
   + AWS Supply Chain préparation du compartiment Amazon S3 pour l'ingestion de données

1. Déployez la fonction Lambda qui gère les flux d'intégration entre le bucket intermédiaire et AWS Supply Chain les ensembles de données. Une fois le déploiement terminé, les étapes restantes du flux de travail gèrent l'ingestion et l'analyse des données.

1. Configurez l'ingestion des données sources dans AWS Supply Chain le compartiment Amazon S3 intermédiaire.

1. Une fois les données ajoutées au compartiment AWS Supply Chain Amazon S3 intermédiaire, le service déclenche automatiquement le flux d'intégration vers les AWS Supply Chain ensembles de données.

1. AWS Supply Chain s'intègre à Quick Sight Analytics pour produire des tableaux de bord basés sur les données ingérées.

## Outils
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-tools"></a>

**Services AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) vous aide à centraliser les journaux de tous vos systèmes et applications, Services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) offre une capacité de calcul évolutive dans l' AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, AWS Lambda des fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)vous permet de gérer de manière centralisée l'accès par authentification unique (SSO) à toutes vos applications Comptes AWS et à celles du cloud.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Q](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) in AWS Supply Chain est un assistant d'intelligence artificielle générative interactif qui vous aide à gérer votre chaîne d'approvisionnement de manière plus efficace en analysant les données de votre lac de AWS Supply Chain données.
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) est un service de business intelligence (BI) à l'échelle du cloud qui vous permet de visualiser, d'analyser et de rapporter vos données dans un tableau de bord unique.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)est une application gérée dans le cloud qui peut être utilisée comme magasin de données dans les organisations pour les domaines de la chaîne d'approvisionnement, qui peut être utilisée pour générer des informations et effectuer des analyses sur les données ingérées.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS. Un point de [terminaison Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) est un appareil virtuel qui vous permet de connecter de manière privée votre VPC à un service compatible Services AWS sans avoir besoin d'une passerelle Internet, d'un appareil NAT, d'une connexion VPN ou d'une connexion. AWS Direct Connect 

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [HashiCorp Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) qui vous aide à créer et à gérer des ressources sur site et dans le cloud.
+ [JFrog Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/jfrog-artifactory) assure end-to-end l'automatisation et la gestion des fichiers binaires et des artefacts tout au long du processus de livraison des applications.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent. Ce modèle utilise Python pour que le code de la AWS fonction interagisse avec AWS Supply Chain

  .

## Bonnes pratiques
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-best-practices"></a>
+ Maintenez le niveau de sécurité le plus élevé possible lors de la mise en œuvre de ce modèle. Comme indiqué dans la [section Conditions préalables](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), assurez-vous qu'un [cloud privé virtuel (VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)) avec [deux sous-réseaux privés](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) se trouve dans Région AWS l'espace de Compte AWS votre choix.
+ Utilisez des [clés gérées par le AWS KMS client](https://docs.aws.amazon.com/kms/latest/cryptographic-details/basic-concepts.html) dans la mesure du possible et accordez-leur des autorisations d'accès limitées.
+ Pour configurer les rôles IAM avec le moins d'accès requis pour ingérer les données pour ce modèle, consultez la section [Ingestion sécurisée des données depuis les systèmes source vers Amazon S3](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main?tab=readme-ov-file#secure-data-ingestion-from-source-systems-to-amazon-s3) dans le référentiel de ce modèle.

## Épopées
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-epics"></a>

### (Les deux options) Configurer le poste de travail local
<a name="both-options-set-up-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt de ce modèle, exécutez la commande suivante sur votre station de travail locale :<pre>git clone https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment.git<br />cd ASC-Deployment</pre> | AWS DevOps | 
| (Option automatique) Vérifiez les conditions préalables au déploiement. | Assurez-vous que les [conditions préalables sont remplies](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) pour le déploiement automatique. | Propriétaire de l'application | 
| (Option manuelle) Préparez le déploiement des AWS Supply Chain ensembles de données. | Pour accéder au `terraform-deployment` répertoire de`ASC-Datasets`, exécutez la commande suivante :<pre>cd ASC-Datasets/terraform-deployment</pre>Pour assumer le rôle ARN créé dans les [prérequis](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), exécutez la commande suivante :<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Pour configurer et exporter les variables d'environnement, exécutez les commandes suivantes :<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Datasets dir name><br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export AWS_USER_ROLE=<Enter user role ARN for AWS Console access and deployment><br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | AWS DevOps | 
| (Option manuelle) Préparez-vous à gérer les flux AWS Supply Chain d'intégration lors du déploiement. | Pour accéder au `terraform-deployment` répertoire de`ASC-Integration-Flows`, exécutez la commande suivante :<pre>cd ASC-Integration-Flows/terraform-deployment</pre>Pour assumer le rôle ARN créé précédemment, exécutez la commande suivante :<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Pour configurer et exporter les variables d'environnement, exécutez les commandes suivantes :<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Integration Flows dir name><br />export ASC_DATASET_VARS_REPO=<Enter Current ASC Datasets dir name>  #Must be the same directory name used for ASC Datasets deployment<br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | Propriétaire de l'application | 

### (Option automatisée) Déployer des AWS Supply Chain ensembles de données à l'aide des flux de GitHub travail Actions
<a name="automated-option-deploy-supplychain-datasets-using-github-actions-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez le `ASC-Datasets` répertoire. | Pour copier le `ASC-Datasets` répertoire vers un nouvel emplacement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configurez le `ASC-Datasets` répertoire. | Pour le configurer `ASC-Datasets` en tant que référentiel autonome dans votre organisation, exécutez les commandes suivantes :<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Datasets standalone repository"<br />git remote add origin <INSERT_ASC_DATASETS_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configurez le nom de la branche dans le fichier de flux de travail .github. | Configurez le nom de la branche dans le fichier du flux de travail de [déploiement](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/asc-datasets.yml) comme indiqué dans l'exemple suivant :<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Propriétaire de l'application | 
| Configurez GitHub des environnements et configurez les valeurs d'environnement. | Pour configurer GitHub des environnements dans votre GitHub organisation, suivez les instructions de la section [Configuration GitHub des environnements](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-github-environments) dans le référentiel de ce modèle.Pour configurer [les valeurs d'environnement](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) dans les fichiers de flux de travail, suivez les instructions de la [section Configuration des valeurs d'environnement dans les fichiers de flux](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) de travail du référentiel de ce modèle. | Propriétaire de l'application | 
| Déclenchez le flux de travail. | Pour appliquer vos modifications à votre GitHub organisation et déclencher le flux de travail de déploiement, exécutez la commande suivante :<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Option automatisée) Déployez des flux AWS Supply Chain d'intégration à l'aide GitHub des flux de travail Actions
<a name="automated-option-deploy-supplychain-integration-flows-using-github-actions-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez le `ASC-Integration-Flows` répertoire. | Pour copier le `ASC-Integration-Flows` répertoire vers un nouvel emplacement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configurez le `ASC-Integration-Flows` répertoire. | Pour configurer le `ASC-Integration-Flows` répertoire en tant que référentiel autonome dans votre organisation, exécutez les commandes suivantes :<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Integration-Flows standalone repository"<br />git remote add origin <INSERT_ASC_Integration_Flows_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configurez le nom de la branche dans le fichier de flux de travail .github. | Configurez le nom de la branche dans le fichier du flux de travail de [déploiement](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/asc-integration-flows.yml) comme indiqué dans l'exemple suivant :<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Propriétaire de l'application | 
| Configurez GitHub des environnements et configurez les valeurs d'environnement. | Pour configurer GitHub des environnements dans votre GitHub organisation, suivez les instructions de la section [Configuration GitHub des environnements](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) dans le référentiel de ce modèle.Pour configurer [les valeurs d'environnement](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) dans les fichiers de flux de travail, suivez les instructions de la [section Configuration des valeurs d'environnement dans les fichiers de flux](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-environment-values-in-the-workflow-files) de travail du référentiel de ce modèle. | Propriétaire de l'application | 
| Déclenchez le flux de travail. | Pour appliquer vos modifications à votre GitHub organisation et déclencher le flux de travail de déploiement, exécutez la commande suivante :<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Option manuelle) Déployer des AWS Supply Chain ensembles de données à l'aide de Terraform
<a name="manual-option-deploy-supplychain-datasets-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez au répertoire `terraform-deployment `. | Pour accéder au `terraform-deployment` répertoire de`ASC-Datasets`, exécutez la commande suivante :<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configurez le compartiment Amazon S3 d'état Terraform. | Pour configurer le compartiment Amazon S3 d'état Terraform, utilisez le script suivant :<pre># Setup terraform bucket<br />chmod +x ../scripts/setup-terraform.sh<br />../scripts/setup-terraform.sh</pre> | AWS DevOps | 
| Configurez le compartiment Amazon S3 des artefacts Terraform. | Pour configurer le compartiment Amazon S3 des artefacts Terraform, utilisez le script suivant :<pre># Setup terraform artifacts bucket<br />chmod +x ../scripts/setup-terraform-artifacts-bucket.sh<br />../scripts/setup-terraform-artifacts-bucket.sh</pre> | AWS DevOps | 
| Configurez le backend Terraform et la configuration des fournisseurs. | Pour configurer le backend Terraform et la configuration des fournisseurs, utilisez le script suivant :<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Générez un plan de déploiement. | Pour générer un plan de déploiement, exécutez les commandes suivantes :<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Déployez les configurations. | Pour déployer les configurations, exécutez la commande suivante :<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Mettez à jour les autres configurations et stockez les sorties. | Pour mettre à jour les politiques AWS KMS clés et stocker les sorties de configuration appliquées dans le compartiment Amazon S3 des artefacts Terraform, exécutez les commandes suivantes :<pre># Update AWS Supply Chain KMS Key policy with the service's requirements<br />chmod +x ../scripts/update-asc-kms-policy.sh<br />../scripts/update-asc-kms-policy.sh<br /></pre><pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy.sh<br />../scripts/update-kms-policy.sh<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Option manuelle) Déployez des flux d'intégration AWS Supply Chain de services à l'aide de Terraform
<a name="manual-option-deploy-supplychain-service-integration-flows-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez au répertoire `terraform-deployment`. | Pour accéder au `terraform-deployment` répertoire de`ASC-Integration-Flows`, exécutez la commande suivante :<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configurez le backend Terraform et la configuration des fournisseurs. | Pour configurer les configurations du backend et du fournisseur Terraform, utilisez le script suivant :<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Générez un plan de déploiement. | Pour générer un plan de déploiement, exécutez les commandes suivantes. Ces commandes initialisent votre environnement Terraform, fusionnent les variables de configuration `ASC-Datasets` avec vos configurations Terraform existantes et génèrent un plan de déploiement.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Déployez les configurations. | Pour déployer les configurations, exécutez la commande suivante :<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Mettez à jour les autres configurations. | Pour mettre à jour les politiques AWS KMS clés et stocker les sorties de configuration appliquées dans le compartiment Amazon S3 des artefacts Terraform, exécutez les commandes suivantes :<pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy-through-s3.sh<br />../scripts/update-kms-policy-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Les deux options) Ingérer des données
<a name="both-options-ingest-data"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez des exemples de fichiers CSV. | Pour télécharger des exemples de fichiers CSV pour les ensembles de données, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Ingénieur de données | 

### (Les deux options) Configurer AWS Supply Chain l'accès
<a name="both-options-set-up-supplychain-access"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez AWS Supply Chain l'accès. | Pour configurer AWS Supply Chain l'accès depuis le AWS Management Console, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Propriétaire de l'application | 

### (Option automatisée) Nettoyez toutes les ressources à l'aide des flux de travail GitHub Actions
<a name="automated-option-clean-up-all-resources-using-github-actions-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déclenchez le flux de travail de destruction des ressources des flux d'intégration. | Déclenchez le [flux de travail de destruction](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/destroy-workflow.yml) `ASC-Integration-Flows` depuis la succursale de déploiement de votre GitHub organisation. | AWS DevOps | 
| Déclenchez le flux de travail de destruction des ressources des ensembles de données. | Déclenchez le [flux de travail de destruction](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/destroy-workflow.yml) `ASC-Datasets` depuis la succursale de déploiement de votre GitHub organisation. | AWS DevOps | 

### (Option manuelle) Nettoyez les ressources des flux d' AWS Supply Chain intégration à l'aide de Terraform
<a name="manual-option-clean-up-resources-of-supplychain-integration-flows-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez au répertoire `terraform-deployment`. | Pour accéder au `terraform-deployment` répertoire de`ASC-Integration-Flows`, exécutez la commande suivante :<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configurez le backend Terraform et la configuration des fournisseurs. | Pour configurer le backend Terraform et la configuration des fournisseurs, utilisez le script suivant :<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Générez un plan de destruction de l'infrastructure. | Pour préparer la destruction contrôlée de votre AWS infrastructure en générant un plan de démontage détaillé, exécutez les commandes suivantes. Le processus initialise Terraform, intègre les configurations de AWS Supply Chain jeux de données et crée un plan de destruction que vous pouvez consulter avant de l'exécuter.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Exécutez le plan de destruction de l'infrastructure. | Pour exécuter la destruction planifiée de votre infrastructure, exécutez la commande suivante :<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Supprimez les sorties Terraform du compartiment Amazon S3. | Pour supprimer le fichier de sortie qui a été chargé lors du déploiement de`ASC-Integration-Flows`, exécutez la commande suivante :<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

### (Option manuelle) Nettoyez les ressources des ensembles de données de AWS Supply Chain service à l'aide de Terraform
<a name="manual-option-clean-up-resources-of-supplychain-service-datasets-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez au répertoire `terraform-deployment`. | Pour accéder au `terraform-deployment` répertoire de`ASC-Datasets`, exécutez la commande suivante :<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configurez le backend Terraform et la configuration des fournisseurs. | Pour configurer le backend Terraform et la configuration des fournisseurs, utilisez le script suivant :<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Générez un plan de destruction de l'infrastructure. | Pour créer un plan de destruction des ressources du AWS Supply Chain jeu de données, exécutez les commandes suivantes :<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Compartiments Amazon S3 vides. | Pour vider tous les compartiments Amazon S3 (à l'exception du compartiment de journalisation des accès au serveur, qui est configuré pour`force-destroy`), utilisez le script suivant :<pre># Delete S3 buckets excluding server access logging bucket<br />chmod +x ../scripts/empty-s3-buckets.sh<br />../scripts/empty-s3-buckets.sh tfplan.out</pre> | AWS DevOps | 
| Exécutez le plan de destruction de l'infrastructure. | Pour exécuter la destruction planifiée de votre infrastructure de jeux de AWS Supply Chain données à l'aide du plan généré, exécutez la commande suivante :<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Supprimez les sorties Terraform du compartiment d'artefacts Amazon S3 Terraform. | Pour terminer le processus de nettoyage, supprimez le fichier de sortie qui a été chargé lors du déploiement de `ASC-Datasets` en exécutant la commande suivante :<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

## Résolution des problèmes
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Un AWS Supply Chain ensemble de données ou un flux d'intégration n'a pas été déployé correctement en raison d'erreurs AWS Supply Chain internes ou d'autorisations IAM insuffisantes pour le rôle de service. | Tout d'abord, nettoyez toutes les ressources. Redéployez ensuite les [ressources du AWS Supply Chain jeu de données](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/README.md), puis redéployez les ressources du [flux AWS Supply Chain d'intégration](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/README.md). | 
| Le flux AWS Supply Chain d'intégration ne récupère pas les nouveaux fichiers de données chargés pour les AWS Supply Chain ensembles de données. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | 

## Ressources connexes
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-resources"></a>

**AWS documentation**
+ [AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)

**Autres ressources**
+ [Comprendre GitHub les flux de travail liés aux actions](https://docs.github.com/en/actions/get-started/understand-github-actions) (GitHub documentation)

## Informations supplémentaires
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-additional"></a>

Cette solution peut être répliquée pour un plus grand nombre d'ensembles de données et peut être interrogée pour une analyse plus approfondie, via des tableaux de bord prédéfinis fournis ou une intégration AWS Supply Chain personnalisée avec Amazon Quick Sight. En outre, vous pouvez utiliser Amazon Q pour poser des questions relatives à votre AWS Supply Chain instance.

**Analyser les données avec AWS Supply Chain Analytics**

Pour obtenir des instructions sur la configuration AWS Supply Chain d'Analytics, consultez la section [Configuration AWS Supply Chain d'Analytics](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/setting_analytics.html) dans la AWS Supply Chain documentation.

Ce modèle a démontré la création des ensembles de données **Calendar** et **Outbound\$1Order\$1Line**. Pour créer une analyse utilisant ces ensembles de données, procédez comme suit :

1. Pour analyser les ensembles de données, utilisez le tableau de bord d'**analyse de la saisonnalité**. Pour ajouter le tableau de bord, suivez les étapes décrites dans la section [Tableaux de bord prédéfinis](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/prebuilt_dashboards.html) de la AWS Supply Chain documentation.

1. Choisissez le tableau de bord pour voir son analyse basée sur des exemples de fichiers CSV pour les données du calendrier et les données des lignes de commande sortantes.

Le tableau de bord fournit des informations à la demande au fil des ans sur la base des données ingérées pour les ensembles de données. Vous pouvez également spécifier le ProductID, le CustomerID, les années et d'autres paramètres pour l'analyse.

**Utilisez Amazon Q pour poser des questions relatives à votre AWS Supply Chain instance**

[Amazon Q in AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) est un assistant IA génératif interactif qui vous aide à gérer votre chaîne d'approvisionnement de manière plus efficace. Amazon Q peut effectuer les opérations suivantes :
+ Analysez les données de votre lac AWS Supply Chain de données.
+ Fournissez des informations opérationnelles et financières.
+ Répondez à vos questions immédiates sur la chaîne d'approvisionnement.

Pour plus d'informations sur l'utilisation d'Amazon Q, consultez les [sections Activation d'Amazon Q dans AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/enabling_QinASC.html) et [Utilisation d'Amazon Q AWS Supply Chain dans](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/using_QinASC.html) la AWS Supply Chain documentation.

# Automatisez l'évaluation des ressources AWS
<a name="automate-aws-resource-assessment"></a>

*Naveen Suthar, Arun Bagal, Manish Garg et Sandeep Gawande, Amazon Web Services*

## Résumé
<a name="automate-aws-resource-assessment-summary"></a>

Ce modèle décrit une approche automatisée pour configurer les fonctionnalités d'évaluation des ressources à l'aide de l'[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html). En utilisant ce modèle, les équipes opérationnelles collectent les détails de l'audit des ressources de manière automatisée et consultent les détails de toutes les ressources déployées dans un compte AWS sur un tableau de bord unique. Cela est utile dans les cas d'utilisation suivants :
+ Identifier les outils d'infrastructure en tant que code (IaC) et isoler les ressources créées par différentes solutions IaC telles que [HashiCorp Terraform,](https://www.terraform.io/) AWS[, CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) AWS CDK et AWS [Command Line Interface (AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) CLI)
+ Récupération des informations relatives à l'audit des ressources

Cette solution aidera également l'équipe de direction à obtenir des informations sur les ressources et les activités d'un compte AWS à partir d'un tableau de bord unique. 


| 
| 
| Remarque : [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) est un service payant. Avant de l'exécuter pour analyser les données et créer un tableau de bord, consultez les [tarifs d'Amazon Quick Sight](https://aws.amazon.com/quicksight/pricing/). | 
| --- |

## Conditions préalables et limitations
<a name="automate-aws-resource-assessment-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Rôles et autorisations AWS Identity and Access Management (IAM) avec accès aux ressources de provisionnement
+ [Un [compte Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) créé avec accès à [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) et Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ AWS CDK version 2.55.1 ou ultérieure installée 
+ [Python](https://www.python.org/downloads/release/python-390/) version 3.9 ou ultérieure installée

**Limites**
+ Cette solution est déployée sur un seul compte AWS.
+ La solution ne suivra pas les événements survenus avant son déploiement, sauf si AWS CloudTrail a déjà été configuré et stocké des données dans un compartiment S3.

**Versions du produit**
+ AWS CDK version 2.55.1 ou ultérieure
+ Python version 3.9 ou ultérieure

## Architecture
<a name="automate-aws-resource-assessment-architecture"></a>

**Pile technologique cible**
+ Amazon Athena
+ AWS CloudTrail
+ AWS Glue
+ AWS Lambda
+ Amazon Quick Sight
+ Amazon S3

**Architecture cible**

Le code AWS CDK déploiera toutes les ressources nécessaires pour configurer les fonctionnalités d'évaluation des ressources dans un compte AWS. Le schéma suivant montre le processus d'envoi de CloudTrail journaux vers AWS Glue, Amazon Athena et Quick Sight.

![\[Évaluation des ressources AWS avec AWS Glue, Amazon Athena et Amazon dans le cadre d'un processus QuickSight en six étapes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a504774e-db7a-4c36-a22c-ce56d252fb58/images/8f2b549d-33a8-4cbf-86fd-33244716b668.png)


1. CloudTrail envoie les journaux vers un compartiment S3 à des fins de stockage.

1. Une notification d'événement invoque une fonction Lambda qui traite les journaux et génère des données filtrées.

1. Les données filtrées sont stockées dans un autre compartiment S3.

1. Un robot d'exploration AWS Glue est configuré sur les données filtrées qui se trouvent dans le compartiment S3 afin de créer un schéma dans la table du catalogue de données AWS Glue.

1. Les données filtrées sont prêtes à être consultées par Amazon Athena.

1. Les données demandées sont accessibles par Quick Sight à des fins de visualisation.

**Automatisation et mise à l'échelle**
+ Cette solution peut être étendue d'un compte AWS à plusieurs comptes AWS s'il existe une CloudTrail piste à l'échelle de l'organisation dans AWS Organizations. En déployant CloudTrail au niveau de l'organisation, vous pouvez également utiliser cette solution pour récupérer les détails de l'audit des ressources pour toutes les ressources requises.
+ Ce modèle utilise les ressources sans serveur AWS pour déployer la solution.

## Outils
<a name="automate-aws-resource-assessment-tools"></a>

**Services AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) est un service de requête interactif qui vous permet d'analyser les données directement dans Amazon S3 à l'aide du SQL standard.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur les comptes AWS et les régions AWS.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) vous CloudTrail aide à auditer la gouvernance, la conformité et le risque opérationnel de votre compte AWS.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) est un service d'extraction, de transformation et de chargement (ETL) entièrement géré. Il vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données. Ce modèle utilise un robot d'exploration AWS Glue et une table du catalogue de données AWS Glue.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) est un service de business intelligence (BI) à l'échelle du cloud qui vous permet de visualiser, d'analyser et de rapporter vos données dans un tableau de bord unique.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [infrastructure-assessment-iac-automation](https://github.com/aws-samples/infrastructure-assessment-iac-automation)référentiel.

Le référentiel de code contient les fichiers et dossiers suivants :
+ `lib`dossier — Le CDK AWS construit des fichiers Python utilisés pour créer des ressources AWS
+ `src/lambda_code`— Le code Python exécuté dans la fonction Lambda
+ `requirements.txt`— La liste de toutes les dépendances Python qui doivent être installées
+ `cdk.json`— Le fichier d'entrée fournissant les valeurs requises pour faire tourner les ressources

## Bonnes pratiques
<a name="automate-aws-resource-assessment-best-practices"></a>

Configurez la surveillance et les alertes pour la fonction Lambda. Pour plus d'informations, consultez la section [Surveillance et résolution des problèmes des fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Pour connaître les meilleures pratiques générales relatives à l'utilisation des fonctions Lambda, consultez la documentation [AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Épopées
<a name="automate-aws-resource-assessment-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le dépôt sur votre machine locale. | Pour cloner le référentiel, exécutez la commande `git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git`. | AWS DevOps, DevOps ingénieur | 
| Configurez l'environnement virtuel Python et installez les dépendances requises. | Pour configurer l'environnement virtuel Python, exécutez les commandes suivantes.<pre>cd infrastructure-assessment-iac-automation<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Pour configurer les dépendances requises, exécutez la commande`pip install -r requirements.txt`. | AWS DevOps, DevOps ingénieur | 
| Configurez l'environnement AWS CDK et synthétisez le code AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingénieur | 

### Configurer les informations d'identification AWS sur votre machine locale
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exportez des variables pour le compte et la région où la pile sera déployée. | Pour fournir des informations d'identification AWS pour AWS CDK à l'aide de variables d'environnement, exécutez les commandes suivantes.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | AWS DevOps, DevOps ingénieur | 
| Configurez le profil de la CLI AWS. | Pour configurer le profil de la CLI AWS pour le compte, suivez les instructions de la [documentation AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | AWS DevOps, DevOps ingénieur | 

### Configuration et déploiement de l'outil d'évaluation des ressources
<a name="configure-and-deploy-the-resource-assessment-tool"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez des ressources dans le compte. | Pour déployer des ressources dans le compte AWS à l'aide d'AWS CDK, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps | 
| Exécutez le robot d'exploration AWS Glue et créez la table du catalogue de données. | Un [robot d'exploration AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) est utilisé pour maintenir le schéma de données dynamique. La solution crée et met à jour des partitions dans la [table du catalogue de données AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) en exécutant régulièrement le robot d'exploration, comme défini par le planificateur de robots d'exploration AWS Glue. Une fois les données disponibles dans le compartiment S3 de sortie, procédez comme suit pour exécuter le robot d'exploration AWS Glue et créer le schéma de table du catalogue de données à des fins de test :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Le code AWS CDK configure le robot d'exploration AWS Glue pour qu'il s'exécute à un moment précis, mais vous pouvez également l'exécuter à la demande. | AWS DevOps, DevOps ingénieur | 
| Déployez la construction Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingénieur | 
| Créez le tableau de bord Quick Sight. | Pour créer l'exemple de tableau de bord et d'analyse Quick Sight, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Pour plus d'informations, consultez [Démarrer une analyse dans Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/creating-an-analysis.html) et [Types visuels dans Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-visual-types.html). | AWS DevOps, DevOps ingénieur | 

### Nettoyez toutes les ressources AWS de la solution
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingénieur | 

### Configurez des fonctionnalités supplémentaires en plus de l'automatisation de l'outil d'évaluation des ressources AWS
<a name="set-up-additional-features-on-top-of-the-aws-resource-assessment-tool-automation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Surveillez et nettoyez les ressources créées manuellement. | (Facultatif) Si votre organisation a des exigences de conformité pour créer des ressources à l'aide des outils IaC, vous pouvez garantir la conformité en utilisant l'automatisation des outils d'évaluation des ressources AWS pour récupérer les ressources provisionnées manuellement. Vous pouvez également utiliser l'outil pour importer les ressources dans un outil IaC ou pour les recréer. Pour surveiller les ressources provisionnées manuellement, effectuez les tâches de haut niveau suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-aws-resource-assessment-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| AWS CDK renvoie des erreurs. | Pour obtenir de l'aide concernant les problèmes liés au CDK AWS, consultez la section [Résolution des problèmes courants liés au CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Ressources connexes
<a name="automate-aws-resource-assessment-resources"></a>
+ [Création de fonctions Lambda avec Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Commencez avec AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Utilisation d'AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Création d'un CloudTrail journal](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Commencez avec Amazon Quick Sight](https://aws.amazon.com/quicksight/getting-started/)

## Informations supplémentaires
<a name="automate-aws-resource-assessment-additional"></a>

**Comptes multiples**

Pour configurer les informations d'identification de la CLI AWS pour plusieurs comptes, utilisez les profils AWS. Pour plus d'informations, consultez la section *Configurer plusieurs profils* dans [Configuration de l'interface de ligne de commande AWS](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/).

**Commandes AWS CDK**

Lorsque vous travaillez avec AWS CDK, gardez à l'esprit les commandes utiles suivantes :
+ Répertorie toutes les piles de l'application

  ```
  cdk ls
  ```
+ Émet le modèle AWS synthétisé CloudFormation 

  ```
  cdk synth
  ```
+ Déploie la pile sur votre compte AWS et votre région par défaut

  ```
  cdk deploy
  ```
+ Compare la pile déployée avec l'état actuel

  ```
  cdk diff
  ```
+ Ouvre la documentation du kit AWS CDK

  ```
  cdk docs
  ```

# Installez automatiquement les systèmes SAP à l'aide d'outils open source
<a name="install-sap-systems-automatically-by-using-open-source-tools"></a>

*Guilherme Sesterheim, Amazon Web Services*

## Résumé
<a name="install-sap-systems-automatically-by-using-open-source-tools-summary"></a>

Ce modèle montre comment automatiser l'installation des systèmes SAP en utilisant des outils open source pour créer les ressources suivantes :
+ Une base de données SAP S/4HANA 1909
+ Une instance des services centraux SAP ABAP (ASCS)
+ Une instance du serveur d'applications principal (PAS) SAP

HashiCorp Terraform crée l'infrastructure du système SAP et Ansible configure le système d'exploitation (OS) et installe les applications SAP. Jenkins exécute l'installation.

Cette configuration transforme l'installation des systèmes SAP en un processus reproductible, ce qui peut contribuer à améliorer l'efficacité et la qualité du déploiement.

**Note**  
L'exemple de code fourni dans ce modèle fonctionne à la fois pour les systèmes à haute disponibilité (HA) et pour les systèmes non HA.

## Conditions préalables et limitations
<a name="install-sap-systems-automatically-by-using-open-source-tools-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un bucket Amazon Simple Storage Service (Amazon S3) contenant tous vos fichiers multimédia SAP
+ Un responsable d'AWS Identity and Access Management (IAM) doté d'une [clé d'accès et d'une clé secrète](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) et disposant des autorisations suivantes :
  + **Autorisations en lecture seule :** Amazon Route 53, AWS Key Management Service (AWS KMS)
  + **Autorisations de lecture et d'écriture :** Amazon S3, Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic File System (Amazon EFS), IAM, Amazon CloudWatch, Amazon DynamoDB
+ Une [zone hébergée privée sur](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) la Route 53
+ Un abonnement à [Red Hat Enterprise Linux pour SAP avec HA et Update Services 8.2](https://aws.amazon.com/marketplace/pp/prodview-5grz5a5thx7c2) Amazon Machine Image (AMI) sur Amazon Marketplace
+ Une [clé gérée par le client AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-keys)
+ Une [paire de clés Secure Shell (SSH)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
+ **Un [groupe EC2 de sécurité Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) qui autorise la connexion SSH sur le port 22 à partir du nom d'hôte sur lequel vous installez Jenkins (le nom d'hôte est probablement localhost)**
+ [Vagrant](https://www.vagrantup.com/) by HashiCorp installé et configuré
+ [VirtualBox](https://www.virtualbox.org/)installé et configuré par Oracle
+ Connaissance de Git, Terraform, Ansible et Jenkins

**Limites**
+ Seul SAP S/4HANA 1909 est entièrement testé pour ce scénario spécifique. L'exemple de code Ansible de ce modèle doit être modifié si vous utilisez une autre version de SAP HANA.
+ L'exemple de procédure décrit dans ce modèle fonctionne pour les systèmes d'exploitation Mac OS et Linux. Certaines commandes ne peuvent être exécutées que sur des terminaux UNIX. Cependant, vous pouvez obtenir un résultat similaire en utilisant des commandes différentes et un système d'exploitation Windows.

**Versions du produit**
+ SPA S/4HANA 1909
+ Red Hat Enterprise Linux (RHEL) 8.2 ou versions supérieures

## Architecture
<a name="install-sap-systems-automatically-by-using-open-source-tools-architecture"></a>

Le schéma suivant montre un exemple de flux de travail qui utilise des outils open source pour automatiser l'installation des systèmes SAP dans un compte AWS :

![\[Un exemple de flux de travail utilise des outils open source pour automatiser l'installation des systèmes SAP dans un compte AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/aaf11dac-38cc-4e89-be86-51d4409cf238/images/d7902f9d-f1be-461f-b69b-cf3c663c8f2f.png)


Le schéma suivant illustre le flux de travail suivant :

1. Jenkins orchestre l'installation du système SAP en exécutant le code Terraform et Ansible.

1. Le code Terraform construit l'infrastructure du système SAP.

1. Le code Ansible configure le système d'exploitation et installe les applications SAP.

1. Une base de données SAP S/4HANA 1909, une instance ASCS et une instance PAS incluant tous les prérequis définis sont installées sur une instance Amazon. EC2 

**Note**  
L'exemple de configuration de ce modèle crée automatiquement un compartiment Amazon S3 dans votre compte AWS pour stocker le fichier d'état Terraform.

**Pile technologique**
+ Terraform
+ Ansible
+ Jenkins
+ Une base de données SAP S/4HANA 1909
+ Une instance SAP ASCS
+ Une instance SAP PAS
+ Amazon EC2 

## Outils
<a name="install-sap-systems-automatically-by-using-open-source-tools-tools"></a>

**Services AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) fournit une capacité de calcul évolutive dans le cloud AWS. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les faire rapidement évoluer vers le haut ou vers le bas.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques pour protéger vos données.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [Ansible](https://www.ansible.com/) est un outil open source de configuration sous forme de code (CAc) qui permet d'automatiser les applications, les configurations et l'infrastructure informatique.
+ [Jenkins](https://www.jenkins.io/) est un serveur d'automatisation open source qui permet aux développeurs de créer, de tester et de déployer leurs logiciels.

**Code**

Le code de ce modèle est disponible dans le dépôt GitHub [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible).

## Épopées
<a name="install-sap-systems-automatically-by-using-open-source-tools-epics"></a>

### Configuration des prérequis
<a name="configure-the-prerequisites"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez vos fichiers multimédia SAP à un compartiment Amazon S3. | [Créez un compartiment Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) contenant tous vos fichiers multimédia SAP.Assurez-vous de suivre la hiérarchie des dossiers de l'AWS Launch Wizard pour **S/4HANA** dans la documentation de [Launch](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap-software-install-details.html) Wizard. | Administrateur du cloud | 
| Installez VirtualBox. | Installation et configuration [VirtualBox](https://www.virtualbox.org/)par Oracle. | DevOps ingénieur | 
| Installez Vagrant. | Installez et configurez [Vagrant](https://www.vagrantup.com/) par HashiCorp. | DevOps ingénieur | 
| Configurez votre compte AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | AWS général | 

### Créez et exécutez votre installation SAP
<a name="build-and-run-your-sap-installation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel de code depuis GitHub. | Clonez le dépôt [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible) sur. GitHub | DevOps ingénieur | 
| Démarrez le service Jenkins. | Ouvrez le terminal Linux. Accédez ensuite au dossier local qui contient le dossier du référentiel de code cloné et exécutez la commande suivante :<pre>sudo vagrant up</pre>Le démarrage de Jenkins prend environ 20 minutes. La commande renvoie un message « **Service is up and running** » en cas de succès. | DevOps ingénieur | 
| Ouvrez Jenkins dans un navigateur Web et connectez-vous. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | DevOps ingénieur | 
| Configurez les paramètres d'installation de votre système SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Vous pouvez configurer les autres paramètres non obligatoires selon vos besoins, en fonction de votre cas d'utilisation. Par exemple, vous pouvez modifier l'ID système SAP (SID) des instances, le mot de passe par défaut, les noms et les balises de votre système SAP. Toutes les variables requises ont **(Obligatoire)** au début de leur nom. | Administrateur système AWS, DevOps ingénieur | 
| Lancez l'installation de votre système SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Pour plus d'informations sur les étapes du pipeline, consultez la section **Comprendre les étapes du pipeline** de la section [Automatisation de l'installation de SAP avec des outils open source](https://aws.amazon.com/blogs/awsforsap/automating-sap-installation-with-open-source-tools/) sur le blog AWS.En cas d'erreur, déplacez votre curseur sur la case d'erreur rouge qui apparaît et choisissez **Logs**. Les journaux de l'étape du pipeline qui a donné lieu à une erreur apparaissent. La plupart des erreurs sont dues à des réglages de paramètres incorrects. | DevOps ingénieur, administrateur système AWS | 

## Ressources connexes
<a name="install-sap-systems-automatically-by-using-open-source-tools-resources"></a>
+ [DevOps pour SAP — Installation de SAP : de 2 mois à 2 heures](https://videos.itrevolution.com/watch/707351918/) (vidéothèque DevOps Enterprise Summit)

# Automatisez le déploiement du portefeuille et des produits AWS Service Catalog à l'aide d'AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva et RAJNEESH TYAGI, Amazon Web Services*

## Résumé
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

AWS Service Catalog vous permet de gérer de manière centralisée les catalogues de services ou de *produits* informatiques dont l'utilisation est approuvée dans l'environnement AWS de votre organisation. Un ensemble de produits est appelé *portefeuille*, et un portefeuille contient également des informations de configuration. Avec AWS Service Catalog, vous pouvez créer un portefeuille personnalisé pour chaque type d'utilisateur de votre organisation, puis accorder l'accès au portefeuille approprié. Ces utilisateurs peuvent ensuite déployer rapidement tous les produits dont ils ont besoin au sein du portefeuille.

Si vous disposez d'une infrastructure réseau complexe, telle que des architectures multirégions et multicomptes, il est recommandé de créer et de gérer les portefeuilles Service Catalog dans un seul compte central. Ce modèle décrit comment utiliser AWS Cloud Development Kit (AWS CDK) pour automatiser la création de portefeuilles Service Catalog dans un compte central, autoriser les utilisateurs finaux à y accéder, puis, éventuellement, fournir des produits sur un ou plusieurs comptes AWS cibles. Cette ready-to-use solution crée les portefeuilles Service Catalog dans le compte source. Il fournit également, en option, des produits dans des comptes cibles à l'aide d'AWS CloudFormation Stacks et vous aide à configurer TagOptions les produits :
+ **AWS CloudFormation StackSets** — Vous pouvez les utiliser StackSets pour lancer des produits Service Catalog dans plusieurs régions et comptes AWS. Dans cette solution, vous avez la possibilité de provisionner automatiquement les produits lorsque vous déployez cette solution. Pour plus d'informations, consultez [Using AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (documentation Service Catalog) et [StackSets concepts](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentation).
+ **TagOption bibliothèque** — Vous pouvez gérer les balises des produits approvisionnés à l'aide de la TagOption bibliothèque. A *TagOption*est une paire clé-valeur gérée dans AWS Service Catalog. Il ne s'agit pas d'une balise AWS, mais elle sert de modèle pour créer une balise AWS basée sur le TagOption. Pour plus d'informations, consultez [TagOption la bibliothèque](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (documentation Service Catalog).

## Conditions préalables et limitations
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif que vous souhaitez utiliser comme compte source pour administrer les portefeuilles Service Catalog.
+ Si vous utilisez cette solution pour approvisionner des produits sur un ou plusieurs comptes cibles, le compte cible doit déjà exister et être actif.
+ Autorisations AWS Identity and Access Management (IAM) pour accéder à AWS Service Catalog CloudFormation, AWS et AWS IAM.

**Versions du produit**
+ Version 2.27.0 du kit de développement logiciel AWS

## Architecture
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Pile technologique cible**
+ Portefeuilles Service Catalog dans un compte AWS centralisé
+ Produits Service Catalog déployés sur le compte cible

**Architecture cible**

![\[AWS CDK crée des portefeuilles Service Catalog et fournit des produits sur le compte cible.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. Dans le compte portfolio (ou *source*), vous mettez à jour le fichier **config.json** avec le compte AWS, la région AWS, le rôle IAM, le portefeuille et les informations sur le produit correspondant à votre cas d'utilisation.

1. Vous déployez l'application AWS CDK.

1. L'application AWS CDK assume le rôle IAM de déploiement et crée les portefeuilles et les produits Service Catalog définis dans le **fichier config.json**.

   Si vous avez configuré StackSets pour déployer des produits dans un compte cible, le processus se poursuit. Si vous n'avez pas configuré StackSets pour approvisionner des produits, le processus est terminé.

1. L'application AWS CDK assume le rôle d'**StackSet administrateur** et déploie le CloudFormation stack set AWS que vous avez défini dans le **fichier config.json**.

1. Dans le compte cible, StackSets assume le rôle **StackSet d'exécution** et approvisionne les produits.

## Outils
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) est un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre application AWS CDK.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) vous permet de gérer de manière centralisée les catalogues de services informatiques approuvés pour AWS. Les utilisateurs finaux peuvent déployer rapidement uniquement les services informatiques approuvés dont ils ont besoin, en respectant les contraintes définies par votre organisation.

**Référentiel de code**

Le code de ce modèle est disponible sur GitHub, dans le [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)référentiel. Le référentiel de code contient les fichiers et dossiers suivants :
+ **cdk-sevicecatalog-app**— Ce dossier contient l'application AWS CDK pour cette solution.
+ **config** — Ce dossier contient le fichier **config.json** et le CloudFormation modèle de déploiement des produits du portefeuille Service Catalog.
+ **config/config.json** — Ce fichier contient toutes les informations de configuration. Vous mettez à jour ce fichier pour personnaliser cette solution en fonction de votre cas d'utilisation.
+ **config/templates** — Ce dossier contient les CloudFormation modèles pour les produits Service Center.
+ **setup.sh** — Ce script déploie la solution.
+ **uninstall.sh** — Ce script supprime la pile et toutes les ressources AWS créées lors du déploiement de cette solution.

Pour utiliser l'exemple de code, suivez les instructions de la section [Epics](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics).

## Bonnes pratiques
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ Les rôles IAM utilisés pour déployer cette solution doivent respecter le [principe du moindre privilège (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) IAM).
+ Respectez les [meilleures pratiques pour développer des applications cloud avec AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (article de blog AWS).
+ Respectez les [ CloudFormation meilleures pratiques d'AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation documentation).

## Épopées
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez le kit d'outils AWS CDK. | Assurez-vous qu'AWS CDK Toolkit est installé. Entrez la commande suivante pour vérifier s'il est installé et vérifier la version. <pre>cdk --version</pre>Si AWS CDK Toolkit n'est pas installé, entrez la commande suivante pour l'installer.<pre>npm install -g aws-cdk@2.27.0</pre>Si la version d'AWS CDK Toolkit est antérieure à 2.27.0, entrez la commande suivante pour la mettre à jour vers la version 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingénieur | 
| Pour cloner le référentiel. | Entrez la commande suivante. Dans *Cloner le référentiel*, dans la section [Informations supplémentaires](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), vous pouvez copier la commande complète contenant l'URL du référentiel. Cela clone le [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation)dépôt à partir de. GitHub<pre>git clone <repository-URL>.git</pre>Cela crée un `cd aws-cdk-servicecatalog-automation` dossier dans le répertoire cible. Entrez la commande suivante pour accéder à ce dossier.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps ingénieur | 
| Configurez les informations d'identification AWS. | Entrez les commandes suivantes : Ils exportent les variables suivantes, qui définissent le compte AWS et la région dans lesquels vous déployez la pile.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Les informations d'identification AWS pour AWS CDK sont fournies par le biais de variables d'environnement. | AWS DevOps, DevOps ingénieur | 
| Configurez les autorisations pour les rôles IAM des utilisateurs finaux. | Si vous comptez utiliser des rôles IAM pour accorder l'accès au portefeuille et aux produits qu'il contient, les rôles doivent disposer d'autorisations pour être assumés par le principal du **service servicecatalog.amazonaws.com**. Pour savoir comment accorder ces autorisations, consultez [Enabling trusted access with Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (documentation AWS Organizations). | AWS DevOps, DevOps ingénieur | 
| Configurez les rôles IAM requis par StackSets. | Si vous avez l'habitude StackSets de provisionner automatiquement des produits dans des comptes cibles, vous devez configurer les rôles IAM qui administrent et exécutent le stack set.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps ingénieur | 

### Personnalisez et déployez la solution
<a name="customize-and-deploy-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les CloudFormation modèles. | Dans le `config/templates` dossier, créez des CloudFormation modèles pour tous les produits que vous souhaitez inclure dans vos portefeuilles. Pour plus d'informations, consultez la section [Utilisation des CloudFormation modèles AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation documentation). | Développeur d'applications, AWS DevOps, DevOps ingénieur | 
| Personnalisez le fichier de configuration. | Dans le `config` dossier, ouvrez le fichier **config.json** et définissez les paramètres adaptés à votre cas d'utilisation. Les paramètres suivants sont obligatoires, sauf indication contraire :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Pour un exemple de fichier de configuration terminé, voir *Exemple de fichier de configuration* dans la section [Informations supplémentaires](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Développeur d'applications, DevOps ingénieur, AWS DevOps | 
| Déployez la solution. | Entrez la commande suivante. Cela permet de déployer l'application AWS CDK et de provisionner les portefeuilles et les produits Service Catalog comme indiqué dans le **fichier config.json**.<pre>sh +x setup.sh</pre> | Développeur d'applications, DevOps ingénieur, AWS DevOps | 
| Vérifier le déploiement. | Vérifiez la réussite du déploiement en procédant comme suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS général | 
| (Facultatif) Mettez à jour les portefeuilles et les produits. | Si vous souhaitez utiliser cette solution pour mettre à jour les portefeuilles ou les produits ou pour fournir de nouveaux produits :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Par exemple, vous pouvez ajouter des portefeuilles supplémentaires ou allouer davantage de ressources. L'application AWS CDK implémente uniquement les modifications. Si aucune modification n'est apportée aux portefeuilles ou aux produits précédemment déployés, le redéploiement ne les affectera pas. | Développeur d'applications, DevOps ingénieur, AWS général | 

### Nettoyez la solution
<a name="clean-up-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| (Facultatif) Supprimez les ressources AWS déployées par cette solution. | Si vous souhaitez supprimer un produit approvisionné, suivez les instructions de la section [Supprimer des produits approvisionnés](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) (documentation Service Catalog).Si vous souhaitez supprimer toutes les ressources créées par cette solution, entrez la commande suivante.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps ingénieur, développeur d'applications | 

## Ressources connexes
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Bibliothèque AWS Service Catalog Construct](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (référence d'API AWS)
+ [StackSets concepts](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentation)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (AWS marketing)
+ [Utilisation du Service Catalog avec le kit AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (atelier AWS)

## Informations supplémentaires
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Cloner le référentiel**

Entrez la commande suivante pour cloner le référentiel GitHub.

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**Exemple de fichier de configuration**

Voici un exemple de fichier **config.json** avec des exemples de valeurs.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```

# Automatisez la gestion dynamique du pipeline pour le déploiement de solutions de correctifs dans les environnements Gitflow en utilisant et AWS Service Catalog AWS CodePipeline
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions"></a>

*Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker et Vivek Thangamuthu, Amazon Web Services*

## Résumé
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-summary"></a>

**Note**  
AWS CodeCommit n'est plus disponible pour les nouveaux clients. Les clients existants de AWS CodeCommit peuvent continuer à utiliser le service normalement. [En savoir plus](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)

Ce modèle concerne un scénario de gestion d'un pipeline de correctifs dynamiques dédié uniquement au déploiement sécurisé de solutions de correctifs dans un environnement de production. La solution est mise en œuvre et gérée à l'aide d'un AWS Service Catalog portefeuille et d'un produit. Une EventBridge règle Amazon est utilisée pour l'automatisation des événements. Les restrictions sont appliquées en utilisant les contraintes du portefeuille Service Catalog et les rôles Gestion des identités et des accès AWS (IAM) pour les développeurs. Seule une AWS Lambda fonction est autorisée à lancer le produit Service Catalog, déclenchée par la EventBridge règle. Ce modèle est conçu pour les environnements dotés d'une configuration Gitflow spécifique, décrite dans [Informations supplémentaires](#automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional).

Généralement, un correctif est déployé pour résoudre les problèmes critiques ou de sécurité signalés dans un environnement réel, tel que le mode de production. Les correctifs doivent être déployés directement dans les environnements de préparation et de production uniquement. Les pipelines de préparation et de production sont largement utilisés pour les demandes de développement régulières. Ces pipelines ne peuvent pas être utilisés pour déployer des correctifs car certaines fonctionnalités permanentes de l'assurance qualité ne peuvent pas être promues en production. Pour publier des correctifs, ce modèle décrit un pipeline dynamique de courte durée doté des fonctionnalités de sécurité suivantes :
+ **Création automatique** : un pipeline de correctifs est automatiquement créé chaque fois qu'une branche de correctifs est créée dans un AWS CodeCommit référentiel. 
+ **Restrictions d'accès** — Les développeurs n'ont pas accès à la création de ce pipeline en dehors du processus de correctif. 
+ **Étape contrôlée** — Le pipeline possède une étape contrôlée avec un jeton d'accès spécial, ce qui garantit qu'une pull request (PR) ne peut être créée qu'une seule fois. 
+ **Étapes d'**approbation — Les étapes d'approbation sont incluses dans le pipeline pour obtenir les approbations nécessaires des parties prenantes concernées. 
+ **Suppression automatique** — Le pipeline de correctifs est automatiquement supprimé chaque fois qu'une `hotfix` branche est supprimée du CodeCommit référentiel après sa fusion avec un PR. 

## Conditions préalables et limitations
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-prereqs"></a>

**Conditions préalables**
+ Trois actifs Comptes AWS sont requis comme suit :
  + Compte d'outils - Pour la configuration de l'intégration continue et de la livraison continue (CI/CD).
  + Compte Stage : pour les tests d'acceptation par les utilisateurs.
  + Compte de production : pour un utilisateur final professionnel.
  + (Facultatif) Ajoutez un Compte AWS pour faire office de compte QA. Ce compte est requis si vous souhaitez à la fois une configuration de pipeline principal, y compris l'assurance qualité, et une solution de pipeline de correctifs pour les tests.
+ Une AWS CloudFormation pile avec une condition facultative à déployer dans le compte QA à l'aide du pipeline principal, si nécessaire. Le modèle peut toujours être testé sans la configuration du pipeline principal en créant et en supprimant une `hotfix` branche.
+ Un bucket Amazon Simple Storage Service (Amazon S3) pour stocker CloudFormation les modèles utilisés pour créer les produits Service Catalog.
+ Créez des règles d'approbation des relations publiques pour le CodeCommit référentiel conformément aux exigences de conformité (après avoir créé le référentiel).
+ Limitez les autorisations IAM des développeurs et des chefs d'équipe pour refuser l'exécution de la fonction Lambda [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55), car elle ne doit être invoquée que depuis le pipeline.

**Limites**
+ Le CloudFormation fournisseur est utilisé lors de la phase de déploiement, et l'application est déployée à l'aide d'un ensemble de CloudFormation modifications. Si vous souhaitez utiliser une autre option de déploiement, modifiez la CodePipeline pile selon vos besoins.
+ Ce modèle utilise AWS CodeBuild d'autres fichiers de configuration pour déployer un exemple de microservice. Si vous avez un autre type de charge de travail (par exemple, des charges de travail sans serveur), vous devez mettre à jour toutes les configurations pertinentes.
+ Ce modèle déploie l'application en une seule fois Région AWS (par exemple, USA East (Virginie du Nord) us-east-1). Comptes AWS Pour effectuer un déploiement dans plusieurs régions, modifiez la référence de région dans les commandes et les piles.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-architecture"></a>

Les diagrammes de cette section fournissent des flux de travail pour un événement de création de cycle de vie et pour un événement de suppression du cycle de vie.

![\[Flux de travail pour créer un événement du cycle de vie.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/3939f77c-4221-4c23-a3a1-3e8a294b2b32.png)


Le schéma précédent relatif à la création d'un événement du cycle de vie montre ce qui suit :

1. Le développeur crée une `hotfix-*` branche dans le CodeCommit référentiel pour développer une solution liée au correctif.

1. L'événement de création de `hotfix-*` branche est capturé par le biais de la EventBridge règle. Les détails de l'événement incluent le nom du référentiel et le nom de la branche.

1. La EventBridge règle invoque la AWS Lambda fonction. `hotfix-lambda-function` La EventBridge règle transmet les informations d'événement à la fonction Lambda en entrée.

1. La fonction Lambda traite l'entrée pour récupérer le nom du référentiel et le nom de la branche. Il lance le produit Service Catalog avec les valeurs extraites des entrées traitées.

1. Le produit Service Catalog inclut une configuration de pipeline qui déploiera la solution dans les environnements de scène et de production. Le bloc de pipeline inclut les étapes de source, de construction et de déploiement. Il existe également une étape d'approbation manuelle pour promouvoir le déploiement dans l'environnement de production.

1. L'étape source récupère le code du référentiel et de la `hotfix-*` branche créés lors de la première étape. Le code est transmis à la phase de construction via un compartiment Amazon S3 pour les artefacts. Au cours de la phase de construction, une image de conteneur est créée qui inclut le correctif logiciel développé dans la `hotfix-*` branche et introduit dans Amazon Elastic Container Registry (Amazon ECR).

1. De phase de déploiement en phase, l'environnement met à jour Amazon Elastic Container Service (Amazon ECS) avec la dernière image de conteneur incluant le correctif logiciel. Le correctif est déployé en créant et en exécutant un ensemble de CloudFormation modifications.

1. La fonction `prcreation-lambda` Lambda est invoquée après un déploiement réussi dans l'environnement Stage. Cette fonction Lambda crée un PR à partir de la `hotfix-*` branche vers les `main` branches `develop` et du référentiel. La fonction Lambda garantit que le correctif développé dans la `hotfix-*` branche est rétrofusionné et inclus dans les déploiements ultérieurs.

1. Une étape d'approbation manuelle permet de garantir que les parties prenantes concernées examinent le correctif et approuvent le déploiement en production.

1. La phase de déploiement dans l'environnement de production met à jour Amazon ECS avec la dernière image de conteneur incluant le correctif. Le correctif est déployé en créant et en exécutant un ensemble de CloudFormation modifications.

![\[Flux de travail pour supprimer un événement du cycle de vie.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/192aa897-bd9b-4a9f-804e-340371612b3b.png)


Le schéma précédent relatif à la suppression d'un événement du cycle de vie montre ce qui suit :

1. Le développeur supprime la `hotfix-*` branche après le déploiement réussi du correctif dans l'environnement de production.

1. L'événement de suppression de `hotfix-*` branche est capturé par le biais d'une EventBridge règle. Les détails de l'événement incluent le nom du référentiel et le nom de la branche.

1. La EventBridge règle invoque la fonction Lambda. La EventBridge règle transmet les informations d'événement à la fonction Lambda en entrée.

1. La fonction Lambda traite l'entrée pour récupérer le nom du référentiel et le nom de la branche. La fonction Lambda détermine le produit Service Catalog correspondant à partir de l'entrée transmise, puis met fin au produit.

1. La résiliation du produit provisionné par le Service Catalog supprime le pipeline et les ressources pertinentes qui ont été créées précédemment dans ce produit.

**Automatisation et mise à l'échelle**
+ Le modèle inclut une EventBridge règle et une fonction Lambda, qui peuvent gérer plusieurs demandes de création de branche Hotfix en parallèle. La fonction Lambda approvisionne le produit Service Catalog pour la règle d'événement correspondante.
+ La configuration du pipeline est gérée à l'aide du produit Service Catalog, qui fournit des fonctionnalités de contrôle de version. La solution s'adapte également automatiquement pour gérer en parallèle plusieurs développements de correctifs pour la même application.
+ La fonction [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) garantit que ces modifications du correctif sont également fusionnées dans les `develop` branches `main` et par le biais d'une création automatique de pull request. Cette approche est essentielle pour maintenir les branches `main` et les `develop` branches à jour avec tous les correctifs et éviter d'éventuelles régressions de code. Ce processus permet de maintenir la cohérence entre les branches et d'empêcher les régressions de code en garantissant que toutes les branches à longue durée de vie disposent des derniers correctifs.

## Outils
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source. AWS CodeCommit n'est plus disponible pour les nouveaux clients. Les clients existants de AWS CodeCommit peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez [Comment migrer votre AWS CodeCommit dépôt vers un autre fournisseur Git](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)vous permet de gérer de manière centralisée les catalogues de services informatiques approuvés. AWS Les utilisateurs finaux peuvent déployer rapidement uniquement les services informatiques approuvés dont ils ont besoin, en respectant les contraintes définies par votre organisation.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Autres outils**
+ [CloudFormation Linter (cfn-lint) est un linter](https://github.com/aws-cloudformation/cfn-lint) [qui vérifie les modèles CloudFormation YAML ou JSON par rapport à la spécification des ressources. 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-nag](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.
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs. Ce modèle utilise Docker pour créer et tester des images de conteneurs localement.
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué et open source.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [dynamic\$1hotfix\$1codepipeline](https://github.com/aws-samples/dynamic_hotfix_codepipeline).

## Bonnes pratiques
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-best-practices"></a>

Passez en revue et ajustez les rôles IAM et les politiques de contrôle des services (SCP) dans votre environnement afin de vous assurer qu'ils limitent l'accès de manière appropriée. Cela est essentiel pour empêcher toute action susceptible de passer outre aux mesures de sécurité incluses dans ce modèle. Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-epics"></a>

### Configuration de l'environnement de travail
<a name="set-up-the-work-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner l'exemple de [référentiel](https://github.com/aws-samples/dynamic_hotfix_codepipeline) dans un nouveau répertoire de votre lieu de travail, exécutez la commande suivante :<pre>git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git</pre> | AWS DevOps | 
| Exportez les variables d'environnement pour le déploiement de la CloudFormation pile. | Définissez les variables d'environnement suivantes qui seront utilisées comme entrée dans les CloudFormation piles ultérieurement dans ce modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export BucketStartName=<BucketName></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export ProdAccount=<prodaccountnumber><br />export StageAccount=<stage/preprodaccountnumber><br />export QAAccount=<qaccountnumber><br />export ToolsAccount=<toolsaccountnumber><br />export DepRegion=<region></pre> | AWS DevOps | 

### Configurer les prérequis requis dans Comptes AWS
<a name="set-up-prerequisites-required-in-aws-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les ressources nécessaires CI/CD dans le compte d'outils. | Pour déployer la CloudFormation pile dans le compte Tools, utilisez les commandes suivantes. (Supprimez le `QAAccount` paramètre si vous n'utilisez pas le compte QA pour la configuration.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre>Notez les ressources créées par le CodeCommit référentiel et Amazon ECR à partir de la pile précédente. Ces paramètres sont nécessaires pour configurer la `main` branche du pipeline lors des prochaines étapes. | AWS DevOps | 
| Créez les ressources requises pour CI/CD les comptes de charge de travail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Mettez à jour la politique du compartiment d'artefacts S3 pour autoriser l'accès aux comptes de charge de travail. | Pour mettre à jour les prérequis relatifs à la CloudFormation pile dans le compte d'outils, utilisez les commandes suivantes pour ajouter toutes les autorisations requises pour les comptes de charge de travail de scène et de production. (Supprimez le `QAAccount` paramètre si vous ne l'utilisez pas pour la configuration.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} PutPolicy=true \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre> | AWS DevOps | 

### Configurer la fonction Lambda et les ressources Service Catalog dans le compte d'outils
<a name="set-up-lam-function-and-sc-resources-in-tools-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le portefeuille et les produits du Service Catalog. | Pour configurer le portefeuille et les produits du Service Catalog, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Configurez les fonctions Lambda. | Cette solution utilise les fonctions Lambda suivantes pour gérer les flux de travail liés aux correctifs :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)Pour permettre aux fonctions Lambda de provisionner et de résilier les produits Service Catalog lorsque `hotfix ` des branches sont créées ou supprimées par le biais de la EventBridge règle associée, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Création d'un pipeline pour la succursale principale et déploiement de l'application dans les comptes de charge de travail
<a name="create-pipeline-for-main-branch-and-deploy-application-in-workload-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le pipeline pour `main` la succursale. | Pour configurer le pipeline pour la branche principale, exécutez la commande suivante dans le compte tools. Remplacez les paramètres pour `MainProductId` et par `MainProductArtifactId` les valeurs issues des sorties de la `servicecatalogsetup` pile.<pre>#InToolsAccount<br />aws servicecatalog provision-product \<br />    --product-id <MainProductId> \<br />    --provisioning-artifact-id <MainProductArtifactId> \<br />    --provisioned-product-name "${ApplicationName}-main-pipeline" \<br />    --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \<br />    --region=${DepRegion}</pre> | AWS DevOps | 
| Déployez l'application à l'aide de la `main` branche. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Créez le pipeline pour une branche hotfix-\$1 et déployez le correctif
<a name="create-the-pipeline-for-a-hotfix--branch-and-deploy-the-hotfix"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une `hotfix-*` branche et validez les modifications. | Pour créer un pipeline pour la `hotfix-*` branche et déployer le correctif sur les comptes de charge de travail, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Supprimez la `hotfix-check1` branche. | Pour supprimer la `hotfix-check1` branche créée précédemment, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez les ressources déployées. | Pour nettoyer les ressources déployées précédemment, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>##In Tools Account##<br />aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}</pre><pre>##In Workload Accounts##<br />aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}</pre>Pour plus d'informations, consultez [la section Suppression de produits provisionnés](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) dans la documentation du Service Catalog. | AWS DevOps | 

## Résolution des problèmes
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les modifications que vous avez apportées au CodeCommit référentiel ne sont pas déployées. | Vérifiez les CodeBuild journaux pour détecter les erreurs lors de l'action de compilation de Docker. Pour plus d’informations, consultez la [documentation CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html). | 
| Le produit Service Catalog n'est pas approvisionné. | Passez en revue les CloudFormation piles associées pour détecter les événements ayant échoué. Pour plus d’informations, consultez la [documentation CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html). | 

## Ressources connexes
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-resources"></a>
+ [Commandes Git de base](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-basic-git.html)
+ [Configurer une politique IAM pour limiter les transferts et les fusions vers une succursale](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html#how-to-conditional-branch-create-policy)
+ [Se connecter à un AWS CodeCommit référentiel](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [Octroi d'accès aux utilisateurs](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)
+ [Transférer une image Docker vers un référentiel privé Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Résolution des problèmes AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html)
+ [Qu'est-ce que c'est AWS CodePipeline ?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

## Informations supplémentaires
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional"></a>

Ce modèle est conçu pour les environnements dotés d'une configuration Gitflow qui est adoptée pour le flux de travail de développement au CI/CD cours du processus. Les pipelines suivent le cycle de déploiement qui commence par le développement et passe par les environnements d'assurance qualité (QA), de phase et de production. La CI/CD configuration inclut deux branches git avec des déploiements promotionnels dans les environnements suivants :
+ La `develop` branche se déploie dans l'environnement de développement.
+ La `main` succursale effectue des déploiements dans les environnements d'assurance qualité, de scène et de production.

Dans cette configuration, il est difficile d'appliquer un correctif ou un correctif de sécurité plus rapidement que le cycle de déploiement habituel alors que le développement actif de nouvelles fonctionnalités est en cours. Un processus dédié est nécessaire pour traiter les correctifs ou les demandes de sécurité, afin de garantir le bon fonctionnement et la sécurité des environnements en direct.

Toutefois, vous pouvez utiliser les autres options disponibles sans avoir besoin d'un processus de déploiement dédié si :
+ Le CI/CD processus est bien équipé avec des tests automatisés, tels que des tests fonctionnels et end-to-end des tests, qui éliminent le besoin de tests manuels et évitent les retards dans les déploiements en production. Toutefois, si les tests automatisés ne sont pas bien intégrés au CI/CD processus, apporter une petite correction à l'environnement de production peut s'avérer complexe et fastidieux pour les développeurs. Cela est dû au fait que de nouvelles fonctionnalités peuvent être en attente d'approbation et de validation dans l'environnement d'assurance qualité. Un correctif logiciel ou un correctif de sécurité ne peuvent pas être mis en production de manière simple et simultanée.
+ Les équipes de développement déploient en permanence de nouvelles fonctionnalités dans l'environnement de production, en intégrant des correctifs ou des correctifs de sécurité dans le déploiement planifié de chaque nouvelle fonctionnalité. En d'autres termes, la prochaine mise à jour des fonctionnalités de l'environnement de production comprend deux composants : l'ajout d'une nouvelle fonctionnalité et l'inclusion du correctif logiciel ou du correctif de sécurité. Toutefois, si le cycle de déploiement n'est pas continu, plusieurs nouvelles fonctionnalités peuvent déjà être en attente d'approbation dans l'environnement d'assurance qualité. Gérer les différentes versions et s'assurer que les modifications correctes sont réappliquées peut alors devenir complexe et source d'erreurs.

**Note**  
Si vous utilisez [la version 2](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types.html#:~:text=V2%20type%20pipelines%20have%20the%20same%20structure) de AWS CodePipeline avec des déclencheurs appropriés configurés sur la `hotfix` branche, vous avez toujours besoin d'un processus dédié pour traiter les demandes imprévues. Dans la version 2, vous pouvez configurer des déclencheurs pour les requêtes push ou pull. L'exécution sera soit mise en file d'attente, soit exécutée immédiatement, en fonction de l'état précédent du pipeline. Cependant, avec un pipeline dédié, les correctifs sont appliqués immédiatement à l'environnement de production, ce qui garantit que les problèmes urgents sont résolus sans délai.

# Automatisez la suppression des AWS CloudFormation piles et des ressources associées
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*SANDEEP SINGH et James Jacob, Amazon Web Services*

## Résumé
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)est un service largement utilisé pour gérer l'infrastructure cloud en tant que code (iAc). Lorsque vous utilisez CloudFormation, vous gérez les ressources associées en tant qu'unité unique appelée *pile*. Pour créer, mettre à jour et supprimer un ensemble de ressources, vous créez, mettez à jour et supprimez des piles.

Parfois, vous n'avez plus besoin des ressources d'une CloudFormation pile. En fonction des ressources et de leurs configurations, il peut être compliqué de supprimer une pile et les ressources associées. Dans les systèmes de production réels, les suppressions échouent parfois ou prennent du temps en raison de conditions contradictoires ou de restrictions impossibles à annuler CloudFormation . Cela peut nécessiter une planification et une exécution minutieuses pour s'assurer que toutes les ressources sont correctement supprimées de manière efficace et cohérente. Ce modèle décrit comment configurer une structure qui vous aide à gérer la suppression de CloudFormation piles impliquant les complexités suivantes :
+ **Ressources protégées contre la suppression : la protection contre** la suppression peut être activée sur certaines ressources. Les tables [Amazon DynamoDB et les compartiments Amazon](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) [Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) en sont des exemples courants. La protection contre la suppression empêche la suppression automatique, telle que la suppression via CloudFormation. Si vous souhaitez supprimer ces ressources, vous devez annuler ou désactiver temporairement la protection contre la suppression manuellement ou par programmation. Vous devez examiner attentivement les implications de la suppression de ces ressources avant de continuer.
+ **Ressources soumises à des politiques de rétention** : certaines ressources, telles que les clés AWS Key Management Service (AWS KMS) et les compartiments Amazon S3, peuvent être soumises à des politiques de rétention qui spécifient la durée pendant laquelle elles doivent être conservées après la demande de suppression. Vous devez tenir compte de ces politiques dans la stratégie de nettoyage afin de garantir la conformité aux politiques organisationnelles et aux exigences réglementaires.
+ **Suppression différée des fonctions Lambda associées à un VPC** — La suppression d'une [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)fonction attachée à un cloud privé virtuel (VPC) peut prendre 5 à 40 minutes, selon les multiples dépendances interconnectées impliquées dans le processus. Si vous détachez la fonction du VPC avant de supprimer la pile, vous pouvez réduire ce délai à moins d'une minute.
+ **Ressources non directement créées par CloudFormation** : dans certaines conceptions d'applications, les ressources peuvent être créées en dehors de la CloudFormation pile d'origine, soit par l'application elle-même, soit par des ressources fournies via la pile. En voici deux exemples :
  + CloudFormation peut fournir une instance [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) qui exécute un script de données utilisateur. Ce script peut ensuite créer un [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)paramètre pour stocker les données relatives à l'application. Ce paramètre n'est pas géré via CloudFormation.
  + CloudFormation peut fournir une fonction Lambda qui génère automatiquement un groupe [Amazon CloudWatch Logs pour le stockage des journaux](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). Ce groupe de journaux n'est pas géré via CloudFormation.

  Même si ces ressources ne sont pas directement gérées par CloudFormation, elles ont souvent besoin d'être nettoyées lorsque la pile est supprimée. S'ils ne sont pas gérés, ils peuvent devenir orphelins et entraîner une consommation inutile de ressources.

Bien que ces garde-corps puissent être complexes, ils sont intentionnels et essentiels. CloudFormation Permettre de contourner toutes les contraintes et de supprimer des ressources sans discernement pourrait avoir des conséquences néfastes et imprévues dans de nombreux scénarios. Cependant, en tant DevOps qu'ingénieur cloud responsable de la gestion de l'environnement, il peut parfois être nécessaire de contourner ces contraintes, en particulier dans les environnements de développement, de test ou de test.

**Résultats commerciaux ciblés**

En mettant en œuvre ce cadre, vous pouvez obtenir les avantages suivants :
+ **Gestion des coûts** — Le nettoyage régulier et efficace des environnements temporaires, tels que les environnements de test end-to-end d'acceptation par les utilisateurs, permet d'éviter que les ressources ne s'épuisent plus que nécessaire. Cela permet de réduire considérablement les coûts.
+ **Sécurité** — Le nettoyage automatique des ressources obsolètes ou inutilisées réduit la surface d'attaque et contribue à maintenir un AWS environnement sécurisé.
+ **Efficacité opérationnelle** — Un nettoyage régulier et automatisé peut apporter les avantages opérationnels suivants :
  + Les scripts automatisés qui suppriment les anciens groupes de journaux ou les compartiments Amazon S3 vides peuvent améliorer l'efficacité opérationnelle en préservant la propreté et la gestion de l'environnement.
  + La suppression et la recréation rapides des piles permettent une itération rapide pour la conception et la mise en œuvre, ce qui peut conduire à une architecture plus robuste et résiliente.
  + La suppression et la reconstruction régulières d'environnements peuvent vous aider à identifier et à résoudre les problèmes potentiels. Cela peut vous aider à vous assurer que l'infrastructure peut résister aux scénarios du monde réel.

## Conditions préalables et limitations
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Python version 3.6 ou ultérieure, [installé](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limites**
+ Une convention de dénomination est utilisée pour identifier les ressources qui doivent être supprimées. L'exemple de code de ce modèle utilise un préfixe pour le nom de la ressource, mais vous pouvez définir votre propre convention de dénomination. Les ressources qui n'utilisent pas cette convention de dénomination ne seront pas identifiées ni supprimées ultérieurement.

## Architecture
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

Le schéma suivant montre comment ce framework identifie la CloudFormation pile cible et les ressources supplémentaires qui y sont associées.

![\[Les phases qui découvrent, traitent et suppriment les CloudFormation piles et leurs ressources associées.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


Le schéma suivant illustre le flux de travail suivant :

1. **Rassemblez des ressources** : le framework d'automatisation utilise une convention de dénomination pour renvoyer toutes les CloudFormation piles pertinentes, les référentiels Amazon Elastic Container Registry (Amazon ECR), les tables DynamoDB et les compartiments Amazon S3.
**Note**  
Les fonctions de cette étape utilisent des [paginateurs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), une fonctionnalité de Boto3 qui résume le processus d'itération sur un ensemble de résultats d'API tronqué. Cela garantit que toutes les ressources sont traitées. Pour optimiser davantage les performances, envisagez d'appliquer un filtrage [côté serveur](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou envisagez de l'utiliser JMESPath pour effectuer un filtrage côté [client](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath).

1. **Prétraitement** — Le cadre d'automatisation identifie et répond aux contraintes de service qui doivent être contournées afin de CloudFormation permettre la suppression des ressources. Par exemple, il modifie le `DeletionProtectionEnabled` paramètre des tables DynamoDB en. `False` Dans l'interface de ligne de commande, pour chaque ressource, vous recevez un message vous demandant si vous souhaitez annuler la contrainte.

1. **Supprimer la pile** : le framework d'automatisation supprime la CloudFormation pile. Dans l'interface de ligne de commande, vous recevez un message vous demandant si vous souhaitez supprimer la pile.

1. **Post-traitement** — Le cadre d'automatisation supprime toutes les ressources associées qui n'ont pas été directement approvisionnées dans le CloudFormation cadre de la pile. Les paramètres de Systems Manager et les groupes de CloudWatch journaux sont des exemples de ces types de ressources. Des fonctions distinctes rassemblent ces ressources, les prétraitent, puis les suppriment. Dans l'interface de ligne de commande, pour chaque ressource, vous recevez un message vous demandant si vous souhaitez supprimer la ressource.
**Note**  
Les fonctions de cette étape utilisent des [paginateurs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), une fonctionnalité de Boto3 qui résume le processus d'itération sur un ensemble de résultats d'API tronqué. Cela garantit que toutes les ressources sont traitées. Pour optimiser davantage les performances, envisagez d'appliquer un filtrage [côté serveur](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou envisagez de l'utiliser JMESPath pour effectuer un filtrage côté [client](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath).

**Automatisation et mise à l'échelle**

Si votre CloudFormation pile inclut d'autres ressources qui ne sont pas incluses dans l'exemple de code, ou si la pile comporte une contrainte qui n'a pas été prise en compte dans ce modèle, vous pouvez adapter le cadre d'automatisation à votre cas d'utilisation. Suivez la même méthodologie de collecte des ressources, de prétraitement, de suppression de la pile, puis de post-traitement.

## Outils
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS.
+ [CloudFormation L'interface de ligne de commande (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) est un outil open source qui vous permet de développer et de tester AWS des extensions tierces, puis de les enregistrer pour les utiliser dans. CloudFormation
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.

**Autres outils**
+ [Click](https://click.palletsprojects.com/en/stable/) est un outil Python qui permet de créer des interfaces de ligne de commande.
+ [Poetry](https://python-poetry.org/docs/) est un outil de gestion des dépendances et d'empaquetage en Python.
+ [Pyenv](https://github.com/pyenv/pyenv) est un outil qui vous aide à gérer et à passer d'une version à l'autre de Python.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)référentiel.

## Bonnes pratiques
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Étiquetez les ressources pour les identifier facilement** : mettez en œuvre une [stratégie de balisage](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) pour identifier les ressources créées pour différents environnements et objectifs. Les balises peuvent simplifier le processus de nettoyage en vous aidant à filtrer les ressources en fonction de leurs balises.
+ **Configurer les cycles de vie des** ressources : définissez les cycles de vie des ressources afin de supprimer automatiquement les ressources après une certaine période. Cette pratique vous permet de vous assurer que les environnements temporaires ne deviennent pas des coûts permanents.

## Épopées
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Outils d'installation
<a name="install-tools"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingénieur | 
| Installez Poetry. | Suivez les [instructions](https://python-poetry.org/docs/) (documentation Poetry) pour installer Poetry dans l'environnement virtuel cible. | DevOps ingénieur | 
| Installez les dépendances. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingénieur | 
| (Facultatif) Installez Pyenv. | Suivez les [instructions](https://github.com/pyenv/pyenv#installation) (GitHub) pour installer Pyenv. | DevOps ingénieur | 

### (Facultatif) Personnalisez le cadre
<a name="optional-customize-the-framework"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez des fonctions qui collectent, prétraitent et suppriment les ressources cibles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingénieur, Python | 

### Création d'exemples de ressources
<a name="create-sample-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Créez un paramètre Systems Manager. | Entrez la commande suivante pour créer un paramètre Systems Manager qui n'est pas provisionné via CloudFormation :<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Créez un compartiment Amazon S3. | Entrez la commande suivante pour créer un compartiment Amazon S3 qui n'est pas provisionné via CloudFormation :<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Supprimer les exemples de ressources
<a name="delete-the-sample-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez la CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Validez la suppression des ressources. | Dans le résultat, confirmez que tous les exemples de ressources ont été supprimés. Pour un exemple de sortie, consultez la section [Ressources supplémentaires](#automate-deletion-cloudformation-stacks-associated-resources-additional) de ce modèle. | AWS DevOps | 

## Ressources connexes
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Supprimer une pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentation)
+ [Résolution des problèmes CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentation)
+ [Permettre aux fonctions Lambda d'accéder aux ressources d'un Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (documentation Lambda)
+ [Comment supprimer une AWS CloudFormation pile bloquée dans le statut DELETE\$1FAILED ?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Centre de AWS connaissances)

## Informations supplémentaires
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

Voici un exemple de sortie de la `cfncli` commande :

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```

# Automatisez l'ingestion et la visualisation des métriques personnalisées Amazon MWAA sur Amazon Managed Grafana à l'aide de Terraform
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah et Satya Vajrapu, Amazon Web Services*

## Résumé
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

Ce modèle explique comment utiliser Amazon Managed Grafana pour créer et surveiller des métriques personnalisées qui sont ingérées par Amazon Managed Workflows pour Apache Airflow (Amazon MWAA). Amazon MWAA sert d'orchestrateur pour les flux de travail, en utilisant des graphes acycliques dirigés (DAGs) écrits en Python. Ce modèle est centré sur la surveillance de mesures personnalisées, notamment le nombre total d'exécutions DAGs effectuées au cours de la dernière heure, le nombre de réussites et DAGs d'échecs par heure et la durée moyenne de ces processus. Cette analyse montre comment Amazon Managed Grafana s'intègre à Amazon MWAA pour permettre une surveillance complète et des informations sur l'orchestration des flux de travail au sein de cet environnement.

## Conditions préalables et limitations
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS disposant des autorisations utilisateur nécessaires pour créer et gérer les éléments suivants Services AWS :
  + Gestion des identités et des accès AWS Rôles et politiques (IAM)
  + AWS Lambda
  + Amazon Managed Grafana
  + Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Timestream
+ Accès à un environnement shell qui peut être un terminal sur votre machine locale ou [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html).
+ Un environnement shell avec Git installé et la dernière version de AWS Command Line Interface (AWS CLI) installée et configurée. Pour plus d'informations, consultez la section [Installation ou mise à jour vers la dernière version AWS CLI de](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) la AWS CLI documentation.
+ La version suivante de Terraform est installée : `required_version = ">= 1.6.1, < 2.0.0"` vous pouvez utiliser [tfswitch pour basculer](https://tfswitch.warrensbox.com/) entre les différentes versions de Terraform.
+ Source d'identité configurée AWS IAM Identity Center pour votre Compte AWS. Pour plus d'informations, voir [Confirmer vos sources d'identité dans IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html) dans la documentation d'IAM Identity Center. Vous pouvez choisir entre Active Directory par défaut Répertoire IAM Identity Center ou un fournisseur d'identité (IdP) externe tel qu'Okta. Pour plus d'informations, consultez la section [Ressources connexes](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources).

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ Terraforme `required_version = ">= 1.6.1, < 2.0.0"`
+ Amazon Managed Grafana version 9.4 ou ultérieure. Ce modèle a été testé sur la version 9.4.

## Architecture
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

Le schéma d'architecture suivant met en évidence les éléments Services AWS utilisés dans la solution.

![\[Flux de travail pour automatiser l'ingestion des métriques personnalisées Amazon MWAA.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


Le schéma précédent décrit le flux de travail suivant :

1. Les métriques personnalisées d'Amazon MWAA proviennent de DAGs celles qui sont exécutées dans l'environnement. Les métriques sont téléchargées dans le compartiment Amazon S3 au format de fichier CSV. Les éléments suivants DAGs utilisent les fonctionnalités d'interrogation de base de données d'Amazon MWAA :
   + `run-example-dag`— Ce DAG contient un exemple de code Python qui définit une ou plusieurs tâches. Il fonctionne toutes les 7 minutes et affiche la date. Après l'impression de la date, le DAG inclut une tâche dont l'exécution doit être interrompue pendant une durée spécifique.
   + `other-sample-dag`— Ce DAG s'exécute toutes les 10 minutes et imprime la date. Après l'impression de la date, le DAG inclut une tâche dont l'exécution doit être interrompue pendant une durée spécifique.
   + `data-extract`— Ce DAG s'exécute toutes les heures, interroge la base de données Amazon MWAA et collecte des métriques. Une fois les métriques collectées, ce DAG les écrit dans un compartiment Amazon S3 pour un traitement et une analyse ultérieurs.

1. Pour rationaliser le traitement des données, les fonctions Lambda s'exécutent lorsqu'elles sont déclenchées par des événements Amazon S3, ce qui facilite le chargement des métriques dans Timestream.

1. Timestream est intégré en tant que source de données dans Amazon Managed Grafana où sont stockées toutes les métriques personnalisées d'Amazon MWAA.

1. Les utilisateurs peuvent interroger les données et créer des tableaux de bord personnalisés pour visualiser les indicateurs de performance clés et obtenir des informations sur l'orchestration des flux de travail au sein d'Amazon MWAA.

## Outils
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**Services AWS**
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)vous permet de gérer de manière centralisée l'accès par authentification unique (SSO) à toutes vos applications Comptes AWS et à celles du cloud.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez. Dans ce modèle, AWS Lambda exécute le code Python en réponse aux événements Amazon S3 et gère automatiquement les ressources de calcul.
+ [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) est un service de visualisation de données entièrement géré que vous pouvez utiliser pour interroger, corréler, visualiser et émettre des alertes sur vos métriques, journaux et traces. Ce modèle utilise Amazon Managed Grafana pour créer un tableau de bord pour la visualisation des métriques et les alertes.
+ [Amazon Managed Workflows for Apache Airflow (Amazon MWAA)](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html) est un service d'orchestration géré pour Apache Airflow que vous pouvez utiliser pour configurer et exploiter des pipelines de données dans le cloud à grande échelle. [Apache Airflow](https://airflow.apache.org/) est un outil open source utilisé pour créer, planifier et surveiller par programmation des séquences de processus et de tâches appelées flux de travail. Dans ce modèle, un échantillon DAGs et un extracteur de métriques DAG sont déployés dans Amazon MWAA.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données. Dans ce modèle, Amazon S3 est utilisé pour stocker DAGs des scripts et des métriques personnalisées au format CSV.
+ [Amazon Timestream LiveAnalytics](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) for is est une base de données de séries chronologiques rapide, évolutive, entièrement gérée et spécialement conçue qui facilite le stockage et l'analyse de milliards de points de données de séries chronologiques par jour. Timestream for s'intègre LiveAnalytics également aux services couramment utilisés pour la collecte de données, la visualisation et l'apprentissage automatique. Dans ce modèle, il est utilisé pour ingérer les métriques personnalisées Amazon MWAA générées.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud. Ce modèle utilise un module Terraform pour automatiser le provisionnement de l'infrastructure dans. AWS

**Référentiel de code**

Le code de ce modèle est disponible GitHub dans le dépôt [visualize-amazon-mwaa-custom-metrics-grafana](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana). Le `stacks/Infra` dossier contient les éléments suivants :
+ Fichiers de configuration Terraform pour toutes les ressources AWS 
+ Fichier .json du tableau de bord Grafana dans le dossier `grafana`
+ Amazon Managed Workflows pour Apache Airflow DAGs dans le dossier `mwaa/dags`
+ Code Lambda pour analyser le fichier .csv et stocker les métriques dans le dossier de la base de données Timestream `src`
+ Fichiers .json de politique IAM dans le dossier `templates`

## Bonnes pratiques
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

Terraform doit stocker l'état de votre infrastructure et de votre configuration gérées afin de pouvoir mapper les ressources du monde réel à votre configuration. Par défaut, Terraform stocke l'état localement dans un fichier nommé. `terraform.tfstate` Il est essentiel de garantir la sécurité et l'intégrité de votre fichier d'état Terraform, car il maintient l'état actuel de votre infrastructure. Pour plus d'informations, consultez [Remote State](https://developer.hashicorp.com/terraform/language/state/remote) dans la documentation Terraform. 

## Épopées
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### Déployez l'infrastructure à l'aide de Terraform
<a name="deploy-the-infrastructure-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'infrastructure. | Pour déployer l'infrastructure de la solution, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### Valider les ressources d'infrastructure déployées
<a name="validate-the-deployed-infrastructure-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez l'environnement Amazon MWAA. | Pour valider l'environnement Amazon MWAA, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingénieur de données | 
| Vérifiez les horaires du DAG. | Pour consulter le calendrier de chaque DAG, accédez à l'onglet **Planification de** l'**interface utilisateur d'Airflow**.Chacun des programmes suivants DAGs possède un calendrier préconfiguré, qui s'exécute dans l'environnement Amazon MWAA et génère des métriques personnalisées : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Vous pouvez également voir les exécutions réussies de chaque DAG dans la colonne **Exécutions**.  | Ingénieur de données, AWS DevOps | 

### Configuration de l'environnement Amazon Managed Grafana
<a name="configure-the-gra-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'accès à l'espace de travail Amazon Managed Grafana. | Les scripts Terraform ont créé l'espace de travail, les tableaux de bord et la page de statistiques Amazon Managed Grafana requis. Pour configurer l'accès afin de pouvoir les consulter, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Installez le plugin Amazon Timestream.  | Les métriques personnalisées Amazon MWAA sont chargées dans la base de données Timestream. Vous utilisez le plugin Timestream pour visualiser les métriques avec les tableaux de bord Amazon Managed Grafana.Pour installer le plugin Timestream, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Pour plus d'informations, consultez la section [Étendez votre espace de travail avec des plug-ins](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins) dans la documentation Amazon Managed Grafana. | AWS DevOps, DevOps ingénieur | 

### Visualisez les métriques personnalisées dans le tableau de bord Amazon Managed Grafana
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Consultez le tableau de bord Amazon Managed Grafana. | Pour consulter les statistiques qui ont été ingérées dans l'espace de travail Amazon Managed Grafana, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)La page des statistiques du tableau de bord affiche les informations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Personnalisez le tableau de bord Amazon Managed Grafana. | Pour personnaliser les tableaux de bord en vue de futures améliorations, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Le code source de ce tableau de bord est également disponible dans le `dashboard.json` fichier du `stacks/infra/grafana` dossier du [GitHub référentiel](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json). | AWS DevOps | 

### Nettoyer les AWS ressources
<a name="clean-up-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Suspendez les exécutions du DAG Amazon MWAA. | Pour suspendre les exécutions du DAG, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingénieur de données | 
| Supprimez les objets dans les compartiments Amazon S3. | Pour supprimer les compartiments Amazon S3 **mwaa-events-bucket-\$1 et **mwaa-metrics-bucket-\$1****, suivez les instructions d'utilisation de la console Amazon S3 dans [Supprimer un compartiment dans la](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) documentation Amazon S3. | AWS DevOps | 
| Détruisez les ressources créées par Terraform. | Pour détruire les ressources créées par Terraform et le fichier d'état local Terraform associé, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## Résolution des problèmes
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` | Passez AWS CLI à la [dernière version](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | 
| Erreur lors du chargement des sources de données - `Fetch error: 404 Not Found Instantiating…` | L'erreur est intermittente. Patientez quelques minutes, puis actualisez vos sources de données pour afficher la source de données Timestream répertoriée.  | 

## Ressources connexes
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS documentation**
+ [Amazon Managed Grafana pour les tableaux de bord et la visualisation](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [Configurer Amazon Managed Grafana pour utiliser Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [À utiliser AWS IAM Identity Center avec votre espace de travail Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [Utilisation DAGs sur Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS vidéos**
+ [Configurez IAM Identity Center avec Amazon Managed Grafana pour l'authentification, comme indiqué dans la vidéo suivante.](https://www.youtube.com/watch?v=XX2Xcz-Ps9U)




[https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U ? contrôles = 0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ [Si IAM Identity Center n'est pas disponible, vous pouvez également intégrer l'authentification Amazon Managed Grafana en utilisant un fournisseur d'identité externe (IdP) tel qu'Okta, comme le montre la vidéo suivante.](https://www.youtube.com/watch?v=Z4JHxl2xpOg)




[https://www.youtube-nocookie.com/embed/A4 Oh JHxl2xp ? contrôles = 0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## Informations supplémentaires
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

Vous pouvez créer une solution complète de surveillance et d'alerte pour votre environnement Amazon MWAA, permettant une gestion proactive et une réponse rapide aux problèmes ou anomalies potentiels. Amazon Managed Grafana inclut les fonctionnalités suivantes :

**Alertes** — Vous pouvez configurer des alertes dans Amazon Managed Grafana en fonction de seuils ou de conditions prédéfinis. Configurez des notifications par e-mail pour avertir les parties prenantes concernées lorsque certains indicateurs dépassent ou tombent en dessous des seuils spécifiés. Pour plus d'informations, consultez la section [Alertes Grafana dans la documentation](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html) Amazon Managed Grafana.

**Intégration** — Vous pouvez intégrer Amazon Managed Grafana à divers outils tiers tels que OpsGenie PagerDuty, ou Slack pour des fonctionnalités de notification améliorées. Par exemple, vous pouvez configurer des webhooks ou les intégrer APIs pour déclencher des incidents et des notifications sur ces plateformes en fonction des alertes générées dans Amazon Managed Grafana. De plus, ce modèle fournit un [GitHub référentiel](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) pour créer des AWS ressources. Vous pouvez intégrer davantage ce code aux flux de travail de déploiement de votre infrastructure.

# Automatisez le déploiement d'ensembles de piles à l'aide d'AWS CodePipeline et d'AWS CodeBuild
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild"></a>

*Thiyagarajan Mani, Mihir Borkar et Raghu Gowda, Amazon Web Services*

## Résumé
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-summary"></a>

Dans le cadre de votre solution d'intégration et de livraison continues (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsolution pour répondre à cette exigence[), la fonction d'administrateur délégué](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) d'AWS CloudFormation est utile car elle fournit un niveau de sécurité en restreignant l'accès au compte de gestion. AWS CodePipeline utilise toutefois le modèle d'autorisations gérées par les services pour déployer des applications sur plusieurs comptes et régions. Vous devez utiliser le compte de gestion AWS Organizations pour effectuer un déploiement avec des ensembles de piles, car AWS CodePipeline ne prend pas en charge la fonctionnalité d'administrateur délégué des ensembles de piles.

Ce modèle décrit comment contourner cette limitation. Le modèle utilise AWS CodeBuild et un script personnalisé pour automatiser le déploiement d'ensembles de piles avec AWS CodePipeline. Il automatise les activités de déploiement d'applications suivantes :
+ Déployer une application sous forme d'ensembles de piles dans des unités organisationnelles existantes (OUs)
+ Étendre le déploiement d'une application à OUs d'autres régions 
+ Supprimer une application déployée de toutes les applications ou de certaines OUs régions

## Conditions préalables et limitations
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-prereqs"></a>

**Conditions préalables**

Avant de suivre les étapes de ce modèle :
+ Créez des organisations dans votre compte de gestion AWS Organizations. Pour obtenir des instructions, consultez la [documentation AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Activez un accès sécurisé entre AWS Organizations et utilisez CloudFormation des autorisations gérées par les services. Pour obtenir des instructions, consultez la section [Activer l'accès sécurisé avec AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) dans la CloudFormation documentation.

**Limites**

Le code fourni avec ce modèle présente les limites suivantes : 
+ Vous ne pouvez déployer qu'un seul CloudFormation modèle pour une application ; le déploiement de plusieurs modèles n'est actuellement pas pris en charge.
+ La personnalisation de la mise en œuvre actuelle nécessite de l' DevOps expertise.
+ Ce modèle n'utilise pas les clés du système de gestion des clés AWS (AWS KMS). Toutefois, vous pouvez activer cette fonctionnalité en reconfigurant le CloudFormation modèle inclus dans ce modèle.

## Architecture
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-architecture"></a>

![\[Architecture d'automatisation des pipelines CI/CD\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/2dbca422-7f32-4f9c-a4aa-1f95b484b772.png)


Cette architecture du pipeline de CI/CD déploiement gère les opérations suivantes :
+ Restreint l'accès direct au compte de gestion en déléguant la responsabilité du déploiement du stack set à un CI/CD compte dédié en tant qu'administrateur du stack set pour les déploiements d'applications.
+ Utilise le modèle d'autorisation géré par le service pour déployer l'application automatiquement chaque fois qu'un nouveau compte est créé et mappé sous une unité d'organisation.
+ Garantit la cohérence des versions des applications sur tous les comptes au niveau de l'environnement.
+ Utilise plusieurs étapes d'approbation au niveau du référentiel et du pipeline pour fournir des niveaux supplémentaires de sécurité et de gouvernance à l'application déployée.
+ Surmonte la limite actuelle CodePipeline en utilisant un script de déploiement personnalisé pour déployer ou CodeBuild supprimer automatiquement des ensembles de piles et des instances de pile. Pour une illustration du contrôle du flux et de la hiérarchie des appels d'API implémentés par le script personnalisé, consultez la section [Informations supplémentaires](#automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional).
+ Crée des ensembles de piles individuels pour les environnements de développement, de test et de production. En outre, vous pouvez créer des ensembles de piles combinant plusieurs OUs régions à chaque étape. Par exemple, vous pouvez combiner sandbox et développement OUs dans le cadre d'une phase de développement et de déploiement.
+ Prend en charge le déploiement ou l'exclusion d'applications dans un sous-ensemble de comptes ou une liste de OUs comptes.

**Automatisation et évolutivité**

Vous pouvez utiliser le code fourni avec ce modèle pour créer un CodeCommit référentiel AWS et un pipeline de code pour votre application. Vous pouvez ensuite les déployer sous forme de stack sets sur plusieurs comptes au niveau de l'unité d'organisation. Le code automatise également des composants tels que les rubriques Amazon Simple Notification Service (Amazon SNS) destinées à informer les approbateurs, les rôles AWS Identity and Access Management (IAM) requis et la politique de contrôle des services (SCP) à appliquer au compte de gestion.

## Outils
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-tools"></a>

**Services AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur les comptes et les régions AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatise les déploiements vers Amazon Elastic Compute Cloud EC2 (Amazon) ou des instances sur site, les fonctions AWS Lambda ou les services Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) est un service de gestion de comptes qui vous aide à consolider plusieurs comptes AWS au sein d'une organisation que vous créez et gérez de manière centralisée.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [automated-code-pipeline-stackset-deployment](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment). Pour la structure des dossiers et d'autres informations, consultez le [fichier readme](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment/blob/main/README.md) du référentiel.

## Bonnes pratiques
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-best-practices"></a>

Ce modèle restreint l'accès direct au compte de gestion lors du déploiement de l'application au niveau de l'unité d'organisation. L'ajout de plusieurs étapes d'approbation au processus de pipeline et de référentiel permet de renforcer la sécurité et la gouvernance des applications et des composants que vous déployez en utilisant cette approche.

## Épopées
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-epics"></a>

### Configuration de comptes dans AWS Organizations
<a name="configure-accounts-in-aws-organizations"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez toutes les fonctionnalités du compte de gestion. | Activez toutes les fonctionnalités du compte de gestion de votre organisation en suivant les instructions de la [documentation AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html). | Administrateur AWS, administrateur de plateforme | 
| Créez un CI/CD compte. | Dans AWS Organizations, au sein de votre organisation, créez un CI/CD compte dédié et désignez une équipe chargée de détenir et de contrôler l'accès au compte. | Administrateur AWS | 
| Ajoutez un administrateur délégué. | Dans le compte de gestion, enregistrez le CI/CD compte que vous avez créé à l'étape précédente en tant qu'administrateur délégué du stack set. Pour obtenir des instructions, consultez la [ CloudFormation documentation AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). | Administrateur AWS, administrateur de plateforme | 

### Création d'un référentiel et d'un CI/CD pipeline d'applications
<a name="create-an-application-repository-and-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel de code. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Créez des rubriques SNS. | Vous pouvez utiliser le `sns-template.yaml` modèle fourni dans le GitHub référentiel pour créer des rubriques SNS et configurer des abonnements pour les demandes d'approbation.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Créez des rôles IAM pour les CI/CD composants. | Vous pouvez utiliser le `cicd-role-template.yaml` modèle fourni dans le GitHub référentiel pour créer les rôles et les politiques IAM requis par les CI/CD composants.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Créez un CodeCommit référentiel et un pipeline de code pour votre application. | Vous pouvez utiliser le `cicd-pipeline-template.yaml` modèle fourni dans le GitHub référentiel pour créer un CodeCommit référentiel et un pipeline de code pour votre application.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 

### Déployer un ensemble de piles
<a name="deploy-a-stack-set"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel d'applications. | Le modèle de CI/CD pipeline que vous avez utilisé précédemment crée un exemple de référentiel d'applications et de pipeline de code. Pour cloner et vérifier le référentiel :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Développeur d'applications, ingénieur de données | 
| Ajoutez des artefacts d'application. | Mettez à jour le référentiel d'applications à l'aide d'un CloudFormation modèle.Cette solution prend en charge le déploiement d'un seul CloudFormation modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Développeur d'applications, ingénieur de données | 
| Mettez à jour le fichier de configuration de déploiement. | Mettez à jour le `deployment_config.json` fichier :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html)Ce modèle crée des ensembles de piles individuels pour chaque environnement en ajoutant le nom de l'environnement au nom du stack set que vous fournissez dans le fichier de configuration de déploiement. | Développeur d'applications, ingénieur de données | 
| Validez les modifications et déployez le stack set. | Validez les modifications que vous avez spécifiées dans votre modèle d'application, puis fusionnez et déployez le stack set dans plusieurs environnements étape par étape :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Développeur d'applications, ingénieur de données | 

## Résolution des problèmes
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le déploiement échoue à l'exception suivante :*Changez le nom du fichier de paramètres du modèle en -parameter- .json avec, les noms par défaut ne sont pas autorisés* <application name><evn> | Les fichiers CloudFormation de paramètres du modèle doivent respecter la convention de dénomination spécifiée. Mettez à jour les noms des fichiers de paramètres et réessayez. | 
| Le déploiement échoue à l'exception suivante :*Changez le nom du CloudFormation modèle en .yml, les modèles par défaut .yml ou template.yaml ne sont pas autorisés* <application name> | Le nom du CloudFormation modèle doit respecter la convention de dénomination spécifiée. Mettez à jour le nom du fichier et réessayez. | 
| Le déploiement échoue à l'exception suivante :*Aucun CloudFormation modèle valide et son fichier de paramètres n'ont été trouvés pour l'environnement \$1nom de l'environnement\$1* | Vérifiez les conventions de dénomination des fichiers pour le CloudFormation modèle et son fichier de paramètres pour l'environnement spécifié. | 
| Le déploiement échoue à l'exception suivante :*Action de déploiement non valide fournie dans le fichier de configuration de déploiement. Les options valides sont « déployer » et « supprimer ».* | Vous avez spécifié une valeur non valide pour le `deployment_action` paramètre dans le fichier de configuration de déploiement. Le paramètre possède deux valeurs valides : `deploy` et`delete`. `deploy`À utiliser pour créer et mettre à jour les ensembles de piles et leurs instances de pile associées. À utiliser `delete` uniquement lorsque vous souhaitez supprimer l'ensemble complet de piles et les instances de pile associées. | 

## Ressources connexes
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-resources"></a>
+ GitHub [automated-code-pipeline-stackset-référentiel de déploiement](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment)
+ [Activation de toutes les fonctionnalités de votre organisation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) (documentation AWS Organizations)
+ [Enregistrer un administrateur délégué](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) ( CloudFormation documentation AWS)
+ [Objectifs au niveau du compte pour les Stack Sets gérés par des services](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/account-level-targets.html) (documentation AWS CloudFormation )

## Informations supplémentaires
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional"></a>

**Organigramme**

L'organigramme suivant décrit le contrôle du flux et la hiérarchie des appels d'API mis en œuvre par le script personnalisé pour automatiser le déploiement des ensembles de piles.

![\[Contrôle de flux et appels d'API implémentés par un script Python\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/1898883a-62b7-40c2-8f08-9f2a9dda8404.png)


**Exemples de fichiers de configuration de déploiement**

**Création d'un nouvel ensemble de piles**

Le fichier de configuration de déploiement suivant crée un nouvel ensemble de piles appelé `sample-stack-set` dans la région AWS `us-east-1` en trois OUs.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Déploiement d'un ensemble de piles existant sur une autre unité d'organisation**

Si vous déployez la configuration illustrée dans l'exemple précédent et que vous souhaitez déployer le stack set sur une unité d'organisation supplémentaire appelée `dev-org-unit-2` dans l'environnement de développement, le fichier de configuration de déploiement peut ressembler à ce qui suit.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Déploiement d'un ensemble de piles existant dans une autre région AWS**

Si vous déployez la configuration illustrée dans l'exemple précédent et que vous souhaitez déployer le stack set dans une région AWS supplémentaire (`us-east-2`) dans l'environnement de développement pour deux OUs (`dev-org-unit-1`et`dev-org-unit-2`), le fichier de configuration de déploiement peut ressembler à ce qui suit. 

**Note**  
Les ressources du CloudFormation modèle doivent être valides et spécifiques à la région.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Suppression d'une instance de pile d'une unité d'organisation ou d'une région AWS**

Supposons que la configuration de déploiement présentée dans l'exemple précédent ait été déployée. Le fichier de configuration suivant supprime les instances de pile des deux régions de l'unité d'organisation`dev-org-unit-2`.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"],
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

Le fichier de configuration suivant supprime l'instance de pile de la région AWS `us-east-1` pour les deux OUs dans l'environnement de développement.    

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Supprimer l'ensemble complet de piles**

Le fichier de configuration de déploiement suivant supprime l'ensemble de piles et toutes les instances de pile associées.

```
{
     "deployment_action": "delete",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

****Exclure un compte du déploiement**

 Le fichier de configuration de déploiement suivant exclut le compte`111122223333`, qui fait partie de l'unité d'`dev-org-unit-1`organisation, du déploiement.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333"],
                                        "filter_type": "DIFFERENCE"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Déploiement de l'application sur un sous-ensemble de comptes dans une unité d'organisation**

Le fichier de configuration de déploiement suivant déploie l'application sur trois comptes uniquement (`111122223333`,`444455556666`, et`777788889999`) de l'unité d'organisation. `dev-org-unit-1`

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333", "444455556666", "777788889999"],
                                        "filter_type": "INTERSECTION"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

# Associez automatiquement une politique gérée par AWS pour Systems Manager aux profils d' EC2 instance à l'aide de Cloud Custodian et d'AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour et Aaron Lennon, Amazon Web Services*

## Résumé
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Vous pouvez intégrer des instances Amazon Elastic Compute Cloud (Amazon EC2) à AWS Systems Manager pour automatiser les tâches opérationnelles et améliorer la visibilité et le contrôle. Pour s'intégrer à Systems Manager, EC2 les instances doivent disposer d'un agent [AWS Systems Manager (agent SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) installé et d'une politique `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) attachée à leurs profils d'instance. 

Toutefois, si vous voulez vous assurer que la `AmazonSSMManagedInstanceCore` politique est attachée à tous les profils d' EC2 instance, vous pouvez avoir des difficultés à mettre à jour les nouvelles EC2 instances qui n'ont pas de profil d'instance ou les EC2 instances qui ont un profil d'instance mais qui n'ont pas cette `AmazonSSMManagedInstanceCore` politique. Il peut également être difficile d'appliquer cette politique à plusieurs comptes Amazon Web Services (AWS) et à plusieurs régions AWS.

Ce modèle permet de résoudre ces problèmes en déployant trois politiques [Cloud Custodian](https://cloudcustodian.io/) dans vos comptes AWS :
+ La première politique Cloud Custodian vérifie les EC2 instances existantes qui ont un profil d'instance mais qui n'ont pas cette `AmazonSSMManagedInstanceCore` politique. La `AmazonSSMManagedInstanceCore` politique est ensuite jointe. 
+ La deuxième politique Cloud Custodian vérifie les EC2 instances existantes sans profil d'instance et ajoute un profil d'instance par défaut auquel la `AmazonSSMManagedInstanceCore` politique est attachée.
+ La troisième politique Cloud Custodian crée des fonctions [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) dans vos comptes afin de surveiller la création d'instances et EC2 de profils d'instance. Cela garantit que la `AmazonSSMManagedInstanceCore` politique est automatiquement attachée lors de la création d'une EC2 instance.

Ce modèle utilise les DevOps outils [AWS](https://aws.amazon.com/devops/) pour réaliser un déploiement continu et à grande échelle des politiques Cloud Custodian dans un environnement multi-comptes, sans mettre en place un environnement de calcul distinct. 

## Conditions préalables et limitations
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Deux comptes AWS actifs ou plus. L'un des comptes est le *compte de sécurité* et les autres sont des *comptes de membres*.
+ Autorisations permettant de fournir des ressources AWS dans le compte de sécurité. Ce modèle utilise des [autorisations d'administrateur](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), mais vous devez accorder des autorisations conformément aux exigences et aux politiques de votre organisation.
+ Possibilité d'assumer un rôle IAM, du compte de sécurité aux comptes des membres, et de créer les rôles IAM requis. Pour plus d'informations à ce sujet, consultez la section [Déléguer l'accès entre les comptes AWS à l'aide de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) dans la documentation IAM.
+ 
**Important**  
Interface de ligne de commande AWS (AWS CLI), installée et configurée. À des fins de test, vous pouvez configurer l'AWS CLI à l'aide de la `aws configure` commande ou en définissant des variables d'environnement. : Cela n'est pas recommandé pour les environnements de production et nous recommandons de n'accorder à ce compte que l'accès avec le moindre privilège. Pour plus d'informations à ce sujet, consultez la section [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dans la documentation IAM.
+ Le `devops-cdk-cloudcustodian.zip` fichier (joint), téléchargé sur votre ordinateur local.
+ Connaissance de Python.
+ Les outils requis (Node.js, AWS Cloud Development Kit (AWS CDK) et Git) sont installés et configurés. Vous pouvez utiliser le `install-prerequisites.sh` fichier contenu dans le `devops-cdk-cloudcustodian.zip` fichier pour**** installer ces outils. ****Assurez-vous d'exécuter ce fichier avec les privilèges root. 

**Limites**
+ Bien que ce modèle puisse être utilisé dans un environnement de production, assurez-vous que tous les rôles et politiques IAM répondent aux exigences et aux politiques de votre organisation. 

**Versions du package**
+ Cloud Custodian version 0.9 ou ultérieure
+ TypeScript version 3.9.7 ou ultérieure
+ Node.js version 14.15.4 ou ultérieure
+ `npm`version 7.6.1 ou ultérieure
+ AWS CDK version 1.96.0 ou ultérieure

## Architecture
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

Le schéma suivant illustre le flux de travail suivant :

1. Les politiques Cloud Custodian sont transférées vers un CodeCommit référentiel AWS dans le compte de sécurité. Une règle Amazon CloudWatch Events lance automatiquement le CodePipeline pipeline AWS.

1. Le pipeline récupère le code le plus récent CodeCommit et l'envoie à la partie d'intégration continue du pipeline d'intégration continue et de livraison continue (CI/CD) géré par AWS. CodeBuild

1. CodeBuild exécute les DevSecOps actions complètes, y compris la validation de la syntaxe des politiques sur les politiques Cloud Custodian, et exécute ces politiques en `--dryrun` mode pour vérifier quelles ressources sont identifiées.

1. S'il n'y a aucune erreur, la tâche suivante invite un administrateur à examiner les modifications et à approuver le déploiement dans les comptes des membres.

**Pile technologique**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automatisation et mise à l'échelle**

Le module AWS CDK Pipelines fournit un CI/CD pipeline qui permet CodePipeline d'orchestrer la création et le test du code source CodeBuild, en plus du déploiement de ressources AWS avec AWS CloudFormation Stacks. Vous pouvez utiliser ce modèle pour tous les comptes membres et toutes les régions de votre organisation. Vous pouvez également étendre la `Roles creation` pile pour déployer d'autres rôles IAM dans vos comptes membres. 

## Outils
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via AWS. CloudFormation
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS à l'aide de commandes dans votre shell de ligne de commande.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de création entièrement géré dans le cloud.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version que vous pouvez utiliser pour stocker et gérer des actifs de manière privée.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre logiciel.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) est un service Web qui vous permet de contrôler en toute sécurité l'accès aux ressources AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) est un outil qui réunit les dizaines d'outils et de scripts que la plupart des entreprises utilisent pour gérer leurs comptes de cloud public en un seul outil open source.
+ [Node.js](https://nodejs.org/en/) est un JavaScript environnement d'exécution basé sur le JavaScript moteur V8 de Google Chrome.

**Code**

Pour une liste détaillée des modules, des fonctions de compte, des fichiers et des commandes de déploiement utilisés dans ce modèle, consultez le `README` fichier dans le `devops-cdk-cloudcustodian.zip` fichier (joint).

## Épopées
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configuration du pipeline avec AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le CodeCommit référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Pour plus d'informations à ce sujet, consultez [la section Création d'un CodeCommit référentiel](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) dans la CodeCommit documentation AWS. | Developer | 
| Installez les outils nécessaires. | Utilisez le `install-prerequisites.sh` fichier pour installer tous les outils requis sur Amazon Linux. Cela n'inclut pas l'AWS CLI car elle est préinstallée.Pour plus d'informations à ce sujet, consultez la section [Conditions préalables](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) de la section [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dans la documentation du AWS CDK. | Developer | 
| Installez les packages AWS CDK requis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Les packages suivants sont requis par AWS CDK et sont inclus dans le `requirements.txt` fichier :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 

### Configurez votre environnement
<a name="configure-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour les variables requises. | Ouvrez le `vars.py` fichier dans le dossier racine de votre CodeCommit dépôt et mettez à jour les variables suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 
| Mettez à jour le fichier account.yml avec les informations du compte du membre. | Pour exécuter l'outil [Cloud Custodian de c7n-org](https://cloudcustodian.io/docs/tools/c7n-org.html) sur plusieurs comptes, vous devez placer le fichier de `accounts.yml` configuration à la racine du référentiel. Voici un exemple de fichier de configuration Cloud Custodian pour AWS :<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Developer | 

### Démarrez les comptes AWS
<a name="bootstrap-the-aws-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Boostrap le compte de sécurité. | Démarrez-le `deploy_account` avec l'`cloudcustodian_stack`application en exécutant la commande suivante :<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Developer | 
| Option 1 - Démarrez automatiquement les comptes des membres. | Si la `cdk_bootstrap_member_accounts` variable est définie sur `True` dans le `vars.py` fichier, les comptes spécifiés dans la `member_accounts` variable sont automatiquement initialisés par le pipeline.Si nécessaire, vous pouvez effectuer une mise à jour `*cdk_bootstrap_role*` avec un rôle IAM que vous pouvez assumer depuis le compte de sécurité et qui dispose des autorisations requises pour démarrer le AWS CDK.Les nouveaux comptes ajoutés à la `member_accounts ` variable sont automatiquement initialisés par le pipeline afin que les rôles requis puissent être déployés. | Developer | 
| Option 2 - Démarrez manuellement les comptes des membres.  | Bien que nous ne recommandons pas cette approche, vous pouvez définir la valeur de `cdk_bootstrap_member_accounts` to `False` et effectuer cette étape manuellement en exécutant la commande suivante :<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Assurez-vous de mettre à jour les `{role_name}` valeurs `{security_account_id}` et avec le nom d'un rôle IAM que vous pouvez assumer à partir du compte de sécurité et qui dispose des autorisations requises pour démarrer le kit AWS CDK.Vous pouvez également utiliser d'autres approches pour démarrer les comptes des membres, par exemple avec AWS CloudFormation. Pour plus d'informations à ce sujet, consultez la section [Bootstrapping](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) dans la documentation AWS CDK. | Developer | 

### Déployez les piles AWS CDK
<a name="deploy-the-aws-cdk-stacks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les rôles IAM dans les comptes des membres. | Exécutez la commande suivante pour déployer la `member_account_roles_stack` pile et créer les rôles IAM dans les comptes membres :<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Developer | 
| Déployez la pile de pipelines Cloud Custodian. | Exécutez la commande suivante pour créer le `cloudcustodian_stack.py` pipeline Cloud Custodian qui est déployé dans le compte de sécurité :<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Developer | 

## Ressources connexes
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Commencer à utiliser le kit AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Pièces jointes
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)

# Créez automatiquement des CI/CD pipelines et des clusters Amazon ECS pour les microservices à l'aide d'AWS CDK
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk"></a>

*Varsha Raju, Amazon Web Services*

## Résumé
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-summary"></a>

Ce modèle décrit comment créer automatiquement l'intégration continue et la livraison continue (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipelines) que vous pouvez ensuite personnaliser ou modifier en fonction des exigences de votre organisation. 

L'approche du modèle crée un environnement de production et un environnement hors production dotés chacun d'un cloud privé virtuel (VPC) et d'un cluster Amazon ECS configurés pour s'exécuter dans deux zones de disponibilité. Ces environnements sont partagés par tous vos microservices, puis vous créez un CI/CD pipeline pour chaque microservice. Ces CI/CD pipelines extraient les modifications d'un référentiel source dans AWS CodeCommit, les génèrent automatiquement, puis les déploient dans vos environnements de production et hors production. Lorsqu'un pipeline termine avec succès toutes ses étapes, vous pouvez l'utiliser URLs pour accéder au microservice dans les environnements de production et hors production.

## Conditions préalables et limitations
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Un compte Amazon Web Services (AWS) actif.
+ Un compartiment Amazon Simple Storage Service (Amazon S3) existant contenant `starter-code.zip` le fichier (joint).
+ AWS Cloud Development Kit (AWS CDK), installé et configuré dans votre compte. Pour plus d'informations à ce sujet, consultez [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dans la documentation AWS CDK.
+ Python 3 et`pip`, installé et configuré. Pour plus d'informations à ce sujet, consultez la [documentation Python](https://www.python.org/).
+ Connaissance d'AWS CDK, d'AWS, d' CodePipelineAWS CodeBuild, d' CodeCommitAmazon Elastic Container Registry (Amazon ECR), d'Amazon ECS et d'AWS Fargate.
+ Connaissance de Docker.
+ Une compréhension de CI/CD et DevOps.

**Limites**
+ Les limites générales du compte AWS s'appliquent. Pour plus d'informations à ce sujet, consultez les [quotas de service AWS](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) dans la documentation de référence générale AWS.

**Versions du produit**
+ Le code a été testé avec Node.js version 16.13.0 et AWS CDK version 1.132.0.

## Architecture
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-architecture"></a>

![\[AWS Cloud architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/05ac2cad-408e-433f-8150-0a2b71f63cfd/images/6fa3dbef-88de-4b3f-ae41-dfa90256a058.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un développeur d'applications valide le code dans un CodeCommit référentiel.

1. Un pipeline est lancé.

1. CodeBuild crée et envoie l'image Docker vers un référentiel Amazon ECR

1. CodePipeline déploie une nouvelle image sur un service Fargate existant dans un cluster Amazon ECS hors production.

1. Amazon ECS extrait l'image du référentiel Amazon ECR vers un service Fargate hors production.

1. Les tests sont effectués à l'aide d'une URL hors production.

1. Le responsable de publication approuve le déploiement en production.

1. CodePipeline déploie la nouvelle image sur un service Fargate existant dans un cluster Amazon ECS de production

1. Amazon ECS extrait l'image du référentiel Amazon ECR vers le service de production Fargate.

1. Les utilisateurs de production accèdent à votre fonctionnalité à l'aide d'une URL de production.

**Pile technologique**
+ AWS CDK
+ CodeBuild
+ CodeCommit 
+ CodePipeline
+ Amazon ECR 
+ Amazon ECS 
+ Amazon VPC

**Automatisation et mise à l'échelle**

Vous pouvez utiliser l'approche de ce modèle pour créer des pipelines pour les microservices déployés dans une CloudFormation pile AWS partagée. L'automatisation peut créer plusieurs clusters Amazon ECS dans chaque VPC et également créer des pipelines pour les microservices déployés dans un cluster Amazon ECS partagé. Toutefois, cela nécessite que vous fournissiez de nouvelles informations sur les ressources en entrée de la pile de pipelines.

## Outils
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-tools"></a>
+ [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html) — AWS Cloud Development Kit (AWS CDK) est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via AWS. CloudFormation
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — AWS CodeBuild est un service de création entièrement géré dans le cloud. CodeBuild compile votre code source, exécute des tests unitaires et produit des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — AWS CodeCommit est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git dans le cloud AWS. CodeCommit vous n'avez plus à gérer votre propre système de contrôle de source ou à vous soucier de la mise à l'échelle de son infrastructure.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — AWS CodePipeline est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre logiciel. Vous pouvez rapidement modéliser et configurer les différentes étapes d'un processus de publication d'un logiciel. CodePipeline automatise les étapes nécessaires à la publication continue des modifications de votre logiciel.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs rapide et hautement évolutif utilisé pour exécuter, arrêter et gérer des conteneurs sur un cluster. Vous pouvez exécuter vos tâches et services sur une infrastructure sans serveur gérée par AWS Fargate. Pour mieux contrôler votre infrastructure, vous pouvez également exécuter vos tâches et services sur un cluster d'instances Amazon Elastic Compute Cloud (Amazon EC2) que vous gérez.
+ [Docker](https://www.docker.com/) — Docker aide les développeurs à emballer, expédier et exécuter n'importe quelle application sous la forme d'un conteneur léger, portable et autonome.

**Code**

Le code de ce modèle est disponible dans les `starter-code.zip` fichiers `cicdstarter.zip` et (joints).

## Épopées
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le répertoire de travail pour AWS CDK.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastructure cloud | 

### Création de l'infrastructure partagée
<a name="create-the-shared-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez l'infrastructure partagée. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastructure cloud | 
| Surveillez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastructure cloud | 
| Testez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Assurez-vous d'enregistrer le IDs pour les deux groupes de sécurité VPCs et le groupe de sécurité IDs pour les groupes de sécurité par défaut dans les deux VPCs. | AWS DevOps, infrastructure cloud | 

### Création d'un CI/CD pipeline pour un microservice
<a name="create-a-ci-cd-pipeline-for-a-microservice"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez l'infrastructure du microservice. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Vous pouvez également fournir les valeurs des deux commandes en utilisant le `cdk.json` fichier du répertoire. | AWS DevOps, infrastructure cloud | 
| Surveillez la CloudFormation pile AWS. | Ouvrez la CloudFormation console AWS et surveillez la progression de la `myservice1-cicd-stack` pile. Finalement, le statut passe à `CREATE_COMPLETE`*.* | AWS DevOps, infrastructure cloud | 
| Testez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) |  | 
| Utilisez le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastructure cloud | 
| Répétez cette épopée pour chaque microservice. | Répétez les tâches de cette épopée pour créer un CI/CD pipeline pour chacun de vos microservices. | AWS DevOps, infrastructure cloud | 

## Ressources connexes
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-resources"></a>
+ [Utilisation de Python avec AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-python.html) 
+ [Référence Python du kit AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/python/index.html)
+ [Création d'un service AWS Fargate à l'aide du kit AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html)

## Informations supplémentaires
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-additional"></a>

Commande **`cdk synth` de la **

```
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
```

**`cdk deploy `commande**

```
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice> 
```

## Pièces jointes
<a name="attachments-05ac2cad-408e-433f-8150-0a2b71f63cfd"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/05ac2cad-408e-433f-8150-0a2b71f63cfd/attachments/attachment.zip)

# Créez et envoyez des images Docker vers Amazon ECR à l'aide d' GitHub Actions et de Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Résumé
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Ce modèle explique comment créer des GitHub flux de travail réutilisables pour créer votre Dockerfile et transférer l'image résultante vers Amazon Elastic Container Registry (Amazon ECR). Le modèle automatise le processus de création de vos Dockerfiles à l'aide de Terraform et d'Actions. GitHub Cela minimise le risque d'erreur humaine et réduit considérablement le temps de déploiement.

Une action GitHub push sur la branche principale de votre GitHub dépôt déclenche le déploiement des ressources. Le flux de travail crée un référentiel Amazon ECR unique basé sur la combinaison de l' GitHub organisation et du nom du référentiel. Il envoie ensuite l'image Dockerfile vers le référentiel Amazon ECR.

## Conditions préalables et limitations
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Prérequis**
+ Un compte AWS actif.
+ Un GitHub compte actif.
+ Un [GitHub référentiel](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ Terraform version 1 ou ultérieure [installée et configurée](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Un bucket Amazon Simple Storage Service (Amazon S3) pour le backend Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3)
+ Une table [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) pour le verrouillage de l'état et la cohérence de Terraform. La table doit avoir une clé de partition nommée `LockID` avec un type de`String`. Si cela n'est pas configuré, le verrouillage d'état sera désactivé.
+ Rôle AWS Identity and Access Management (IAM) autorisé à configurer le backend Amazon S3 pour Terraform. Pour les instructions de configuration, consultez la documentation [Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limites**

Ce code réutilisable a été testé uniquement avec des GitHub actions.

## Architecture
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Pile technologique cible**
+ Référentiel Amazon ECR
+ GitHub Actions
+ Terraform

**Architecture cible**

![\[Flux de travail pour créer des GitHub flux de travail réutilisables afin de créer Dockerfile et de transférer l'image vers Amazon ECR.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Le diagramme illustre les éléments suivants :

1. Un utilisateur ajoute un Dockerfile et des modèles Terraform au référentiel. GitHub 

2. Ces ajouts initient un flux de travail GitHub Actions.

3. Le flux de travail vérifie l'existence d'un référentiel Amazon ECR. Dans le cas contraire, il crée le référentiel en fonction de l' GitHub organisation et du nom du référentiel.

4. Le flux de travail crée le Dockerfile et envoie l'image vers le référentiel Amazon ECR.

## Outils
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Services Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service de registre de conteneurs géré sécurisé, évolutif et fiable.

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions) est intégré à la GitHub plateforme pour vous aider à créer, partager et exécuter des flux de travail au sein de vos GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser des tâches telles que la création, le test et le déploiement de votre code.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer une infrastructure cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Lorsque vous créez des GitHub actions, les fichiers de flux de travail Docker sont enregistrés dans le `/.github/workflows/` dossier de ce référentiel. Le flux de travail de cette solution se trouve dans le fichier [workflow.yaml.](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml)
+ Le `e2e-test` dossier fournit un exemple de Dockerfile à des fins de référence et de test.

## Bonnes pratiques
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Pour connaître les meilleures pratiques en matière d'écriture de Dockerfiles, consultez la documentation [Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Utilisez un point de [terminaison VPC pour Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Les points de terminaison VPC sont alimentés par AWS PrivateLink, une technologie qui vous permet d'accéder en privé à Amazon ECR APIs via des adresses IP privées. Pour les tâches Amazon ECS qui utilisent le type de lancement Fargate, le point de terminaison VPC permet à la tâche d'extraire des images privées d'Amazon ECR sans attribuer d'adresse IP publique à la tâche.

## Épopées
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configuration du fournisseur et GitHub du référentiel OIDC
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez OpenID Connect. | Créez un fournisseur OpenID Connect (OIDC). Vous utiliserez le fournisseur dans la politique de confiance pour le rôle IAM utilisé dans cette action. Pour obtenir des instructions, consultez [la section Configuration d'OpenID Connect dans Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) dans la GitHub documentation. | Administrateur AWS, AWS DevOps, AWS général | 
| Clonez le GitHub dépôt. | Clonez le référentiel GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) dans votre dossier local :<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps ingénieur | 

### Personnalisez le flux de travail GitHub réutilisable et déployez l'image Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Personnalisez l'événement qui lance le flux de travail Docker. | Le flux de travail de cette solution se trouve dans [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Ce script est actuellement configuré pour déployer des ressources lorsqu'il reçoit l'`workflow_dispatch`événement. Vous pouvez personnaliser cette configuration en remplaçant l'événement par un autre flux de travail parent `workflow_call` et en appelant le flux de travail à partir d'un autre flux de travail parent. | DevOps ingénieur | 
| Personnalisez le flux de travail. | Le fichier [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) est configuré pour créer un flux de travail dynamique et réutilisable. GitHub Vous pouvez modifier ce fichier pour personnaliser la configuration par défaut, ou vous pouvez transmettre les valeurs d'entrée depuis la console GitHub Actions si vous utilisez l'`workflow_dispatch`événement pour lancer le déploiement manuellement.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps ingénieur | 
| Déployez les modèles Terraform. | Le flux de travail déploie automatiquement les modèles Terraform qui créent le référentiel Amazon ECR, en fonction de l' GitHub événement que vous avez configuré. Ces modèles sont disponibles sous forme de `.tf` fichiers à la [racine du référentiel Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problèmes ou erreurs lorsque vous configurez Amazon S3 et DynamoDB en tant que backend distant Terraform. | Suivez les instructions de la [documentation Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) pour configurer les autorisations requises sur les ressources Amazon S3 et DynamoDB pour la configuration du backend distant. | 
| Impossible d'exécuter ou de démarrer le flux de travail avec l'`workflow_dispatch`événement. | Le flux de travail configuré pour être déployé à partir de l'`workflow_dispatch`événement ne fonctionnera que s'il est également configuré sur la branche principale. | 

## Ressources connexes
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Réutilisation des flux de travail](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (GitHub documentation)
+ [Déclenchement d'un flux de travail](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) (GitHub documentation)

# Créez et testez des applications iOS avec AWS CodeCommit CodePipeline, AWS et AWS Device Farm
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Résumé
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-summary"></a>

Ce modèle décrit les étapes de création d'un pipeline d'intégration et de livraison continues (CI/CD) qui utilise AWS CodePipeline pour créer et tester des applications iOS sur des appareils réels sur AWS. Le modèle utilise AWS CodeCommit pour stocker le code de l'application, l'outil open source Jenkins pour créer l'application iOS et AWS Device Farm pour tester l'application créée sur de vrais appareils. Ces trois phases sont orchestrées ensemble dans un pipeline à l'aide d'AWS CodePipeline.

Ce modèle est basé sur l'article [Création et test d'applications iOS et iPadOS avec AWS DevOps et les services mobiles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) publié sur le DevOps blog AWS. Pour des instructions détaillées, consultez le billet de blog.

## Conditions préalables et limitations
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un compte de développeur Apple
+ Serveur de compilation (macOS)
+ [Xcode](https://developer.apple.com/xcode/) version 11.3 (installé et configuré sur le serveur de compilation)
+ Interface de ligne de commande AWS (AWS CLI) (AWS CLI[)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) installée [et](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) configurée sur le poste de travail
+ Connaissances de base de [Git](https://git-scm.com/docs)

**Limites**
+ Le serveur de génération d'applications doit exécuter macOS. 
+ Le serveur de build doit avoir une adresse IP publique afin de CodePipeline pouvoir s'y connecter à distance pour lancer des builds.

## Architecture
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-architecture"></a>

**Pile technologique source**
+ Processus de création d'applications iOS sur site qui implique l'utilisation d'un simulateur ou un test manuel sur des appareils physiques

**Pile technologique cible**
+ Un CodeCommit référentiel AWS pour le stockage du code source de l'application
+ Un serveur Jenkins pour les builds d'applications à l'aide de Xcode
+ Un pool d'appareils AWS Device Farm pour tester des applications sur de vrais appareils

**Architecture cible**

Lorsqu'un utilisateur valide des modifications dans le référentiel source, le pipeline (AWS CodePipeline) extrait le code du référentiel source, lance une compilation Jenkins et transmet le code de l'application à Jenkins. Après le build, le pipeline récupère l'artefact de build et lance une tâche AWS Device Farm pour tester l'application par rapport à un pool d'appareils.

 

![\[Le pipeline CI/CD utilise AWS CodePipeline pour créer et tester des applications iOS sur de vrais appareils.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/06fbd82f-4aed-441c-818c-5f89f56af78e/images/0ae3d7b6-b40c-44ef-9580-8c8266c3d841.png)


## Outils
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-tools"></a>
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) est un service de livraison continue entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure. CodePipeline automatise les phases de création, de test et de déploiement de votre processus de publication chaque fois qu'un changement de code est effectué, en fonction du modèle de version que vous définissez.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de source entièrement géré qui héberge des référentiels sécurisés basés sur Git. Il permet aux équipes de collaborer facilement sur le code dans un écosystème sécurisé et hautement évolutif. CodeCommit élimine le besoin d'exploiter votre propre système de contrôle de source ou de vous soucier de la mise à l'échelle de son infrastructure.
+ [AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) est un service de test d'applications qui vous permet d'améliorer la qualité de vos applications Web et mobiles en les testant sur une large gamme de navigateurs de bureau et de véritables appareils mobiles, sans avoir à fournir ni à gérer d'infrastructure de test.
+ [Jenkins](https://www.jenkins.io/) est un serveur d'automatisation open source qui permet aux développeurs de créer, de tester et de déployer leurs logiciels.

## Épopées
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-epics"></a>

### Configuration de l'environnement de construction
<a name="set-up-the-build-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez Jenkins sur le serveur de compilation qui exécute macOS. | Jenkins sera utilisé pour créer l'application, vous devez donc d'abord l'installer sur le serveur de compilation. Pour obtenir des instructions détaillées concernant cette tâche et les tâches suivantes, consultez le billet de blog AWS sur la [création et le test d'applications iOS et iPadOS avec AWS DevOps , les services mobiles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) et d'autres ressources dans la section [Ressources connexes](#build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources) à la fin de ce modèle. | DevOps | 
| Configurez Jenkins. | Suivez les instructions affichées à l'écran pour configurer Jenkins. | DevOps | 
| Installez le CodePipeline plugin AWS pour Jenkins. | Ce plugin doit être installé sur le serveur Jenkins pour que Jenkins puisse interagir avec le service AWS CodePipeline . | DevOps | 
| Créez un projet Jenkins Freestyle. | Dans Jenkins, créez un projet de freestyle. Configurez le projet pour spécifier les déclencheurs et les autres options de configuration de construction. | DevOps | 

### Configuration d'AWS Device Farm
<a name="configure-aws-device-farm"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un projet Device Farm. | Ouvrez la console AWS Device Farm. Créez un projet et un pool d'appareils à des fins de test. Pour obtenir des instructions, consultez le billet de blog. | Developer | 

### Configuration du référentiel source
<a name="configure-the-source-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un CodeCommit référentiel. | Créez un référentiel dans lequel le code source sera stocké. | DevOps | 
| Enregistrez le code de votre application dans le référentiel. | Connectez-vous au CodeCommit référentiel que vous avez créé. Transférez le code de votre machine locale vers le référentiel. | DevOps | 

### Configuration du pipeline
<a name="configure-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un pipeline dans AWS CodePipeline. | Ouvrez la CodePipeline console AWS et créez un pipeline. Le pipeline orchestre toutes les phases du CI/CD processus. Pour obtenir des instructions, consultez le billet de blog AWS [intitulé Création et test d'applications iOS et iPadOS avec AWS DevOps et les services mobiles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/). | DevOps | 
| Ajoutez une phase de test au pipeline. | Pour ajouter une phase de test et l'intégrer à AWS Device Farm, modifiez le pipeline. | DevOps | 
| Lancez le pipeline. | Pour démarrer le pipeline et le CI/CD processus, choisissez **Release change**. | DevOps | 

### Afficher les résultats des tests d'applications
<a name="view-application-test-results"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez en revue les résultats des tests. | Dans la console AWS Device Farm, sélectionnez le projet que vous avez créé et passez en revue les résultats des tests. La console affichera les détails de chaque test. | Developer | 

## Ressources connexes
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources"></a>

**Step-by-step instructions pour ce modèle**
+ [Création et test d'applications iOS et iPadOS avec AWS DevOps et les services mobiles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) (article de DevOps blog AWS)

**Configuration d'AWS Device Farm**
+ [Console AWS Device Farm](https://console.aws.amazon.com/devicefarm)

**Configuration du référentiel source**
+ [Création d'un CodeCommit référentiel AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)
+ [Connectez-vous à un CodeCommit référentiel AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)

**Configuration du pipeline**
+ [ CodePipeline Console AWS](https://console.aws.amazon.com/codesuite/codepipeline/home)

**Ressources supplémentaires**
+ [ CodePipeline Documentation AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [ CodeCommit Documentation AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)
+ [Documentation d'AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html)
+ [Documentation de Jenkins](https://www.jenkins.io/doc/)
+ [Installation de Jenkins sur macOS](https://www.jenkins.io/download/weekly/macos/)
+ [ CodePipeline Plug-in AWS pour Jenkins](https://plugins.jenkins.io/aws-codepipeline/)
+ [Installation de Xcode](https://developer.apple.com/xcode/)
+ [Installation](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) et [configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) de la CLI AWS
+ [Documentation Git](https://git-scm.com/docs)

# Configurer l'authentification TLS mutuelle pour les applications exécutées sur Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Ranasiddappa, Amazon Web Services*

## Résumé
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

La sécurité mutuelle de couche de transport (TLS) basée sur des certificats est un composant TLS optionnel qui fournit une authentification réciproque entre les serveurs et les clients. Avec le protocole TLS mutuel, les clients doivent fournir un certificat X.509 pendant le processus de négociation de session. Le serveur utilise ce certificat pour identifier et authentifier le client.

Le protocole TLS mutuel est une exigence courante pour les applications de l'Internet des objets (IoT) et peut être utilisé pour business-to-business des applications ou des normes telles que l'[Open Banking](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html).

Ce modèle décrit comment configurer le protocole TLS mutuel pour les applications exécutées sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) à l'aide d'un contrôleur d'entrée NGINX. Vous pouvez activer les fonctionnalités TLS mutuelles intégrées pour le contrôleur d'entrée NGINX en annotant la ressource d'entrée. Pour plus d'informations sur les annotations TLS mutuelles sur les contrôleurs NGINX, consultez la section [Authentification par certificat client](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) dans la documentation de Kubernetes.

**Important**  
Ce modèle utilise des certificats auto-signés. Nous vous recommandons d'utiliser ce modèle uniquement avec les clusters de test, et non dans les environnements de production. Si vous souhaitez utiliser ce modèle dans un environnement de production, vous pouvez utiliser [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) ou votre norme d'infrastructure à clé publique (PKI) existante pour émettre des certificats privés.

## Conditions préalables et limitations
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Conditions préalables**
+ Un compte Amazon Web Services (AWS) actif.
+ Un cluster Amazon EKS existant.
+ Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows.
+ L'utilitaire de ligne de commande kubectl, installé et configuré pour accéder au cluster Amazon EKS. Pour plus d'informations à ce sujet, consultez la section [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS.
+ Un nom de système de noms de domaine (DNS) existant pour tester l'application.

**Limites**
+ Ce modèle utilise des certificats auto-signés. Nous vous recommandons d'utiliser ce modèle uniquement avec les clusters de test, et non dans les environnements de production.

## Architecture
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![\[Configuration de l'authentification TLS mutuelle pour les applications exécutées sur Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Pile technologique**
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Outils
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) est un utilitaire de ligne de commande que vous utilisez pour interagir avec un cluster Amazon EKS.

## Épopées
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Générez les certificats auto-signés
<a name="generate-the-self-signed-certificates"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Générez la clé et le certificat CA. | Générez la clé et le certificat de l'autorité de certification (CA) en exécutant la commande suivante.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps ingénieur | 
| Générez la clé du serveur et le certificat, puis signez avec le certificat CA. | Générez la clé du serveur et le certificat, puis signez avec le certificat CA en exécutant la commande suivante.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Assurez-vous de le remplacer `<your_domain_name>` par votre nom de domaine existant. | DevOps ingénieur | 
|  Générez la clé client et le certificat, puis signez avec le certificat CA. | Générez la clé client et le certificat, puis signez avec le certificat CA en exécutant la commande suivante.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps ingénieur | 

### Déployez le contrôleur d'entrée NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le contrôleur d'entrée NGINX dans votre cluster Amazon EKS. | Déployez le contrôleur d'entrée NGINX à l'aide de la commande suivante.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps ingénieur | 
|  Vérifiez que le service du contrôleur d'entrée NGINX est en cours d'exécution. | Vérifiez que le service du contrôleur d'entrée NGINX est en cours d'exécution à l'aide de la commande suivante.<pre>kubectl get svc -n ingress-nginx</pre>Assurez-vous que l'adresse du champ de service contient le nom de domaine du Network Load Balancer. | DevOps ingénieur | 

### Créez un espace de noms dans le cluster Amazon EKS pour tester le protocole TLS mutuel
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un espace de noms dans le cluster Amazon EKS.  | Créez un espace de noms appelé `mtls` dans votre cluster Amazon EKS en exécutant la commande suivante. <pre>kubectl create ns mtls</pre>Cela déploie l'exemple d'application pour tester le protocole TLS mutuel. | DevOps ingénieur | 

### Création du déploiement et du service pour l'exemple d'application
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le déploiement et le service Kubernetes dans l'espace de noms MTLS. | Créez un fichier nommé `mtls.yaml`. Collez le code suivant dans le fichier. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre> Créez le déploiement et le service Kubernetes dans l'espace de `mtls` noms en exécutant la commande suivante.<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps ingénieur | 
| Vérifiez que le déploiement de Kubernetes est créé. | Exécutez la commande suivante pour vérifier que le déploiement est créé et qu'un pod est disponible.<pre>kubectl get deploy -n mtls</pre> | DevOps ingénieur | 
| Vérifiez que le service Kubernetes est créé. | Vérifiez que le service Kubernetes est créé en exécutant la commande suivante.<pre>kubectl get service -n mtls</pre> | DevOps ingénieur | 

### Création d'un secret dans l'espace de noms MTLS
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un secret pour la ressource d'entrée. | Exécutez la commande suivante pour créer un secret pour le contrôleur d'entrée NGINX en utilisant les certificats que vous avez créés précédemment.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre>Votre secret contient un certificat de serveur permettant au client d'identifier le serveur et un certificat CA permettant au serveur de vérifier les certificats du client. | DevOps ingénieur | 

### Créez la ressource d'entrée dans l'espace de noms mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la ressource d'entrée dans l'espace de noms MTLS. | Créez un fichier nommé `ingress.yaml`. Collez le code suivant dans le fichier (remplacez-le `<your_domain_name>` par votre nom de domaine existant).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre>Créez la ressource d'entrée dans l'espace de `mtls` noms en exécutant la commande suivante.<pre>kubectl create -f ingress.yaml -n mtls</pre>Cela signifie que le contrôleur d'entrée NGINX peut acheminer le trafic vers votre exemple d'application. | DevOps ingénieur | 
| Vérifiez que la ressource d'entrée est créée. | Vérifiez que la ressource d'entrée est créée en exécutant la commande suivante.<pre>kubectl get ing -n mtls</pre>Assurez-vous que l'adresse de la ressource d'entrée indique l'équilibreur de charge créé pour le contrôleur d'entrée NGINX. | DevOps ingénieur | 

### Configurer le DNS pour qu'il pointe le nom d'hôte vers l'équilibreur de charge
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un enregistrement CNAME qui pointe vers l'équilibreur de charge du contrôleur d'entrée NGINX. | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon Route 53 et créez un enregistrement Canonical Name (CNAME) qui pointe `mtls.<your_domain_name>` vers l'équilibreur de charge du contrôleur d'entrée NGINX.Pour plus d'informations, consultez [la section Création d'enregistrements à l'aide de la console Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) dans la documentation Route 53. | DevOps ingénieur | 

### Tester l'application
<a name="test-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la configuration mutuelle du protocole TLS sans certificats. | Exécutez la commande suivante.<pre>curl -k https://mtls.<your_domain_name> </pre>Vous devriez recevoir le message d'erreur « 400 Aucun certificat SSL requis n'a été envoyé ». | DevOps ingénieur | 
| Testez la configuration mutuelle du protocole TLS avec des certificats. | Exécutez la commande suivante.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre>Vous devriez recevoir la réponse « mTLS fonctionne ». | DevOps ingénieur | 

## Ressources connexes
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Création d'enregistrements à l'aide de la console Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Utilisation d'un Network Load Balancer avec le contrôleur d'entrée NGINX sur Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Authentification par certificat client](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)

# Automatisez la création de ressources Amazon WorkSpaces Applications à l'aide de AWS CloudFormation
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation"></a>

*Ram Kandaswamy, Amazon Web Services*

## Résumé
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-summary"></a>

Ce modèle fournit des exemples de code et des étapes pour automatiser la création de ressources [Amazon WorkSpaces Applications](https://aws.amazon.com/workspaces/applications/) dans le à AWS Cloud l'aide d'un [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)modèle. Le modèle vous montre comment utiliser une CloudFormation pile pour automatiser la création des ressources de vos WorkSpaces applications, notamment un générateur d'images, une image, une instance de flotte et une pile. Vous pouvez diffuser votre application WorkSpaces Applications aux utilisateurs finaux sur un navigateur HTML5 compatible en utilisant le mode de livraison de bureau ou d'application.

## Conditions préalables et limitations
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Une acceptation des termes et conditions des WorkSpaces candidatures
+ [Connaissance de base des ressources des WorkSpaces applications, telles que les [flottes, les piles et les](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html) générateurs d'images](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-image-builders.html)

**Limites**
+ Vous ne pouvez pas modifier le rôle [Gestion des identités et des accès AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) associé à une instance d' WorkSpaces applications une fois cette instance créée.
+ Vous ne pouvez pas modifier les propriétés (telles que le [sous-réseau](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics) ou le [groupe de sécurité](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)) sur l'instance du générateur d'images WorkSpaces Applications une fois ce générateur d'images créé.

## Architecture
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-architecture"></a>

Le schéma suivant montre comment automatiser la création de ressources d' WorkSpaces applications à l'aide d'un CloudFormation modèle.

![\[Flux de travail pour créer automatiquement WorkSpaces des ressources d'applications.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/4f0205f5-5b91-4832-9f0f-2135ae866226/images/cb578939-d9af-4f60-93c9-286881df4c3a.png)


Le schéma suivant illustre le flux de travail suivant :

1. Vous créez un CloudFormation modèle basé sur le code YAML dans la section [Informations supplémentaires](#automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional) de ce modèle.

1. Le CloudFormation modèle crée une pile CloudFormation de test.

   1. (Facultatif) Vous créez une instance de générateur d'images à l'aide d' WorkSpaces Applications.

   1. (Facultatif) Vous créez une image Windows à l'aide de votre logiciel personnalisé.

1. La CloudFormation pile crée une instance et une pile de parc d' WorkSpaces applications.

1. Vous déployez WorkSpaces les ressources de vos applications auprès des utilisateurs finaux sur un navigateur HTML5 compatible.

## Outils
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-tools"></a>
+ [Amazon WorkSpaces Applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/what-is-appstream.html) est un service de streaming d'applications entièrement géré qui vous permet d'accéder instantanément à vos applications de bureau où que vous soyez. WorkSpaces Les applications gèrent les AWS ressources nécessaires pour héberger et exécuter vos applications, s'adaptent automatiquement et fournissent un accès à vos utilisateurs à la demande.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à modéliser et à configurer vos AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie. Vous pouvez utiliser un modèle pour décrire vos ressources et leurs dépendances, puis les lancer et les configurer ensemble sous forme de pile, au lieu de gérer les ressources individuellement. Vous pouvez gérer et approvisionner des piles sur plusieurs Comptes AWS et Régions AWS.

## Bonnes pratiques
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-best-practices"></a>
+ **Configurez correctement l'accès réseau pour les générateurs** d'images : lancez les générateurs d'images dans des sous-réseaux de cloud privé virtuel (VPC) dotés d'un accès Internet approprié en utilisant une passerelle NAT pour un accès Internet sortant uniquement.

  Testez la connectivité réseau aux ressources requises (telles que les serveurs d'applications, les bases de données et les serveurs de licences) avant de créer des images. Vérifiez que les tables de routage VPC autorisent les connexions à toutes les ressources réseau nécessaires. Pour plus d'informations, consultez la section [Accès à Internet](https://docs.aws.amazon.com/appstream2/latest/developerguide/internet-access.html) dans la documentation WorkSpaces des applications.
+ **Surveillez la capacité du parc par rapport aux quotas de service de manière proactive** : WorkSpaces les quotas de type et de taille des instances d'applications sont définis par Compte AWS, par. Région AWS Si vous avez plusieurs flottes de la même région qui utilisent le même type et la même taille d’instance, le nombre total d’instances de toutes les flottes de la région doit être inférieur ou égal au quota applicable. Pour plus d'informations, consultez la section [Résolution des problèmes liés aux flottes](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-fleets.html) dans la documentation WorkSpaces des applications.
+ **Testez les applications en mode Test Image Builder avant le déploiement de flottes** : validez toujours les applications en mode Test d'Image Builder avant de créer des images et de les déployer sur des flottes. Le mode test simule les autorisations limitées dont disposent les utilisateurs finaux sur les instances de flotte. Pour plus d'informations, consultez la section [Résolution des problèmes liés aux générateurs d'images](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-image-builder.html#troubleshooting-07) dans la documentation WorkSpaces des applications.

## Épopées
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-epics"></a>

### (Facultatif) Créez une image d' WorkSpaces applications
<a name="optional-create-a-aas2-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez un logiciel personnalisé et créez une image. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html)Envisagez d'utiliser la AppLocker fonctionnalité Windows pour verrouiller davantage l'image. | AWS DevOps, architecte du cloud | 

### Déployer le CloudFormation modèle
<a name="deploy-the-cfn-template"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour le CloudFormation modèle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Administrateur système AWS, administrateur cloud, architecte cloud, AWS général, administrateur AWS | 
| Créez une CloudFormation pile à l'aide du modèle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Propriétaire de l'application, administrateur système AWS, ingénieur Windows | 

## Résolution des problèmes
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problèmes divers | Pour plus d'informations, consultez la section [Résolution des problèmes](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting.html) dans la documentation WorkSpaces des applications. | 

## Ressources connexes
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-resources"></a>

**Références**
+ [Démarrez avec Amazon WorkSpaces Applications : configurez avec des exemples d'applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/getting-started.html)
+ [Créez un parc et une pile d' WorkSpaces applications Amazon](https://docs.aws.amazon.com/appstream2/latest/developerguide/set-up-stacks-fleets.html)

**Tutoriels et vidéos**
+ [Flux de travail utilisateur d'Amazon WorkSpaces Applications](https://www.youtube.com/watch?v=hVGQ87-Uhrc)
+ [Comment migrer une ancienne application Windows Forms vers Amazon WorkSpaces Applications](https://www.youtube.com/watch?v=CIImtS2iVbg)
+ [AWS re:Invent 2018 : Fournissez des applications de bureau en toute sécurité avec Amazon WorkSpaces Applications (01) BAP2](https://www.youtube.com/watch?v=xNIyc_inOhM)

## Informations supplémentaires
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional"></a>

Le code suivant est un exemple de CloudFormation modèle que vous pouvez utiliser pour créer automatiquement des ressources WorkSpaces d'applications.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubnetIds:
    Type: 'List<AWS::EC2::Subnet::Id>'
  testSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup::Id'
  ImageName:
    Type: String
Resources:
  
  AppStreamFleet:
    Type: 'AWS::AppStream::Fleet'
    Properties:
      ComputeCapacity:
        DesiredInstances: 5
      InstanceType: stream.standard.medium
      Name: appstream-test-fleet
      DisconnectTimeoutInSeconds: 1200
      FleetType: ON_DEMAND
      IdleDisconnectTimeoutInSeconds: 1200
      ImageName: !Ref ImageName
      MaxUserDurationInSeconds: 345600
      VpcConfig:
        SecurityGroupIds:
          - !Ref testSecurityGroup
        SubnetIds: !Ref SubnetIds
  AppStreamStack:
    Type: 'AWS::AppStream::Stack'
    Properties:
      Description: AppStream stack for test
      DisplayName: AppStream test Stack
      Name: appstream-test-stack
      StorageConnectors:
        - ConnectorType: HOMEFOLDERS
      UserSettings:
        - Action: CLIPBOARD_COPY_FROM_LOCAL_DEVICE
          Permission: ENABLED
        - Action: CLIPBOARD_COPY_TO_LOCAL_DEVICE
          Permission: ENABLED
        - Action: FILE_DOWNLOAD
          Permission: ENABLED
        - Action: PRINTING_TO_LOCAL_DEVICE
          Permission: ENABLED
  AppStreamFleetAssociation:
    Type: 'AWS::AppStream::StackFleetAssociation'
    Properties:
      FleetName: appstream-test-fleet
      StackName: appstream-test-stack
    DependsOn:
      - AppStreamFleet
      - AppStreamStack
```

# Créez un analyseur de journaux personnalisé pour Amazon ECS à l'aide d'un routeur de journaux Firelens
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router"></a>

*Varun Sharma, Amazon Web Services*

## Résumé
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-summary"></a>

Firelens est un routeur de journaux pour Amazon Elastic Container Service (Amazon ECS) et AWS Fargate. Vous pouvez utiliser Firelens pour acheminer les journaux de conteneurs d'Amazon ECS vers Amazon CloudWatch et d'autres destinations (par exemple, [Splunk](https://www.splunk.com/) ou [Sumo](https://www.sumologic.com/) Logic). Firelens fonctionne avec [Fluentd ou Fluent](https://www.fluentd.org/) [Bit](https://fluentbit.io/) comme agent de journalisation, ce qui signifie que vous pouvez utiliser les [paramètres de définition des tâches Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) pour acheminer les journaux.

En choisissant d'analyser les journaux au niveau de la source, vous pouvez analyser vos données de journalisation et effectuer des requêtes afin de répondre de manière plus efficace aux problèmes opérationnels. Étant donné que les différentes applications ont des modèles de journalisation différents, vous devez utiliser un analyseur personnalisé qui structure les journaux et facilite les recherches à destination finale.

Ce modèle utilise un routeur de journaux Firelens avec un analyseur personnalisé pour transférer les journaux CloudWatch depuis un exemple d'application Spring Boot s'exécutant sur Amazon ECS. Vous pouvez ensuite utiliser Amazon CloudWatch Logs Insights pour filtrer les journaux en fonction des champs personnalisés générés par l'analyseur personnalisé. 

## Conditions préalables et limitations
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-prereqs"></a>

**Conditions préalables**
+ Un compte Amazon Web Services (AWS) actif.
+ Interface de ligne de commande AWS (AWS CLI), installée et configurée sur votre machine locale.
+ Docker, installé et configuré sur votre machine locale.
+ Une application conteneurisée basée sur Spring Boot existante sur Amazon Elastic Container Registry (Amazon ECR). 

## Architecture
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-architecture"></a>

![\[Utilisation d'un routeur de journaux Firelens pour transférer des journaux CloudWatch depuis une application exécutée sur Amazon ECS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/images/ef60e087-965a-40e9-9f80-35edbda2befe.png)


**Pile technologique**
+ CloudWatch
+ Amazon ECR
+ Amazon ECS
+ Fargate
+ Docker
+ Fluent Bit

## Outils
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-tools"></a>
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) est un service de registre d'images de conteneurs géré par AWS qui est sécurisé, évolutif et fiable.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs rapide et hautement évolutif qui facilite l'exécution, l'arrêt et la gestion des conteneurs sur un cluster.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — IAM est un service Web permettant de contrôler en toute sécurité l'accès aux services AWS.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS à l'aide de commandes dans votre shell de ligne de commande.
+ [Docker](https://www.docker.com/) — Docker est une plateforme ouverte pour le développement, l'expédition et l'exécution d'applications.

**Code**

Les fichiers suivants sont joints à ce modèle :
+ `customFluentBit.zip`— Contient les fichiers permettant d'ajouter l'analyse et les configurations personnalisées.
+ `firelens_policy.json`— Contient le document de stratégie permettant de créer une politique IAM.
+ `Task.json`— Contient un exemple de définition de tâche pour Amazon ECS.

## Épopées
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-epics"></a>

### Création d'une image Fluent Bit personnalisée
<a name="create-a-custom-fluent-bit-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon ECR et créez un référentiel appelé`fluentbit_custom`.Pour plus d'informations à ce sujet, consultez [la section Création d'un référentiel](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. | Administrateur système, Développeur | 
| Décompressez le package customFluentBit .zip. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) |  | 
| Créez l'image Docker personnalisée. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Pour plus d'informations à ce sujet, consultez la section [Pushing a Docker image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) dans la documentation Amazon ECR.  | Administrateur système, Développeur | 

### Configuration du cluster Amazon ECS
<a name="set-up-the-amazon-ecs-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un nouveau cluster Amazon ECS. | Créez un cluster Amazon ECS en suivant les instructions de la section *Modèle de mise en réseau uniquement* de la section [Création d'un cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) de la documentation Amazon ECS.Assurez-vous de choisir **Create VPC** pour créer un nouveau cloud privé virtuel (VPC) pour votre cluster Amazon ECS. | Administrateur système, Développeur | 

### Configuration de la tâche Amazon ECS
<a name="set-up-the-amazon-ecs-task"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Configurez le rôle IAM d'exécution de tâches Amazon ECS. | Créez un rôle IAM d'exécution de tâches Amazon ECS à l'aide de la politique `AmazonECSTaskExecutionRolePolicy` gérée. Pour plus d'informations à ce sujet, consultez le [rôle IAM d'exécution de tâches Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) dans la documentation Amazon ECS.Assurez-vous d'enregistrer le nom de ressource Amazon (ARN) du rôle IAM. | Administrateur système, Développeur | 
|  Associez la politique IAM au rôle IAM d'exécution des tâches Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrateur système, Développeur | 
| Configurez la définition de tâche Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Pour plus d'informations à ce sujet, consultez [la section Création d'une définition de tâche](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) dans la documentation Amazon ECS. | Administrateur système, Développeur | 

### Exécuter la tâche Amazon ECS
<a name="run-the-amazon-ecs-task"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez la tâche Amazon ECS.  | Sur la console Amazon ECS, choisissez **Clusters**, choisissez le cluster que vous avez créé précédemment, puis exécutez la tâche autonome.Pour plus d'informations à ce sujet, consultez la section [Exécuter une tâche autonome](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html) dans la documentation Amazon ECS. | Administrateur système, Développeur | 

### Vérifiez les CloudWatch journaux
<a name="verify-the-cloudwatch-logs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez les journaux.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrateur système, Développeur | 

## Ressources connexes
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-resources"></a>
+ [Notions de base sur Docker pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) 
+ [Amazon ECS sur AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 
+ [Configuration des paramètres de service de base](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) 

## Pièces jointes
<a name="attachments-e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/attachments/attachment.zip)

# Créez un cadre d'orchestration des ressources piloté par API à l'aide GitHub d'Actions et de Terragrunt
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande et Akash Kumar, Amazon Web Services*

## Résumé
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Ce modèle utilise les flux de travail GitHub Actions pour automatiser le provisionnement des ressources par le biais de charges utiles JSON standardisées, éliminant ainsi le besoin de configuration manuelle. Ce pipeline automatisé gère le cycle de vie complet du déploiement et peut s'intégrer parfaitement à divers systèmes frontaux, qu'il s'agisse de composants d'interface utilisateur personnalisés ou de ServiceNow. La flexibilité de la solution permet aux utilisateurs d'interagir avec le système via leurs interfaces préférées tout en maintenant des processus standardisés.

L'architecture de pipeline configurable peut être adaptée pour répondre aux différentes exigences organisationnelles. L'exemple d'implémentation se concentre sur le provisionnement d'Amazon Virtual Private Cloud (Amazon VPC) et d'Amazon Simple Storage Service (Amazon S3). Le modèle répond efficacement aux défis courants de gestion des ressources cloud en normalisant les demandes au sein de l'organisation et en fournissant des points d'intégration cohérents. Cette approche permet aux équipes de demander et de gérer plus facilement les ressources tout en garantissant la standardisation.

## Conditions préalables et limitations
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Un GitHub compte actif avec accès au référentiel configuré

**Limites**
+ Les nouvelles ressources nécessitent l'ajout manuel de `terragrunt.hcl` fichiers à la configuration du référentiel.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

Le schéma suivant montre les composants et le flux de travail de ce modèle.

![\[Flux de travail pour automatiser le provisionnement des ressources avec GitHub Actions et Terraform.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Le schéma d'architecture montre les actions suivantes :

1. L'utilisateur soumet une charge utile JSON à GitHub Actions, déclenchant le pipeline d'automatisation.

1. Le pipeline GitHub Actions récupère le code des ressources requis dans les référentiels Terragrunt et Terraform, en fonction des spécifications de charge utile.

1. Le pipeline assume le rôle approprié Gestion des identités et des accès AWS (IAM) en utilisant l' Compte AWS ID spécifié. Ensuite, le pipeline déploie les ressources vers la cible Compte AWS et gère l'état de Terraform à l'aide du bucket Amazon S3 et de la table Amazon DynamoDB spécifiques au compte.

Chacun Compte AWS contient des rôles IAM pour un accès sécurisé, un compartiment Amazon S3 pour le stockage d'état Terraform et une table DynamoDB pour le verrouillage d'état. Cette conception permet un déploiement contrôlé et automatisé des ressources sur l'ensemble du territoire Comptes AWS. Le processus de déploiement assure une gestion de l'état et un contrôle d'accès appropriés grâce à des compartiments Amazon S3 dédiés et à des rôles IAM dans chaque compte.

## Outils
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Services AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources sur site et dans le cloud.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) est un outil d'orchestration qui étend à la fois OpenTofu les fonctionnalités de Terraform et celles de Terraform. Il gère la manière dont les modèles d'infrastructure génériques sont appliqués, ce qui facilite la mise à l'échelle et la maintenance de grands parcs d'infrastructures.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Bonnes pratiques
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Stockez AWS les informations d'identification et les données sensibles à l'aide des secrets GitHub du référentiel pour un accès sécurisé.
+ Configurez le fournisseur OpenID Connect (OIDC) pour qu' GitHub Actions assume le rôle IAM, en évitant les informations d'identification statiques.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Création et configuration du référentiel
<a name="create-and-configure-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Initialisez le GitHub référentiel. | Pour initialiser le GitHub référentiel, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Configurez les rôles et les autorisations IAM. | Pour configurer les rôles et les autorisations IAM, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Configurez GitHub des secrets et des variables. | Pour obtenir des instructions sur la façon de configurer les secrets et les variables du référentiel dans le GitHub référentiel, consultez la section [Création de variables de configuration pour un référentiel](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) dans la GitHub documentation. Configurez les variables suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Créez la structure du référentiel. | Pour créer la structure du référentiel, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 

### Déclencher le pipeline et valider les résultats
<a name="trigger-the-pipeline-and-validate-results"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le pipeline à l'aide de curl.  | Pour exécuter le pipeline à l'aide de [curl](https://curl.se/), procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Pour plus d'informations sur le processus d'exécution du pipeline, voir [Informations supplémentaires](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingénieur | 
| Valider les résultats de l'exécution du pipeline | Pour valider les résultats, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Vous pouvez également vérifier les ressources créées en utilisant le `output.json` fichier créé dans le référentiel qui se trouve dans la même ressource que le `terragrunt.hcl` fichier. | DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Soumettez une demande de nettoyage. | Pour supprimer les ressources dont vous n'avez plus besoin, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 

## Ressources connexes
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blogs**
+ [Utilisez les rôles IAM pour connecter des GitHub actions à des actions dans AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Service AWS documentation**
+ [Création de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Surveillance des fichiers CloudTrail journaux avec Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Bonnes pratiques de sécurité pour Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Création d'un événement d'expédition du référentiel](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Création de webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Mettre en œuvre des contrôles d'accès stricts sur le GitHub référentiel](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Auditez régulièrement l'accès au référentiel](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Contrôles de sécurité en CI/CD cours](https://github.com/marketplace/actions/checkov-github-action)
+ [Utiliser l'authentification multifactorielle pour les comptes GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informations supplémentaires
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Processus d'exécution du pipeline**

Voici les étapes de l'exécution du pipeline :

1. **Valide le format de charge utile JSON** : garantit que la configuration JSON entrante est correctement structurée et contient tous les paramètres requis

1. **Assume le rôle IAM spécifié** : authentifie et assume le rôle IAM requis pour les opérations AWS 

1. **Télécharge le code Terraform et Terragrunt requis - Récupère la version spécifiée du code** de ressource et des dépendances

1. **Exécute le déploiement des ressources** : applique la configuration pour déployer ou mettre à jour AWS les ressources dans l'environnement cible

**Exemple de charge utile utilisée pour la création d'un VPC**

Voici un exemple de code pour la création de compartiments d'état du backend Terraform :

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Vous trouverez ci-dessous un exemple de charge utile pour créer un VPC avec Amazon VPC, dans `vpc_cidr` lequel sont définies les spécifications du [bloc CIDR pour le](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Le bucket d'état Terraform est mappé à une variable définie dans les fichiers. `terraform` Le `ref` paramètre contient le nom de branche du code à exécuter.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

`RequestParameters`sont utilisés pour suivre l'état de la demande dans la section du pipeline et `tfstate` sont créés sur la base de ces informations. Les paramètres suivants contiennent des métadonnées et des informations de contrôle :
+ `RequestId`— Identifiant unique pour la demande
+ `RequestType`— Type d'opération (création, mise à jour ou suppression)
+ `ResourceType`— Type de ressource à approvisionner
+ `AccountId`— Cible Compte AWS pour le déploiement
+ `AccountAlias`— Nom convivial pour le Compte AWS
+ `RegionId`— Région AWS pour le déploiement des ressources
+ `ApplicationName`— Nom de l'application
+ `DivisionName`— Division de l'organisation
+ `EnvironmentId`— Environnement (par exemple, dev et prod)
+ `Suffix`— Identifiant supplémentaire pour les ressources

`ResourceParameters`contiennent une configuration spécifique aux ressources qui correspond aux variables définies dans les fichiers Terraform. Toutes les variables personnalisées devant être transmises aux modules Terraform doivent être incluses. `ResourceParameters` Le paramètre `vpc_cidr` est obligatoire pour Amazon VPC.

# Créez des pull requests automatisées pour l'infrastructure gérée par Terraform à l'aide AWS d'Actions GitHub
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

*Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay et Prafful Gupta, Amazon Web Services*

## Résumé
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

Ce modèle présente un utilitaire d'automatisation conçu pour éliminer le travail manuel et répétitif lié à la gestion des modifications dans plusieurs référentiels Terraform. De nombreuses entreprises utilisent les référentiels Terraform pour gérer leur infrastructure en tant que code (IaC), souvent avec des centaines de référentiels distincts représentant différents environnements, services ou équipes. La gestion de ces référentiels à grande échelle représente un défi opérationnel majeur. Les tâches de routine telles que la mise à jour d'un paramètre, la mise à niveau des versions de modules ou l'application de modifications de configuration nécessitent souvent de créer et de gérer des pull requests (PRs) dans de nombreux référentiels plusieurs fois par jour.

Même pour de simples modifications, ce processus manuel et répétitif prend du temps et est source d'erreurs. Les ingénieurs doivent systématiquement appliquer les mêmes modifications à tous les référentiels ciblés et créer des titres et des descriptions de relations publiques significatifs. En outre, ils doivent souvent interagir avec des outils externes tels que Jira pour récupérer ou inclure des références de suivi des problèmes. Ces tâches, bien que nécessaires, consistent à soulever des objets lourds de manière indifférenciée, consomment un temps précieux en ingénierie et réduisent l'efficacité globale. Le manque d'automatisation de ce flux de travail crée des frictions, ralentit la livraison et augmente la charge cognitive des équipes chargées de la maintenance des infrastructures Terraform à grande échelle.

**Présentation de la solution**

Pour relever ce défi, ce modèle propose un utilitaire entièrement piloté par la configuration, permettant aux utilisateurs de définir les modifications souhaitées dans un fichier de configuration structuré. Ce fichier spécifie les référentiels, les modules, les paramètres et les valeurs cibles à l'aide d'un schéma clairement défini.

Une fois configuré, l'utilitaire exécute les étapes automatisées suivantes :

1. **Lit la configuration définie par l'utilisateur** pour déterminer l'étendue et la nature des modifications

1. **Crée une nouvelle branche** dans chaque référentiel cible avec les mises à jour requises appliquées

1. **Génère un PR** pour chaque modification, garantissant ainsi la cohérence entre tous les référentiels

1. **Envoie des notifications Slack** (facultatif) pour avertir les parties prenantes à l'aide de liens directs vers le PRs

En automatisant ces tâches répétitives, l'utilitaire réduit considérablement le temps, les efforts et les risques associés à la gestion des mises à jour d'infrastructure à grande échelle. Il permet aux équipes de se concentrer sur des travaux d'ingénierie à plus forte valeur ajoutée tout en garantissant que les modifications sont appliquées de manière cohérente et peuvent être suivies dans tous les référentiels.

## Conditions préalables et limitations
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Python version 3.8 ou ultérieure.
+ Un jeton d'accès GitHub personnel (PAT). Pour plus d'informations, consultez la section [Création d'un jeton d'accès personnel (classique)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) dans la GitHub documentation.
+ Le GitHub PAT peut accéder à vos référentiels cibles afin que l'utilitaire puisse effectuer des opérations telles que la création de branches et les pull requests. Pour plus d'informations, consultez le [référentiel de GitHub code](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) de ce modèle.

**Limites**
+ **La complexité de la configuration** constitue le principal défi. L'efficacité de l'automatisation est limitée par les capacités de son fichier de configuration. Bien que le système gère efficacement les modifications standard, les modifications complexes de l'infrastructure peuvent nécessiter une intervention manuelle et certains cas extrêmes restent hors du champ d'application de la gestion automatisée.
+ **La sécurité et l'accès** présentent des considérations importantes, notamment en ce qui concerne la gestion des jetons GitHub d'accès et des limites de débit des API. Organisations doivent trouver un juste équilibre entre le besoin d'automatisation et le stockage et la gestion sécurisés des informations d'identification, en garantissant des contrôles d'accès appropriés tout en préservant l'efficacité opérationnelle.
+ **Les contraintes de validation** constituent une autre limite notable, car le système automatisé a une capacité limitée à valider la logique métier et les exigences spécifiques à l'environnement. Les dépendances complexes et les interactions entre services nécessitent souvent une supervision humaine, car la validation automatique ne permet pas de saisir pleinement toutes les nuances contextuelles et les règles métier.
+ Des problèmes **d'échelle et de performance** apparaissent lors de modifications d'infrastructure à grande échelle. Le système doit fonctionner dans les limites de GitHub l'API tout en gérant simultanément de nombreux référentiels. Les opérations gourmandes en ressources sur une infrastructure étendue peuvent créer des goulots d'étranglement en matière de performances nécessitant une gestion minutieuse.
+ Les **limites d'intégration** limitent la flexibilité du système, car il est principalement conçu pour fonctionner avec des outils spécifiques tels que GitHub Slack. Organisations qui utilisent différents outils peuvent avoir besoin de solutions personnalisées et les options de personnalisation du flux de travail de ce modèle sont limitées aux points d'intégration pris en charge.

## Architecture
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

Le schéma suivant montre le flux de travail et les composants de cette solution.

![\[Flux de travail pour créer des pull requests automatisées à l'aide d' GitHub actions.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


Le flux de travail se compose des étapes suivantes :

1. Le développeur déclenche GitHub des actions en spécifiant le référentiel Terraform.

1. L'utilitaire d'automatisation lit les configurations définies.

1. L'utilitaire d'automatisation extrait également le référentiel Terraform fourni.

1. L'utilitaire d'automatisation crée une nouvelle branche et met à jour les modèles Terraform localement.

1. L'utilitaire d'automatisation envoie la nouvelle branche vers le référentiel et crée un nouveau PR. 

1. L'utilitaire d'automatisation utilise les notifications Slack qui incluent des liens de relations publiques pour informer les développeurs et active le déploiement des modèles Terraform. AWS Cloud 

## Outils
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)est une plateforme de développement que les développeurs peuvent utiliser pour créer, stocker, gérer et partager leur code.
+ [GitHub Actions](https://docs.github.com/en/actions) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [HashiCorp Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) qui vous aide à créer et à gérer des ressources sur site et dans le cloud.
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), une offre de Salesforce, est une plateforme conversationnelle basée sur l'IA qui permet la collaboration par chat et vidéo, automatise les processus sans code et prend en charge le partage d'informations.

**Référentiel de code**

Le code de ce modèle est disponible dans le [flux de travail GitHub automatisé de mise à jour de l'infrastructure Terraform à l'aide du référentiel GitHub Actions](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file).

## Bonnes pratiques
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ Une **gestion du changement** efficace est essentielle à la réussite de la mise en œuvre. Organisations devraient adopter une stratégie de déploiement progressif pour les changements à grande échelle. Maintenez des conventions de dénomination des branches et des descriptions de relations publiques cohérentes et garantissez une documentation complète de toutes les modifications.
+ Les **contrôles de sécurité** doivent être rigoureusement mis en œuvre, en se concentrant sur les principes du moindre privilège d'accès et sur une gestion sécurisée des informations d'identification. Activez les règles de protection des succursales pour empêcher les modifications non autorisées. Effectuez des audits de sécurité réguliers pour préserver l'intégrité du système.
+ Un **protocole de test** robuste doit inclure `terraform plan` l'exécution automatisée dans les pipelines d'intégration continue et de déploiement continu (CI/CD). Le protocole doit également inclure des contrôles de validation avant la validation et des environnements de révision dédiés aux modifications critiques. Cette approche de test à plusieurs niveaux permet de détecter les problèmes à un stade précoce et de garantir la stabilité de l'infrastructure.
+ **La stratégie de surveillance** doit inclure des mécanismes d'alerte complets, un suivi détaillé des success/failure métriques et des mécanismes de relance automatisés en cas d'échec des opérations. Cette stratégie contribue à garantir la visibilité opérationnelle et permet de répondre rapidement à tous les problèmes qui se présentent.
+ Les **normes de configuration** doivent mettre l'accent sur le contrôle des versions pour toutes les configurations, en maintenant la modularité pour la réutilisabilité et l'évolutivité. Une documentation claire du schéma et des exemples aide les équipes à comprendre et à utiliser efficacement le système d'automatisation.

## Épopées
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Installation et configuration
<a name="installation-and-setup"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le référentiel. | Pour configurer le référentiel, exécutez les commandes suivantes :<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | AWS DevOps | 
| Installez les dépendances. | Pour installer et vérifier les dépendances Python, exécutez les commandes suivantes :<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | AWS DevOps | 
| Configurez le GitHub jeton. | Pour configurer le GitHub jeton puis vérifier qu'il fonctionne, exécutez les commandes suivantes :<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Configurer le fichier de configuration pour les modifications apportées à Terraform
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le `config.yaml` fichier. | Pour définir vos référentiels cibles et les modifications souhaitées, modifiez le fichier `config.yam` l comme suit :<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Tester et valider
<a name="test-and-validate"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Effectuez des tests avant le vol. | Testez toujours votre configuration avant de l'exécuter sur des référentiels de production. Utilisez les commandes suivantes :<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | AWS DevOps | 
| Vérifiez l'accès au référentiel. | Pour vérifier que le GitHub jeton peut accéder au référentiel, exécutez la commande suivante :<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Exécutez l'utilitaire d'automatisation
<a name="run-the-automation-utility"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez l'utilitaire d'automatisation à l'aide de l'interface utilisateur GitHub Actions. | Pour exécuter l'utilitaire d'automatisation à l'aide de l'interface utilisateur GitHub Actions, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 
| (Alternative) Exécutez l'utilitaire d'automatisation depuis la ligne de commande. | Si vous préférez, vous pouvez exécuter l'utilitaire d'automatisation à partir de la ligne de commande au lieu d'utiliser l'interface utilisateur GitHub Actions. Utilisez la commande suivante :<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Valider PRs et modifier
<a name="validate-prs-and-changes"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez en revue les créations PRs et les modifications. | Pour contrôler les résultats de l'exécution du GitHub flux de travail, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| (Facultatif) Nettoyez PRs. | Fermer, abandonné ou inutile PRs. | AWS DevOps | 

## Ressources connexes
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Directives prescriptives**
+ [Utilisation de Terraform comme outil IaC pour AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub documentation**
+ [À propos des pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Gestion de vos jetons d'accès personnels](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [Comprendre les GitHub actions](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Démarrage rapide pour les actions GitHub ](https://docs.github.com/en/actions/get-started/quickstart)

# Créez automatiquement des pipelines CI dynamiques pour les projets Java et Python
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically"></a>

*Aromal Raj Jayarajan, Vijesh Vijayakumaran Nair, MAHESH RAGHUNANDANAN et Amarnath Reddy, Amazon Web Services*

## Résumé
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-summary"></a>

Ce modèle montre comment créer automatiquement des pipelines d'intégration continue (CI) dynamiques pour les projets Java et Python à l'aide des outils de développement AWS.

À mesure que les technologies se diversifient et que les activités de développement augmentent, il peut devenir difficile de créer et de maintenir des pipelines de CI cohérents au sein d'une organisation. En automatisant le processus dans AWS Step Functions, vous pouvez vous assurer que l'utilisation et l'approche de vos pipelines CI sont cohérentes.

Pour automatiser la création de pipelines CI dynamiques, ce modèle utilise les entrées variables suivantes :
+ Langage de programmation (Java ou Python uniquement)
+ Nom du pipeline
+ Étapes de pipeline requises

**Note**  
Step Functions orchestre la création de pipelines à l'aide de plusieurs services AWS. Pour plus d'informations sur les services AWS utilisés dans cette solution, consultez la section **Outils** de ce modèle.

## Conditions préalables et limitations
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un compartiment Amazon S3 dans la même région AWS que celle dans laquelle cette solution est déployée
+ Un responsable d'AWS Identity and Access Management ([IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)) disposant des CloudFormation autorisations AWS requises pour créer les ressources nécessaires à cette solution

**Limites**
+ Ce modèle ne prend en charge que les projets Java et Python.
+ Les rôles IAM fournis selon ce modèle suivent le principe du moindre privilège. Les autorisations des rôles IAM doivent être mises à jour en fonction des ressources spécifiques que votre pipeline CI doit créer.

## Architecture
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-architecture"></a>

**Pile technologique cible**
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Systems Manager
+ AWS Step Functions
+ AWS Lambda
+ Amazon DynamoDB

**Architecture cible**

Le schéma suivant montre un exemple de flux de travail permettant de créer automatiquement des pipelines de CI dynamiques pour des projets Java et Python à l'aide des outils de développement AWS.

![\[Flux de travail permettant de créer automatiquement des pipelines de CI dynamiques pour les projets Java et Python à l'aide des outils AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/bef2ccb8-68b3-4c0f-9ee7-4b93e9422d9c/images/b5ed003f-cf16-4130-8bfb-2bc2cb9a0d33.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un utilisateur AWS fournit les paramètres d'entrée pour la création d'un pipeline CI au format JSON. Cette entrée lance un flux de travail Step Functions (*machine à états*) qui crée un pipeline CI à l'aide des outils de développement AWS.

1. **Une fonction Lambda lit un dossier nommé **input-reference**, qui est stocké dans un compartiment Amazon S3, puis génère un fichier buildspec.yml.** Ce fichier généré définit les étapes du pipeline CI et est stocké dans le même compartiment Amazon S3 qui stocke les références de paramètres.

1. Step Functions vérifie les dépendances du flux de création du pipeline CI pour détecter toute modification et met à jour la pile de dépendances selon les besoins.

1. Step Functions crée les ressources du pipeline CI dans une CloudFormation pile, y compris un CodeCommit référentiel, un CodeBuild projet et un CodePipeline pipeline.

1. La CloudFormation pile copie l'exemple de code source pour la pile technologique sélectionnée (Java ou Python) et le fichier **buildspec.yml** dans le référentiel. CodeCommit 

1. Les détails d'exécution du pipeline CI sont stockés dans une table DynamoDB.

**Automatisation et mise à l'échelle**
+ Ce modèle est destiné à être utilisé dans un seul environnement de développement uniquement. Des modifications de configuration sont nécessaires pour une utilisation dans plusieurs environnements de développement.
+ Pour ajouter la prise en charge de plusieurs CloudFormation piles, vous pouvez créer des CloudFormation modèles supplémentaires. Pour plus d'informations, consultez [Getting started with AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html) dans la CloudFormation documentation.

## Outils
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-tools"></a>

**Outils**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) est un service d'orchestration sans serveur qui vous permet de combiner les fonctions AWS Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur les comptes et les régions AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets.

**Code**

Le code de ce modèle est disponible dans le GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)référentiel. Le référentiel contient les CloudFormation modèles requis pour créer l'architecture cible décrite dans ce modèle.

## Bonnes pratiques
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-best-practices"></a>
+ N'entrez pas d'informations d'identification (*secrets*) telles que des jetons ou des mots de passe directement dans les CloudFormation modèles ou les configurations d'actions Step Functions. Dans ce cas, les informations seront affichées dans les journaux DynamoDB. Utilisez plutôt AWS Secrets Manager pour configurer et stocker des secrets. Référencez ensuite les secrets stockés dans Secrets Manager dans les CloudFormation modèles et les configurations d'action Step Functions selon vos besoins. Pour plus d'informations, consultez la section [Qu'est-ce qu'AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) dans la documentation de Secrets Manager.
+ Configurez le chiffrement côté serveur pour les CodePipeline artefacts stockés dans Amazon S3. Pour plus d'informations, consultez [Configurer le chiffrement côté serveur pour les artefacts stockés dans Amazon S3 ou CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) dans la CodePipeline documentation.
+ Appliquez les autorisations du moindre privilège lors de la configuration des rôles IAM. Pour plus d'informations, veuillez consulter la rubrique [Accorder les autorisations de moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dans la documentation IAM.
+ Assurez-vous que votre compartiment Amazon S3 n'est pas accessible au public. Pour plus d'informations, consultez [la section Configuration du paramètre de blocage de l'accès public pour vos compartiments S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) dans la documentation Amazon S3.
+ Assurez-vous d'activer la gestion des versions pour votre compartiment Amazon S3. Pour plus d'informations, consultez la section [Utilisation du versionnement dans les compartiments S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans la documentation Amazon S3.
+ Utilisez IAM Access Analyzer lors de la configuration des politiques IAM. L'outil fournit des recommandations pratiques pour vous aider à créer des politiques IAM sécurisées et fonctionnelles. Pour plus d'informations, consultez la section [Utilisation d'AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) dans la documentation IAM.
+ Dans la mesure du possible, définissez des conditions d'accès spécifiques lors de la configuration des politiques IAM.
+ Activez la CloudWatch journalisation Amazon à des fins de surveillance et d'audit. Pour plus d'informations, consultez [Qu'est-ce qu'Amazon CloudWatch Logs ?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) dans la CloudWatch documentation.

## Épopées
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-epics"></a>

### Configuration des prérequis
<a name="configure-the-prerequisites"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un compartiment Amazon S3. | Créez un compartiment Amazon S3 (ou utilisez un compartiment existant) pour stocker les CloudFormation modèles, le code source et les fichiers d'entrée requis pour la solution.Pour plus d'informations, consultez [Étape 1 : Création de votre premier compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) dans la documentation Amazon S3.Le compartiment Amazon S3 doit se trouver dans la même région AWS que celle dans laquelle vous déployez la solution. | AWS DevOps | 
| Clonez le GitHub dépôt. | Clonez le GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)dépôt en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git</pre>Pour plus d'informations, consultez la section [Clonage d'un dépôt](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) dans la GitHub documentation. | AWS DevOps | 
| Téléchargez le dossier Solutions Templates depuis le GitHub référentiel cloné vers votre compartiment Amazon S3.  | Copiez le contenu du dossier **Solution-Templates** cloné et chargez-le dans le compartiment Amazon S3 que vous avez créé.Pour plus d'informations, consultez la section [Chargement d'objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) dans la documentation Amazon S3.Assurez-vous de télécharger uniquement le contenu du dossier **Solution-Templates**. Vous ne pouvez télécharger les fichiers qu'au niveau racine du compartiment Amazon S3. | AWS DevOps | 

### Déploiement de la solution
<a name="deploy-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une CloudFormation pile pour déployer la solution en utilisant le fichier template.yml dans le référentiel cloné. GitHub  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Lors de la création de votre pile, elle est répertoriée sur la page **Stacks** avec le statut **CREATE\$1IN\$1PROGRESS**. Assurez-vous d'attendre que le statut de la pile passe à **CREATE\$1COMPLETE** avant de terminer les étapes restantes de ce modèle. | Administrateur AWS, AWS DevOps | 

### Tester la configuration
<a name="test-the-setup"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez la fonction step que vous avez créée.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Formatage JSON**<pre>{<br />  "details": {<br />    "tech_stack": "Name of the Tech Stack (python/java)",<br />    "project_name": "Name of the Project that you want to create with",<br />    "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />  }<br />}</pre>**Exemple de saisie Java JSON**<pre>{<br />  "details": {<br />    "tech_stack": "java",<br />    "project_name": "pipeline-java-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre>**Exemple de saisie JSON en Python**<pre>{<br />  "details": {<br />    "tech_stack": "python",<br />    "project_name": "pipeline-python-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre> | Administrateur AWS, AWS DevOps | 
| Vérifiez que le CodeCommit référentiel pour le pipeline CI a été créé. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Vérifiez les ressources CodeBuild du projet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Validez les CodePipeline étapes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Vérifiez que le pipeline CI s'est correctement exécuté. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 

### Nettoyage de vos ressources
<a name="clean-up-your-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources empilées CloudFormation. | Supprimez la pile de ressources du pipeline CI CloudFormation.Pour plus d'informations, consultez [Supprimer une pile sur la CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) dans la CloudFormation documentation.Assurez-vous de supprimer la pile nommée **-stack**<project\$1name>. | AWS DevOps | 
| Supprimez les dépendances du pipeline CI dans Amazon S3 et CloudFormation. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Assurez-vous de supprimer la pile nommée **pipeline-creation-dependencies-stack**. | AWS DevOps | 
| Supprimez le bucket de modèles Amazon S3. | Supprimez le compartiment Amazon s3 que vous avez créé dans la section **Configurer les prérequis** de ce modèle, qui stocke les modèles de cette solution.Pour plus d'informations, consultez [Supprimer un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) dans la documentation Amazon S3. | AWS DevOps | 

## Ressources connexes
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-resources"></a>
+ [Création d'une machine d'état Step Functions utilisant Lambda (documentation](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) AWS Step Functions)
+ [AWS Step Functions WorkFlow Studio](https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html) (documentation AWS Step Functions)
+ [DevOps et AWS](https://aws.amazon.com/devops/)
+ [Comment CloudFormation fonctionne AWS ?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html) ( CloudFormation documentation AWS)
+ [Complet CI/CD avec AWS CodeCommit, AWS CodeBuild CodeDeploy, AWS et AWS CodePipeline](https://aws.amazon.com/blogs/devops/complete-ci-cd-with-aws-codecommit-aws-codebuild-aws-codedeploy-and-aws-codepipeline/) (article de blog AWS)
+ [Quotas IAM et AWS STS, exigences relatives aux noms et limites de caractères](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) (documentation IAM)

# Déployez des CloudWatch canaris Synthetics à l'aide de Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjee et Jean-François Landreau, Amazon Web Services*

## Résumé
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

Il est important de valider l'état d'un système du point de vue du client et de confirmer que les clients sont en mesure de se connecter. Cela est plus difficile lorsque les clients n'appellent pas constamment le terminal. [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) prend en charge la création de canaris, qui peuvent tester des points de terminaison publics et privés. En utilisant des canaris, vous pouvez connaître l'état d'un système même s'il n'est pas utilisé. Ces canaris sont soit des scripts Node.js Puppeteer, soit des scripts Python Selenium.

Ce modèle décrit comment utiliser HashiCorp Terraform pour déployer des canaris qui testent des points de terminaison privés. Il intègre un script Puppeteer qui teste si une URL est renvoyée. `200-OK` Le script Terraform peut ensuite être intégré au script qui déploie le point de terminaison privé. Vous pouvez également modifier la solution pour surveiller les points de terminaison publics.

## Conditions préalables et limitations
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Prérequis**
+ Un compte Amazon Web Services (AWS) actif avec un cloud privé virtuel (VPC) et des sous-réseaux privés
+ URL du point de terminaison accessible depuis les sous-réseaux privés
+ Terraform installé dans l'environnement de déploiement

**Limites**

La solution actuelle fonctionne pour les versions d'exécution de CloudWatch Synthetics suivantes :
+ syn-nodejs-puppeteer-3,4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

À mesure que de nouvelles versions d'exécution sont publiées, vous devrez peut-être mettre à jour la solution actuelle. Vous devrez également modifier la solution pour suivre les mises à jour de sécurité.

**Versions du produit**
+ Terraform 1.3.0

## Architecture
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

Amazon CloudWatch Synthetics est basé sur CloudWatch Lambda et Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch propose un assistant pour créer les canaris et un tableau de bord qui affiche l'état des canaris. La fonction Lambda exécute le script. Amazon S3 stocke les journaux et les captures d'écran des Canary Runs.

Ce modèle simule un point de terminaison privé via une instance Amazon Elastic Compute Cloud (Amazon EC2) déployée dans les sous-réseaux ciblés. La fonction Lambda nécessite des interfaces réseau élastiques dans le VPC où le point de terminaison privé est déployé.

![\[La description suit le schéma.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


Le diagramme décrit les éléments suivants :

1. Le Synthetics Canary lance la fonction Lambda Canary.

1. La fonction Lambda Canary se connecte à l'interface Elastic Network.

1. La fonction Canary Lambda surveille l'état du terminal.

1. Le Synthetics Canary envoie les données d'exécution vers le compartiment S3 et les métriques. CloudWatch 

1. Une CloudWatch alarme est déclenchée sur la base des métriques.

1. L' CloudWatch alarme lance la rubrique Amazon Simple Notification Service (Amazon SNS).

## Outils
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Services AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos ressources AWS et des applications que vous exécutez sur AWS en temps réel.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS. Ce modèle utilise des points de terminaison VPC et des interfaces réseau élastiques.

**Autres services**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil open source d'infrastructure sous forme de code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources cloud. Ce modèle utilise Terraform pour déployer l'infrastructure.
+ [Puppeteer](https://pptr.dev/) est une bibliothèque Node.js. Le runtime CloudWatch Synthetics utilise le framework Puppeteer.

**Code**

La solution est disponible dans le watch-synthetics-canary-terraform référentiel GitHub [cloud](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform). Pour plus d'informations, consultez la section *Informations supplémentaires*.

## Épopées
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Implémenter la solution de surveillance d'une URL privée
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Rassemblez les exigences relatives à la surveillance de l'URL privée. | Rassemblez la définition complète de l'URL : domaine, paramètres et en-têtes. Pour communiquer en privé avec Amazon S3 et Amazon CloudWatch, utilisez des points de terminaison VPC. Notez comment le VPC et les sous-réseaux sont accessibles au point de terminaison. Tenez compte de la fréquence des courses de canaris. | Architecte cloud, administrateur réseau | 
| Modifiez la solution existante pour surveiller l'URL privée. | Modifiez le `terraform.tfvars` fichier :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Architecte du cloud | 
| Déployez et exploitez la solution. | Pour déployer la solution, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Architecte cloud, DevOps ingénieur | 

## Résolution des problèmes
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La suppression des ressources provisionnées est bloquée. | Supprimez manuellement la fonction Lambda Canary, l'interface Elastic Network correspondante et le groupe de sécurité, dans cet ordre. | 

## Ressources connexes
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Utilisation de la surveillance synthétique](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Surveillez les points de terminaison API Gateway avec Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (article de blog)

## Informations supplémentaires
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefacts du référentiel**

La structure des artefacts du référentiel est la suivante.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

Le `main.tf` fichier contient le module principal et déploie deux sous-modules :
+ `canary-infra`déploie l'infrastructure requise pour les canaris.
+ `canary`déploie les canaris.

Les paramètres d'entrée de la solution se trouvent dans le `terraform.tfvars` fichier. Vous pouvez utiliser l'exemple de code suivant pour créer un canari.

```
module "canary" {
    source = "./modules/canary"
    name   = var.name
    runtime_version = var.runtime_version
    take_screenshot = var.take_screenshot
    api_hostname = var.api_hostname
    api_path = var.api_path
    reports-bucket = module.canary_infra.reports-bucket
    role = module.canary_infra.role
    security_group_id = module.canary_infra.security_group_id
    subnet_ids = var.subnet_ids
    frequency = var.frequency
    alert_sns_topic = var.alert_sns_topic
}
```

Le fichier .var correspondant suit.

```
name   = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
```

**Nettoyage de la solution**

Si vous testez cela dans un environnement de développement, vous pouvez nettoyer la solution pour éviter des coûts supplémentaires.

1. Sur la console de gestion AWS, accédez à la console Amazon S3. Videz le compartiment Amazon S3 créé par la solution. Assurez-vous de faire une sauvegarde des données, si nécessaire.

1. Dans votre environnement de développement, depuis le `cloudwatch-synthetics-canary-terraform` répertoire, exécutez la `destroy` commande.

   ```
   terraform destroy
   ```

# Déployez une ChatOps solution pour gérer les résultats du scan SAST en utilisant Amazon Q Developer dans les applications de chat, les actions personnalisées et CloudFormation
<a name="deploy-chatops-solution-to-manage-sast-scan-results"></a>

*Anand Bukkapatnam Tirumala, Amazon Web Services*

## Résumé
<a name="deploy-chatops-solution-to-manage-sast-scan-results-summary"></a>

Ce modèle présente une solution complète qui utilise Amazon Q Developer dans les applications de chat afin de rationaliser la gestion des défaillances d'analyse des tests de sécurité des applications statiques (SAST) signalées par le biais SonarQube de ce modèle. Cette approche innovante intègre des actions et des notifications personnalisées dans une interface conversationnelle, permettant une collaboration efficace et des processus décisionnels au sein des équipes de développement.

Dans l'environnement de développement logiciel en évolution rapide d'aujourd'hui, la gestion efficace des résultats du scan SAST est essentielle pour maintenir la qualité et la sécurité du code. Cependant, de nombreuses organisations sont confrontées aux défis importants suivants :
+ Prise de conscience différée des vulnérabilités critiques en raison de l'inefficacité des systèmes de notification
+ Processus de prise de décision lents causés par des flux de travail d'approbation déconnectés
+ Absence de réponses immédiates et exploitables en cas d'échec du scan SAST
+ Communication et collaboration fragmentées autour des résultats de sécurité
+ Configuration manuelle de l'infrastructure fastidieuse et sujette aux erreurs pour les outils de sécurité

Ces problèmes augmentent souvent les risques de sécurité, retardent les publications et réduisent la productivité des équipes. Pour relever efficacement ces défis, il faut une solution capable de rationaliser la gestion des résultats du SAST, d'améliorer la collaboration des équipes et d'automatiser le provisionnement de l'infrastructure.

Les principales fonctionnalités de la solution sont les suivantes :
+ **Notifications personnalisées** — Les alertes et notifications en temps réel sont transmises directement aux canaux de discussion de l'équipe, ce qui permet de détecter et d'agir rapidement en cas de vulnérabilité ou d'échec du scan SAST.
+ **Approbations conversationnelles** — Les parties prenantes peuvent initier et terminer des flux de travail d'approbation pour les résultats du scan SAST de manière fluide via l'interface de chat, accélérant ainsi les processus de prise de décision.
+ **Actions personnalisées** — Les équipes peuvent définir et exécuter des actions personnalisées en fonction des résultats du scan SAST, telles que le déclenchement automatique d'e-mails en cas de défaillance du contrôle qualité ou l'amélioration de la réactivité face aux problèmes de sécurité.
+ **Collaboration centralisée** — Toutes les discussions, décisions et actions liées au scan SAST sont conservées dans un environnement de discussion unifié, ce qui favorise une meilleure collaboration et un partage des connaissances entre les membres de l'équipe.
+ **Infrastructure sous forme de code (IaC)** : l'ensemble de la solution est enveloppé de AWS CloudFormation modèles, ce qui permet un provisionnement plus rapide et plus fiable de l'infrastructure tout en réduisant les erreurs de configuration manuelle.

## Conditions préalables et limitations
<a name="deploy-chatops-solution-to-manage-sast-scan-results-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Rôle Gestion des identités et des accès AWS (IAM) autorisé à créer et à gérer les ressources associées aux ressources Services AWS répertoriées dans [Outils](#deploy-chatops-solution-to-manage-sast-scan-results-tools).
+ Un espace de travail Slack.
+ Amazon Q Developer dans les applications de chat a été ajouté à l'espace de travail Slack requis en tant que plug-in. Pour plus d'informations, consultez la section [Ajouter des applications à votre espace de travail Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) dans la documentation Slack. Notez l'identifiant de l'espace de travail Slack tel qu'indiqué sur le une AWS Management Console fois l'enregistrement réussi.
+ Un client Amazon Q Developer configuré dans des applications de chat, avec l'ID de l'espace de travail facilement disponible pour la saisie dans la CloudFormation console. Pour obtenir des instructions, consultez la section [Configurer un client Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup) dans le *Guide de l'administrateur des applications de chat Amazon Q pour les développeurs*.
+ Un compte e-mail source créé et vérifié dans Amazon Simple Email Service (Amazon SES) pour envoyer des e-mails d'approbation. Pour les instructions de configuration, consultez [la section Création et vérification des identités e-mail](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) dans le manuel *Amazon Simple Email Service Developer Guide*.
+ Adresse e-mail de destination pour recevoir les notifications d'approbation. Cette adresse peut être une boîte de réception partagée ou une liste de distribution spécifique à une équipe.
+ Une SonarQube instance opérationnelle accessible depuis votre Compte AWS. Pour plus d'informations, consultez les [instructions SonarQube d'installation](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/).
+ Un [jeton SonarQube utilisateur](https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) autorisé à déclencher et à créer des projets via le pipeline.

**Limites**
+ La création de boutons d'action personnalisés est un processus manuel dans cette solution. 
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="deploy-chatops-solution-to-manage-sast-scan-results-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail pour déployer l'assurance qualité du code automatisée pour la gestion des versions à l'aide d'Amazon Q Developer.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/a977924c-957e-4f91-99d6-ed790e343ea6.png)


Le schéma montre le flux de travail automatisé d'assurance qualité du code :

1. Préparation et téléchargement du code :
   + Le développeur compresse la base de code dans un fichier .zip.
   + Le développeur télécharge manuellement le fichier .zip dans un compartiment Amazon Simple Storage Service (Amazon S3) désigné.

1. Déclenchement et AWS Step Functions orchestration d'événements Amazon S3 :
   + L'événement de téléchargement Amazon S3 déclenche un flux de travail Step Functions.
   + Step Functions orchestre un scan SAST à l'aide de. SonarQube
   + Le flux de travail surveille l'état de la AWS CodeBuild tâche pour déterminer les prochaines actions. En cas de CodeBuild succès (contrôle qualité), le flux de travail s'arrête. En cas d' CodeBuild échec, une AWS Lambda fonction est invoquée à des fins de diagnostic. Pour plus de détails, consultez **AWS Step Functions la section logique** plus loin dans cette section.

1. AWS CodeBuild exécution :
   + La CodeBuild tâche exécute une SonarQube analyse de la base de code téléchargée.
   + Les artefacts de scan sont stockés dans un compartiment Amazon S3 distinct à des fins d'audit et d'analyse.

1. Analyse des défaillances (fonction Lambda) :
   + En CodeBuild cas d'échec, la fonction `CheckBuildStatus` Lambda est déclenchée.
   + En cas de CodeBuild succès, le processus est arrêté et aucune autre action n'est nécessaire.

1. La fonction Lambda analyse la cause de la défaillance (défaillance du contrôle qualité ou autres problèmes)
   + La `CheckBuildStatus` fonction crée une charge utile personnalisée avec des informations détaillées sur les défaillances.
   + La `CheckBuildStatus` fonction publie la charge utile personnalisée dans une rubrique Amazon Simple Notification Service (Amazon SNS).

1. Système de notification :
   + Amazon SNS transmet la charge utile à Amazon Q Developer dans des applications de chat pour l'intégration à Slack.

1. Intégration à Slack :
   + Dans les applications de chat, Amazon Q Developer publie une notification sur le canal Slack désigné.

1. Processus d'approbation :
   + Les approbateurs examinent les détails de l'échec dans la notification Slack.
   + Les approbateurs peuvent initier l'approbation à l'aide du bouton **Approuver** dans Slack.

1. Gestionnaire d'approbation :
   + Une fonction Lambda d'approbation traite l'action d'approbation depuis Slack.
   + La fonction d'approbation publie le message personnalisé sur Amazon SES.

1. Message généré :
   + La fonction d'approbation génère un message personnalisé pour les notifications destinées aux développeurs.

1. Notification aux développeurs :
   + Amazon SES envoie un e-mail au développeur avec les prochaines étapes ou les actions requises.

Ce flux de travail associe le téléchargement manuel du code à des contrôles de qualité automatisés, fournit un feedback immédiat via Slack et permet une intervention humaine si nécessaire, garantissant ainsi un processus de révision du code robuste et flexible.

**AWS Step Functions logique**

Comme indiqué dans le schéma d'architecture précédent, si le transfert du contrôle qualité SonarQube échoue, le flux de travail passe à la fonction `CheckBuildStatus` Lambda. La `CheckBuildStatus` fonction déclenche une notification sur le canal Slack. Chaque notification inclut des informations avec les prochaines étapes suggérées. Les types de notifications sont les suivants :
+ **L'application a échoué lors de l'analyse de sécurité du code** : l'utilisateur reçoit cette notification lorsque le code téléchargé n'a pas réussi le scan SonarQube de sécurité. L'utilisateur peut choisir **APPROVE** pour accepter le build. Cependant, la notification conseille à l'utilisateur de se méfier de la mauvaise qualité du code et des risques de sécurité potentiels. La notification inclut les informations suivantes :
  + Prochaines étapes : Erreur : État du contrôle de qualité : ÉCHEC — Afficher les détails à l'URL fournie.
  + Triez les vulnérabilités comme indiqué dans le document à l'adresse URL fournie.
  + CodeBuild les détails sont disponibles sur place à l'adresse URL fournie.
+ **Le pipeline d'analyse des applications a échoué pour une autre raison** : l'utilisateur reçoit cette notification lorsque le pipeline échoue pour une raison autre que l'échec de l'analyse de sécurité du code. La notification inclut les informations suivantes :
  + Pour les étapes suivantes, cliquez sur le lien fourni pour un dépannage plus approfondi.

Pour voir des captures d'écran des notifications telles qu'elles apparaissent sur une chaîne Slack, rendez-vous dans le [dossier des ressources du référentiel](https://github.com/aws-samples/chatops-slack/tree/main/assets) GitHub chatops-slack.

Le schéma suivant montre un exemple du statut de l'étape Step Functions après l'échec du contrôle qualité.

![\[État de l'étape du flux de travail d'AWS Step Functions après l'échec du test Quality Gate.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/40b7ebf0-2518-4413-9717-0bfb7559adde.png)


## Outils
<a name="deploy-chatops-solution-to-manage-sast-scan-results-tools"></a>

**Services AWS**
+ [Amazon Q Developer dans les applications de chat](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) vous permet d'utiliser les canaux de discussion Amazon Chime, Microsoft Teams et Slack pour surveiller les événements opérationnels de vos applications et y répondre. AWS *Avis de fin de support :* le 20 février 2026, le support du service Amazon Chime AWS prendra fin. Après le 20 février 2026, vous ne pourrez plus accéder à la console Amazon Chime ni aux ressources de l'application Amazon Chime. Pour plus d'informations, consultez le billet de [blog](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/). Cela n'a aucune incidence sur la disponibilité du [service Amazon Chime SDK](https://aws.amazon.com/chime/chime-sdk/).
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie, de bout Comptes AWS en bout Régions AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) vous permet d'envoyer et de recevoir des e-mails en utilisant vos propres adresses e-mail et domaines.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise.

**Autres outils**
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), une offre de Salesforce, est une plateforme conversationnelle basée sur l'IA qui permet la collaboration par chat et vidéo, automatise les processus sans code et prend en charge le partage d'informations.
+ [SonarQube](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/)est un outil d'analyse sur site conçu pour détecter les problèmes de codage dans plus de 30 langages, frameworks et plateformes IaC.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt GitHub [chatops-slack](https://github.com/aws-samples/chatops-slack).

## Bonnes pratiques
<a name="deploy-chatops-solution-to-manage-sast-scan-results-best-practices"></a>
+ **CloudFormation gestion des piles** : si vous rencontrez des défaillances lors de l'exécution de la CloudFormation pile, nous vous recommandons de supprimer la pile défaillante. Recréez-le ensuite avec les valeurs de paramètres correctes. Cette approche permet un déploiement propre et permet d'éviter les conflits potentiels ou les implémentations partielles.
+ **Configuration des e-mails dans une boîte de réception partagée** : lorsque vous configurez le `SharedInboxEmail` paramètre, utilisez une liste de distribution commune accessible à tous les développeurs concernés. Cette approche favorise la transparence et permet aux notifications importantes de parvenir aux membres de l'équipe concernés.
+ **Flux de travail d'approbation** de production : pour les environnements de production, limitez l'accès au canal Slack utilisé pour les approbations de construction. Seuls les approbateurs désignés doivent être membres de cette chaîne. Cette pratique permet de maintenir une chaîne de responsabilité claire et d'améliorer la sécurité en limitant le nombre de personnes habilitées à approuver les modifications critiques.
+ **Autorisations IAM** — Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) dans la documentation IAM.

## Épopées
<a name="deploy-chatops-solution-to-manage-sast-scan-results-epics"></a>

### Effectuer la configuration initiale
<a name="perform-initial-setup"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt [chatops-slack](https://github.com/aws-samples/chatops-slack) pour ce modèle, utilisez la commande suivante.`git clone "git@github.com:aws-samples/chatops-slack.git"` | AWS DevOps, responsable du développement, DevOps ingénieur, administrateur du cloud | 
| Créez les fichiers .zip contenant le code Lambda. | Créez les fichiers .zip pour le code de AWS Lambda fonction de la `ApprovalEmail` fonctionnalité `CheckBuildStatus` et. Pour créer `notification.zip` et`approval.zip`, utilisez les commandes suivantes.<pre>cd chatops-slack/src</pre><pre>chmod -R 775 *</pre><pre>zip -r approval.zip approval</pre><pre>zip -r notification.zip notification</pre> | AWS DevOps, responsable du développement, DevOps ingénieur, administrateur du cloud | 

### Déployez le fichier de pile pre-requisite.yml
<a name="deploy-the-pre-requisite-yml-stack-file"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le fichier de `pre-requisite.yml` pile. | Le fichier de `pre-requisite.yml` CloudFormation pile déploie les ressources initiales requises avant que vous n'exécutiez le fichier de `app-security.yml` pile. Pour exécuter le `pre-requisite.yml` fichier, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrateur AWS, AWS DevOps, responsable du développement, DevOps ingénieur | 
| Téléchargez les fichiers .zip dans le compartiment Amazon S3. | Chargez les `approval.zip` fichiers `notification.zip` et que vous avez créés précédemment dans le compartiment Amazon S3 nommé`S3LambdaBucket`. Le fichier de `app-security.yml` CloudFormation pile est utilisé `S3LambdaBucket` pour provisionner la fonction Lambda. | AWS DevOps, responsable du développement, DevOps ingénieur, administrateur système AWS | 

### Exécutez le fichier de pile app-security.yml
<a name="execute-the-app-security-yml-stack-file"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le fichier de `app-security.yml` pile. | Les fichiers de `app-security.yml` pile déploient l'infrastructure restante pour le système de notification et d'approbation. Pour exécuter le `app-security.yml` fichier, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | AWS DevOps, administrateur système AWS, DevOps ingénieur, responsable du développement | 
| Testez la configuration des notifications. | Pour tester la configuration des notifications, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html)Une fois le message de test envoyé avec succès, vous devriez voir une notification sur le canal Slack. Pour plus d'informations, consultez la section [Tester les notifications envoyées Services AWS à Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#test-notifications-slack) dans le *guide de l'administrateur des applications de chat Amazon Q pour les développeurs*. | AWS DevOps, administrateur système AWS, DevOps ingénieur, responsable du développement | 

### Configurer le flux d'approbation
<a name="set-up-approval-flow"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez une action Lambda personnalisée. | Pour configurer l' AWS Lambda action personnalisée, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrateur AWS DevOps, responsable du développement, DevOps ingénieur, administrateur Slack | 
| Validez le flux d'approbation. | Pour vérifier que le flux d'approbation fonctionne comme prévu, cliquez sur le bouton **Approuver** dans Slack.Slackbot doit envoyer une notification sur le fil de discussion avec la chaîne de confirmation « L'**e-mail d'approbation a été envoyé** avec succès ». | Administrateur AWS, DevOps ingénieur AWS DevOps, administrateur Slack | 

## Résolution des problèmes
<a name="deploy-chatops-solution-to-manage-sast-scan-results-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Mauvaises configurations de Slack | Pour plus d'informations sur la résolution des problèmes liés aux mauvaises configurations de Slack, consultez la section Résolution des problèmes liés aux développeurs Amazon Q Developer dans le Guide de l'*administrateur d'Amazon Q Developer in Chat applications*. | 
| Le scan a échoué pour une autre raison | Cette erreur signifie que la tâche de génération du code a échoué. Pour résoudre le problème, cliquez sur le lien figurant dans le message. L'échec de la tâche de génération du code peut avoir les causes suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | 

## Ressources connexes
<a name="deploy-chatops-solution-to-manage-sast-scan-results-resources"></a>

**AWS documentation**
+ [Configuration d'un client Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup)
+ [Création d'une action personnalisée](https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-actions.html#creating-custom-actions)
+ [Création d'une [procédure](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) d'identification par adresse e-mail](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure)
+ [Tutoriel : Commencez à utiliser Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html)

**Autres ressources**
+ [Ajouter des applications à votre espace de travail Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) (documentation Slack)
+ [Génération et utilisation de jetons](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/) (SonarQube documentation)
+ [Présentation de l'installation du serveur](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/) (SonarQube documentation)

## Informations supplémentaires
<a name="deploy-chatops-solution-to-manage-sast-scan-results-additional"></a>

Cette solution met l'accent sur les actions personnalisées d'Amazon Q Developer dans les applications de chat à des fins de gestion des versions. Cependant, vous pouvez réutiliser la solution en modifiant le code Lambda en fonction de votre cas d'utilisation spécifique et en le complétant.

**Paramètres des fichiers de CloudFormation pile**

Le tableau suivant présente les paramètres et leurs descriptions pour le fichier de CloudFormation pile`pre-requisite.yml`.


| 
| 
| **Clé** | **Description** | 
| --- |--- |
| `StackName` | Nom de la CloudFormation pile. | 
| `S3LambdaBucket` | Le nom du compartiment Amazon S3 dans lequel vous chargez le code Lambda. Le nom doit être globalement unique. | 
| `SonarToken` | Le jeton SonarQube utilisateur tel que décrit dans la section [Conditions préalables](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). | 

Le tableau suivant présente les paramètres et leurs descriptions pour le fichier de CloudFormation pile`app-security.yml`.


| 
| 
| **Clé** | **Description** | 
| --- |--- |
| `CKMSKeyArn` | Le nom de ressource AWS KMS key Amazon (ARN) utilisé dans les rôles IAM et les fonctions Lambda créés dans cette pile. | 
| `CKMSKeyId` | L' AWS KMS key ID utilisé dans la rubrique Amazon SNS créée dans cette pile. | 
| `EnvironmentType` | Nom de l'environnement client pour le déploiement du pipeline d'analyse des applications. Sélectionnez le nom de l'environnement dans la liste déroulante des valeurs autorisées. | 
| `S3LambdaBucket` | Le nom du compartiment Amazon S3 qui contient les `notification.zip` fichiers `approval.zip` et. | 
| `SESEmail` | Le nom de l'identité e-mail enregistrée dans Amazon SES, tel que décrit dans la section [Conditions préalables](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). Cette identité est l'adresse e-mail source. | 
| `SharedInboxMail` | Adresse e-mail de destination à laquelle les notifications de numérisation sont envoyées. | 
| `SlackChannelId` | L'identifiant de la chaîne Slack sur laquelle vous souhaitez que les notifications soient envoyées. Pour trouver l'identifiant de la chaîne, cliquez avec le bouton droit sur le nom de la **chaîne dans Détails** de la chaîne dans l'application Slack. L'identifiant de la chaîne se trouve en bas. | 
| `SlackWorkspaceId` | L'identifiant de l'espace de travail Slack tel que décrit dans la section [Conditions préalables](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). **Pour trouver l'identifiant de l'espace de travail Slack, connectez-vous à la AWS Management Console console Amazon Q Developer dans les applications de chat, puis choisissez **Clients configurés**, **Slack**, WorkspaceID.** | 
| `StackName` | Nom de la CloudFormation pile. | 
| `SonarFileDirectory` | Le répertoire qui contient le `sonar.project.<env>.properties` fichier. | 
| `SonarFileName` | Le nom du `sonar.project.<env>properties` fichier. | 
| `SourceCodeZip` | Nom du fichier .zip qui contient le `sonar.project.<env>properties` fichier et le code source. | 

# Déployez des systèmes agentic sur Amazon Bedrock avec le framework CrewAI en utilisant Terraform
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework"></a>

*Vanitha Dontireddy, Amazon Web Services*

## Résumé
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-summary"></a>

[Ce modèle montre comment implémenter des systèmes d'IA multi-agents évolutifs en utilisant le framework [CrewAI](https://www.crewai.com/) intégré à [Amazon Bedrock](https://aws.amazon.com/bedrock/?nc1=h_ls) et Terraform.](https://registry.terraform.io/) La solution permet aux entreprises de créer, de déployer et de gérer des flux de travail d'agents IA sophistiqués via l'infrastructure en tant que code (IaC). Dans ce modèle, les capacités d'orchestration multi-agents de CrewAI se combinent aux modèles de base d'Amazon Bedrock et à l'automatisation de l'infrastructure Terraform. Les équipes peuvent ainsi créer des systèmes d'IA prêts pour la production qui s'attaquent à des tâches complexes avec un minimum de supervision humaine. Le modèle met en œuvre une sécurité, une évolutivité et des meilleures pratiques opérationnelles au niveau de l'entreprise. 

## Conditions préalables et limitations
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS disposant des autorisations appropriées pour [accéder aux modèles de la fondation Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [Terraform version 1.5 ou ultérieure installée](https://developer.hashicorp.com/terraform/install)
+ Python version 3.9 ou ultérieure [installée](https://www.python.org/downloads/)
+ [Framework CrewAI installé](https://docs.crewai.com/installation)

**Limites**
+ Les interactions entre les agents sont limitées par les fenêtres contextuelles du modèle.
+ Les considérations relatives à la gestion de l'état de Terraform pour les déploiements à grande échelle s'appliquent à ce modèle.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture"></a>

Dans ce modèle, les interactions suivantes se produisent :
+ Amazon Bedrock fournit les bases de l'intelligence des agents grâce à sa suite de modèles de base (FMs). Il permet aux agents d'IA de disposer de capacités de traitement du langage naturel (NLP), de raisonnement et de prise de décision tout en maintenant une disponibilité et une évolutivité élevées.
+ Le framework CrewAI sert de couche d'orchestration principale pour la création et la gestion des agents d'IA. Il gère les protocoles de communication des agents, la délégation de tâches et la gestion des flux de travail tout en s'intégrant à Amazon Bedrock.
+ Terraform gère l'ensemble de l'infrastructure par le biais du code, y compris les ressources informatiques, le réseau, les groupes de sécurité et les rôles Gestion des identités et des accès AWS (IAM). Il garantit des déploiements cohérents et contrôlés par version dans tous les environnements. Le déploiement de Terraform crée les éléments suivants :
  + AWS Lambda fonction pour exécuter l'application CrewAI
  + Compartiments Amazon Simple Storage Service (Amazon S3) pour le code et les rapports
  + Rôles IAM dotés des autorisations appropriées
  +  CloudWatch Journalisation sur Amazon
  + Exécution planifiée par Amazon EventBridge

Le schéma suivant illustre l'architecture permettant de déployer des systèmes multi-agents CrewAI à l'aide d'Amazon Bedrock et Terraform.

![\[Flux de travail pour déployer les systèmes multi-agents CrewAI à l'aide de Terraform et Amazon Bedrock.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b46069e9-4c38-405f-b0f0-310eabb06b06/images/b3296b17-e388-46ba-8d71-2ec7ce3ed3e0.png)


Le schéma suivant illustre le flux de travail suivant :

1. L'utilisateur clone le référentiel.

1. L'utilisateur exécute la commande `terraform apply` pour déployer les AWS ressources.

1. La configuration du modèle Amazon Bedrock inclut la spécification du modèle de base (FM) à utiliser pour configurer les agents CrewAI.

1. Une EventBridge règle est établie pour déclencher la fonction Lambda selon le calendrier défini.

1. Lorsqu'elle est déclenchée (par planification ou manuellement), la fonction Lambda s'initialise et assume le rôle IAM avec des autorisations d'accès et Services AWS Amazon Bedrock.

1. Le framework CrewAI charge les configurations d'agents à partir de fichiers YAML et crée des agents d'IA spécialisés (l'équipe d'*audit de sécurité de l'AWS infrastructure*). La fonction Lambda exécute ces agents de manière séquentielle pour scanner les AWS ressources, analyser les failles de sécurité et générer des rapports d'audit complets.

1. CloudWatch Les journaux capturent des informations d'exécution détaillées à partir de la fonction Lambda avec une période de rétention de 365 jours et un cryptage AWS Key Management Service (AWS KMS) pour répondre aux exigences de conformité. Les journaux fournissent une visibilité sur les activités des agents, le suivi des erreurs et les indicateurs de performance, permettant ainsi une surveillance et un dépannage efficaces du processus d'audit de sécurité.

1. Le rapport d'audit de sécurité est automatiquement généré et stocké dans le compartiment Amazon S3 désigné. La configuration automatisée permet de maintenir une surveillance cohérente de la sécurité avec une charge opérationnelle minimale.

Après le déploiement initial, le flux de travail fournit des audits de sécurité et des rapports continus pour votre AWS infrastructure sans intervention manuelle.

**Vue d'ensemble des agents d'IA**

Ce modèle crée plusieurs agents d'IA, chacun doté de rôles, d'objectifs et d'outils uniques :
+ L'**agent d'analyse de sécurité** collecte et analyse les informations sur les AWS ressources.
+ L'**agent de test de pénétration** identifie les vulnérabilités des AWS ressources.
+ L'**agent expert en conformité** vérifie les configurations par rapport aux normes de conformité.
+ L'**agent rédacteur du rapport** compile les résultats dans des rapports complets.

Ces agents collaborent sur une série de tâches, en tirant parti de leurs compétences collectives pour réaliser des audits de sécurité et générer des rapports complets. (Le `config/agents.yaml` fichier décrit les capacités et les configurations de chaque agent de cette équipe.)

Le traitement de l'analyse de sécurité comprend les actions suivantes :

1. L'agent Security Analyst examine les données collectées sur les AWS ressources, telles que les suivantes :
   + Instances et groupes de sécurité Amazon Elastic Compute Cloud (Amazon EC2)
   + Compartiments et configurations Amazon S3
   + Rôles, politiques et autorisations IAM
   + Configurations du cloud privé virtuel (VPC) et paramètres réseau
   + Bases de données Amazon RDS et paramètres de sécurité
   + Fonctions et configurations Lambda
   + Autres objets Services AWS relevant de la portée de l'audit

1. L'agent de test de pénétration identifie les vulnérabilités potentielles.

1. Les agents collaborent via le framework CrewAI pour partager leurs résultats.

La génération de rapports comprend les actions suivantes :

1. L'agent rédacteur du rapport compile les résultats de tous les autres agents.

1. Les problèmes de sécurité sont organisés en fonction du service, de la gravité et de l'impact sur la conformité.

1. Des recommandations de correction sont générées pour chaque problème identifié.

1. Un rapport d'audit de sécurité complet est créé au format Markdown et téléchargé dans le compartiment Amazon S3 désigné. Les rapports historiques sont conservés pour le suivi de la conformité et l'amélioration de la posture de sécurité.

Les activités de journalisation et de surveillance incluent :
+ CloudWatch les journaux capturent les détails de l'exécution et les éventuelles erreurs.
+ Les métriques d'exécution Lambda sont enregistrées à des fins de surveillance.

**Note**  
Le code de `aws-security-auditor-crew` provient du référentiel GitHub [3P-Agentic\$1Frameworks](https://github.com/aws-samples/3P-Agentic-Frameworks/blob/main/crewai/aws-security-auditor-crew/README.md), disponible dans la collection Samples. AWS 

**Disponibilité et évolutivité**

Vous pouvez étendre le nombre d'agents disponibles à plus que les quatre agents principaux. Pour intégrer des agents spécialisés supplémentaires, envisagez les nouveaux types d'agents suivants :
+ Un agent *spécialisé dans le renseignement sur les menaces* peut effectuer les opérations suivantes :
  + Surveille les flux de menaces externes et établit des corrélations avec les conclusions internes
  + Fournit un contexte sur les menaces émergentes pertinentes pour votre infrastructure
  + Priorise les vulnérabilités en fonction de leur exploitation active dans la nature
+ Les agents *du cadre de conformité* peuvent se concentrer sur des domaines réglementaires spécifiques tels que les suivants :
  + Agent de conformité à la norme de sécurité des données de l'industrie des cartes de paiement (PCI DSS)
  + Agent de conformité à la loi de 1996 sur la portabilité et la responsabilité de l'assurance maladie (HIPAA)
  + Agent de conformité à System and Organization Controls 2 (SOC 2)
  + Agent de conformité au règlement général sur la protection des données (RGPD)

En élargissant judicieusement le nombre d'agents disponibles, cette solution peut fournir des informations de sécurité plus approfondies et plus spécialisées tout en maintenant l'évolutivité dans de grands environnements. AWS Pour plus d'informations sur l'approche de mise en œuvre, le développement d'outils et les considérations relatives à la mise à l'échelle, voir [Informations supplémentaires](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional).

## Outils
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-tools"></a>

**Services AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) est un service d'IA entièrement géré qui met à disposition des modèles de base (FMs) très performants via une API unifiée.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) vous aide à centraliser les journaux de tous vos systèmes et applications, Services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, des AWS Lambda fonctions, des points de terminaison d'invocation HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS Dans ce modèle, il est utilisé pour planifier et orchestrer les flux de travail des agents.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données. Dans ce modèle, il fournit un stockage d'objets pour les artefacts des agents et la gestion des états.

**Autres outils**
+ [CrewAI](https://www.crewai.com/open-source) est un framework open source basé sur Python permettant de créer des systèmes d'IA multi-agents.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [deploy-crewai-agents-terraform](https://github.com/aws-samples/deploy-crewai-agents-terraform.git)référentiel.

## Bonnes pratiques
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-best-practices"></a>
+ Mettez en œuvre une gestion d'état appropriée pour Terraform en utilisant un backend Amazon S3 verrouillé par Amazon DynamoDB. Pour plus d'informations, consultez les [meilleures pratiques du backend](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/backend.html) dans *Meilleures pratiques d'utilisation du fournisseur Terraform AWS *.
+ Utilisez les espaces de travail pour séparer les environnements de développement, de préparation et de production.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.
+ Activez la journalisation et la surveillance détaillées via CloudWatch les journaux.
+ Implémentez des mécanismes de nouvelle tentative et de gestion des erreurs pour les opérations des agents.

## Épopées
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-epics"></a>

### Déployer le framework CrewAI
<a name="deploy-crewai-framework"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt de ce modèle sur votre machine locale, exécutez la commande suivante :<pre>git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git"<br />cd deploy-crewai-agents-terraform</pre> | DevOps ingénieur | 
| Modifiez les variables d'environnement. | Pour modifier les variables d'environnement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingénieur | 
| Créez l'infrastructure. | Pour créer l'infrastructure, exécutez les commandes suivantes :<pre>cd terraform</pre><pre>terraform init</pre><pre>terraform plan</pre>Passez en revue attentivement le plan d'exécution. Si les modifications prévues sont acceptables, exécutez la commande suivante :<pre>terraform apply --auto-approve</pre> | DevOps ingénieur | 

### Accédez aux agents CrewAI
<a name="access-crewai-agents"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez aux agents. | Les agents de l'équipe d'audit et de reporting de la sécurité de l' AWS infrastructure sont déployés en tant que fonction Lambda. Pour accéder aux agents, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingénieur | 
| (Facultatif) Configurez l'exécution manuelle des agents. | Les agents sont configurés pour fonctionner automatiquement selon un calendrier quotidien (minuit UTC). Toutefois, vous pouvez les déclencher manuellement en procédant comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Pour plus de détails, consultez la section [Tester les fonctions Lambda dans la console dans la documentation](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) Lambda. | DevOps ingénieur | 
| Accédez aux journaux de l'agent pour le débogage. | Les agents CrewAI s'exécutent dans un environnement Lambda avec les autorisations nécessaires pour effectuer des audits de sécurité et stocker des rapports dans Amazon S3. Le résultat est un rapport Markdown qui fournit une analyse complète de la sécurité de votre AWS infrastructure.Pour faciliter le débogage détaillé du comportement de l'agent, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingénieur | 
| Afficher les résultats de l'exécution de l'agent. | Pour afficher les résultats de l'exécution d'un agent, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Les rapports sont stockés avec des noms de fichiers basés sur l'horodatage, comme suit : `security-audit-report-YYYY-MM-DD-HH-MM-SS.md)` | DevOps ingénieur | 
| Surveillez l'exécution des agents. | Pour surveiller l'exécution des agents par le biais de CloudWatch journaux, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingénieur | 
|  Personnalisez le comportement de l'agent. | Pour modifier les agents ou leurs tâches, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)<pre>cd terraform </pre><pre>terraform apply</pre> | DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources créées. | Pour supprimer toute l'infrastructure créée par ce modèle, exécutez la commande suivante :<pre>terraform plan -destroy </pre>La commande suivante supprimera définitivement toutes les ressources créées par ce modèle. La commande demandera une confirmation avant de supprimer des ressources.Révisez attentivement le plan de destruction. Si les suppressions prévues sont acceptables, exécutez la commande suivante :<pre>terraform destroy</pre> | DevOps ingénieur | 

## Résolution des problèmes
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Comportement des agents | Pour plus d'informations sur ce problème, consultez la section [Tester et résoudre les problèmes du comportement des agents](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) dans la documentation Amazon Bedrock. | 
| Problèmes liés au réseau Lambda | Pour plus d'informations sur ces problèmes, consultez la section [Résoudre les problèmes de réseau dans Lambda dans](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) la documentation Lambda. | 
| Autorisations IAM | Pour plus d'informations sur ces problèmes, consultez la section [Résolution des problèmes liés à l'IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) dans la documentation IAM. | 

## Ressources connexes
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-resources"></a>

**AWS Blogs**
+ [Créez des systèmes agentiques avec CrewAI et Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/build-agentic-systems-with-crewai-and-amazon-bedrock/)

**AWS documentation**
+ [Documentation Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+ [Comment fonctionne Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [AWS Framework Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)

**Autres ressources**
+ [Documentation de CrewAI](https://docs.crewai.com/introduction)
+ [Documentation du fournisseur Terraform AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informations supplémentaires
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional"></a>

Cette section contient des informations sur l'approche de mise en œuvre, le développement d'outils et les considérations relatives à la mise à l'échelle liées à la discussion précédente dans [Automation et échelle](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture).

**Méthode de mise en œuvre**

Envisagez l'approche suivante pour ajouter des agents :

1. Configuration de l'agent :
   + Ajoutez de nouvelles définitions d'agent au `config/agents.yaml` fichier.
   + Définissez des antécédents, des objectifs et des outils spécialisés pour chaque agent.
   + Configurez les capacités de mémoire et d'analyse en fonction de la spécialité de l'agent.

1. Orchestration des tâches :
   + Mettez à jour le `config/tasks.yaml` fichier pour inclure les nouvelles tâches spécifiques à l'agent.
   + Créez des dépendances entre les tâches pour garantir un flux d'informations approprié.
   + Mettez en œuvre l'exécution parallèle des tâches, le cas échéant.

**Implémentation technique**

Vous trouverez ci-dessous un ajout au `agents.yaml` fichier pour un agent spécialisé en renseignement sur les menaces proposé :

```
Example new agent configuration in agents.yaml
threat_intelligence_agent:
 name: "Threat Intelligence Specialist"
 role: "Cybersecurity Threat Intelligence Analyst"
 goal: "Correlate AWS security findings with external threat intelligence"
 backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." 
verbose: true 
allow_delegation: true 
tools: 
- "ThreatIntelligenceTool" 
- "AWSResourceAnalyzer"
```

**Développement d'outils**

Avec le framework CrewAI, vous pouvez prendre les mesures suivantes pour améliorer l'efficacité de votre équipe d'audit de sécurité :
+ Créez des outils personnalisés pour les nouveaux agents.
+ Intégrez des outils externes APIs pour le renseignement sur les menaces.
+ Développez des analyseurs spécialisés pour différents Services AWS

**Considérations relatives au dimensionnement**

Lorsque vous étendez votre système d'audit et de reporting de sécurité de l' AWS infrastructure pour gérer des environnements plus vastes ou des audits plus complets, tenez compte des facteurs d'échelle suivants :
+ **Ressources informatiques**
  + Augmentez l'allocation de mémoire Lambda pour gérer des agents supplémentaires.
  + Envisagez de répartir les charges de travail des agents entre plusieurs fonctions Lambda.
+ **Gestion des coûts**
  + Surveillez l'utilisation de l'API Amazon Bedrock à mesure que le nombre d'agents augmente.
  + Mettez en œuvre l'activation sélective des agents en fonction de l'étendue de l'audit.
+ **Efficacité de la collaboration**
  + Optimisez le partage d'informations entre les agents.
  + Implémentez des structures d'agents hiérarchiques pour les environnements complexes.
+ **Amélioration de la base de connaissances**
  + Fournir aux agents des bases de connaissances spécialisées dans leurs domaines.
  + Mettez régulièrement à jour les connaissances des agents avec les nouvelles meilleures pratiques en matière de sécurité.

# Déployer une tâche AWS Glue avec un pipeline AWS CodePipeline CI/CD
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein et Luis Henrique Massao Yamada, Amazon Web Services*

## Résumé
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

Ce modèle montre comment intégrer AWS CodeCommit et AWS CodePipeline à AWS Glue, et comment utiliser AWS Lambda pour lancer des tâches dès qu'un développeur envoie ses modifications dans un référentiel AWS distant. CodeCommit  

Lorsqu'un développeur soumet une modification à un référentiel d'extraction, de transformation et de chargement (ETL) et transmet les modifications à AWS CodeCommit, un nouveau pipeline est invoqué. Le pipeline lance une fonction Lambda qui lance une tâche AWS Glue avec ces modifications. La tâche AWS Glue exécute la tâche ETL.

Cette solution est utile dans les situations où les entreprises, les développeurs et les ingénieurs de données souhaitent lancer des tâches dès que les modifications sont validées et transférées vers les référentiels cibles. Cela permet d'atteindre un niveau supérieur d'automatisation et de reproductibilité, évitant ainsi les erreurs lors du lancement des tâches et du cycle de vie.

## Conditions préalables et limitations
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Git](https://git-scm.com/) installé sur la machine locale
+ [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) installé sur la machine locale
+ [Python](https://www.python.org/) installé sur la machine locale
+ Le code de la section *Pièces jointes*

**Limites**
+ Le pipeline est terminé dès que la tâche AWS Glue est lancée avec succès. Il n'attend pas la fin du travail.
+ Le code fourni dans la pièce jointe est destiné à des fins de démonstration uniquement.

## Architecture
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**Pile technologique cible**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**Architecture cible**

![\[Utiliser Lambda pour lancer une tâche Glue dès qu'un développeur apporte des modifications à un dépôt. CodeCommit\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

Le processus comprend les étapes suivantes :

1. Le développeur ou l'ingénieur de données apporte une modification au code ETL, valide et transmet la modification à AWS CodeCommit.

1. Le push initie le pipeline.

1. Le pipeline lance une fonction Lambda, qui `codecommit:GetFile` appelle le référentiel et télécharge le fichier vers Amazon Simple Storage Service (Amazon S3).

1. La fonction Lambda lance une nouvelle tâche AWS Glue avec le code ETL.

1. La fonction Lambda termine le pipeline.

**Automatisation et mise à l'échelle**

L'exemple de pièce jointe montre comment intégrer AWS Glue à AWS CodePipeline. Il fournit un exemple de référence que vous pouvez personnaliser ou étendre pour votre propre usage. Pour plus de détails, consultez la section *Epics*.

## Outils
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — AWS CodePipeline est un service de [livraison continue](https://aws.amazon.com/devops/continuous-delivery/) entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure.
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/) — AWS CodeCommit est un service de [contrôle de source](https://aws.amazon.com/devops/source-control/) entièrement géré qui héberge des référentiels sécurisés basés sur Git.
+ [AWS Lambda](https://aws.amazon.com/lambda/) — AWS Lambda est un service de calcul sans serveur qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs.
+ [AWS Glue](https://aws.amazon.com/glue) — AWS Glue est un service d'intégration de données sans serveur qui facilite la découverte, la préparation et la combinaison de données à des fins d'analyse, d'apprentissage automatique et de développement d'applications.
+ [Client Git](https://git-scm.com/downloads) : Git fournit des outils d'interface graphique. Vous pouvez également utiliser la ligne de commande ou un outil de bureau pour récupérer les artefacts requis GitHub. 
+ [AWS CDK](https://aws.amazon.com/cdk/) — L'AWS CDK est un framework de développement de logiciels open source qui vous aide à définir les ressources de vos applications cloud à l'aide de langages de programmation familiers.

## Épopées
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### Déployez l'exemple de code
<a name="deploy-the-sample-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configuration de l'AWS CLI. | Configurez l'interface de ligne de commande AWS (AWS CLI) pour cibler et authentifier votre compte AWS actuel. Pour obtenir des instructions, consultez la [documentation de l'AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). | Développeur, DevOps ingénieur | 
| Extrayez les exemples de fichiers de projet. | Extrayez les fichiers de la pièce jointe pour créer un dossier contenant les exemples de fichiers de projet. | Développeur, DevOps ingénieur | 
| Déployez l'exemple de code. | Après avoir extrait les fichiers, exécutez les commandes suivantes depuis l'emplacement d'extraction pour créer un exemple de référence :<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>Après la dernière commande, vous pouvez surveiller l'état du pipeline et de la tâche AWS Glue. | Développeur, DevOps ingénieur | 
| Personnalisez le code. | Personnalisez le code du fichier etl.py en fonction des besoins de votre entreprise. Vous pouvez réviser le code ETL, modifier les étapes du pipeline ou étendre la solution. | Ingénieur de données | 

## Ressources connexes
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [Commencer à utiliser le kit AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [Ajouter des tâches dans AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [Intégrations d'actions source dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [Appelez une fonction AWS Lambda dans un pipeline dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [Programmation avec AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [ CodeCommit GetFile API AWS](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## Pièces jointes
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)

# Déployez du code dans plusieurs régions AWS à l'aide d'AWS CodePipeline CodeCommit, AWS et AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Résumé
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Ce modèle montre comment créer une infrastructure ou une architecture dans plusieurs régions Amazon Web Services (AWS) à l'aide d'AWS CloudFormation. Il inclut l'intégration continue (CI) /le déploiement continu (CD) dans plusieurs régions AWS pour des déploiements plus rapides. ****Les étapes de ce modèle ont été testées pour la création d'une CodePipeline tâche AWS à déployer dans trois régions AWS, par exemple. Vous pouvez modifier le nombre de régions en fonction de votre cas d'utilisation.

## Conditions préalables et limitations
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ 
  + Un CodeBuild rôle au sein d'*AmazonS3 FullAccess* et *CloudWatchFullAccess*de ses politiques. Ces politiques permettent CodeBuild de suivre les événements d'AWS CodeCommit via Amazon CloudWatch et d'utiliser Amazon Simple Storage Service (Amazon S3) comme magasin d'artefacts.
  + Un CloudFormation rôle AWS avec les politiques suivantes, qui permettent à AWS CloudFormation, lors de la phase finale de construction, de créer ou de mettre à jour des fonctions AWS Lambda, de publier ou de consulter les CloudWatch journaux Amazon, et de créer et de mettre à jour des ensembles de modifications. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**Note**  
Deux rôles AWS Identity and Access Management (IAM) pour AWS CodeBuild et AWS CloudFormation dotés de politiques appropriées CodeBuild pour effectuer les tâches de CI consistant à tester, regrouper, empaqueter les artefacts et déployer dans plusieurs régions AWS en parallèle.  Vérifiez les politiques créées par CodePipeline pour vérifier qu' CodeBuild AWS CloudFormation dispose des autorisations appropriées dans les phases CI et CD.

## Architecture
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![\[Une CodePipeline tâche AWS déployée dans trois régions AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


L'architecture multi-régions et le flux de travail de ce modèle comprennent les étapes suivantes.

1. Vous envoyez votre code dans un CodeCommit dépôt.

1. Dès réception d'une mise à jour ou d'une validation du code, CodeCommit invoque un CloudWatch événement qui, à son tour, démarre une CodePipeline tâche.

1. CodePipeline engage le CI géré par CodeBuild. Les tâches suivantes sont effectuées.
   + Test des CloudFormation modèles AWS (facultatif)
   + Packaging des CloudFormation modèles AWS pour chaque région incluse dans le déploiement. Par exemple, ce modèle se déploie en parallèle dans trois régions AWS. Il regroupe CodeBuild donc les CloudFormation modèles AWS dans trois compartiments S3, un dans chaque région spécifiée. Les compartiments S3 sont utilisés uniquement CodeBuild comme référentiels d'artefacts.

1. CodeBuild empaquète les artefacts en tant qu'entrée pour la prochaine phase de déploiement, qui s'exécute en parallèle dans les trois régions AWS. Si vous spécifiez un nombre différent de régions, CodePipeline sera déployé dans ces régions.

## Outils
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Outils**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) CodePipeline est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication continue des modifications apportées à vos logiciels.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) CodeBuild est un service de génération entièrement géré qui compile votre code source, exécute des tests unitaires et produit des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) CodeCommit est un service de contrôle de version hébergé par Amazon Web Services que vous pouvez utiliser pour stocker et gérer des actifs privés (tels que le code source et les fichiers binaires) dans le cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation est un service qui vous aide à modéliser et à configurer vos ressources Amazon Web Services afin que vous puissiez passer moins de temps à gérer ces ressources et plus de temps à vous concentrer sur vos applications exécutées dans AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — AWS Identity and Access Management (IAM) est un service Web qui vous permet de contrôler en toute sécurité l'accès aux ressources AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage pour Internet. Il est conçu pour faciliter l'informatique à l'échelle d'Internet pour les développeurs.

**Code**

L'exemple de code suivant concerne le `BuildSpec.yaml` fichier (phase de construction).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Épopées
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Préparez le code et le CodeCommit référentiel
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Sélectionnez la région AWS principale pour le déploiement. | Connectez-vous à votre compte AWS et choisissez la région principale pour le déploiement. Le CodeCommit dépôt se trouvera dans la région principale. | DevOps | 
| Créez le CodeCommit référentiel. | Créez le CodeCommit référentiel et insérez-y le code requis. Le code inclut généralement les modèles AWS CloudFormation ou AWS SAM, le code Lambda le cas échéant, et les CodeBuild `buildspec.yaml` fichiers en entrée dans AWS. CodePipeline | DevOps | 
| Insérez le code dans le CodeCommit référentiel. | Dans la section *Pièces jointes*, téléchargez le code de cet exemple, puis insérez-y le code requis. En général, le code peut inclure des modèles AWS CloudFormation ou AWS SAM, du code Lambda et les CodeBuild `buildspec.yaml` fichiers en entrée du pipeline. | DevOps | 

### Phase source : création du pipeline
<a name="source-phase-create-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le CodePipeline job. | Sur la CodePipeline console, choisissez **Create pipeline**. | DevOps | 
| Nommez la CodePipeline tâche et choisissez le paramètre du rôle de service. | Entrez un nom pour la tâche et conservez le paramètre de rôle de service par défaut afin de CodePipeline créer le rôle associé aux politiques nécessaires. | DevOps | 
| Spécifiez l'emplacement du magasin d'artefacts. | Sous **Paramètres avancés**, conservez l'option par défaut afin de CodePipeline créer un compartiment S3 à utiliser pour le stockage des artefacts de code. Si vous utilisez plutôt un compartiment S3 existant, celui-ci doit se trouver dans la région principale que vous avez spécifiée dans le premier épisode épique. | DevOps | 
| Spécifiez la clé de chiffrement. | Conservez l'option par **défaut, Default AWS Managed Key**, ou choisissez d'utiliser votre propre clé gérée par le client AWS Key Management Service (AWS KMS). | DevOps | 
| Spécifiez le fournisseur source. | Dans **Source provider**, sélectionnez **AWS CodeCommit**. | DevOps | 
| Spécifiez le référentiel. | Choisissez le CodeCommit dépôt que vous avez créé dans la première épopée. Si vous avez placé le code dans une branche, choisissez-la. | DevOps | 
| Spécifiez la manière dont les modifications de code sont détectées. | Conservez la valeur par défaut, **Amazon CloudWatch Events**, comme déclencheur de modification CodeCommit pour démarrer la CodePipeline tâche. | DevOps | 

### Phase de construction : Configuration du pipeline
<a name="build-phase-configure-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Spécifiez le fournisseur de build. | Pour le fournisseur de build, choisissez **AWS CodeBuild**. | DevOps | 
| Spécifiez la région AWS. | Choisissez la région principale, que vous avez spécifiée dans la première épopée. | DevOps | 

### Phase de construction : création et configuration du projet
<a name="build-phase-create-and-configure-the-project"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Création du projet | Choisissez **Créer un projet**, puis entrez un nom pour le projet. | DevOps | 
| Spécifiez l'image de l'environnement. | Pour cette démonstration de modèle, utilisez l'image CodeBuild gérée par défaut. Vous avez également la possibilité d'utiliser une image Docker personnalisée si vous en avez une. | DevOps | 
| Spécifiez le système d'exploitation. | Choisissez Amazon Linux 2 ou Ubuntu.Le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Spécifiez le rôle du service. | Choisissez le rôle pour lequel vous avez créé le poste CodeBuild avant de commencer à créer le CodePipeline travail. (Voir la section *Conditions préalables*.) | DevOps | 
| Définissez des options supplémentaires. | Pour le **délai d'expiration et le délai** d'**attente, conservez les valeurs par** défaut. Pour le certificat, conservez le paramètre par défaut, sauf si vous souhaitez utiliser un certificat personnalisé. | DevOps | 
| Créez les variables d'environnement. | Pour chaque région AWS dans laquelle vous souhaitez effectuer un déploiement, créez des variables d'environnement en fournissant le nom du compartiment S3 et le nom de la région (par exemple, us-east-1). | DevOps | 
| Indiquez le nom du fichier buildspec, s'il ne s'agit pas de buildspec.yml. | Laissez ce champ vide si le nom du fichier est le nom par défaut,`buildspec.yaml`. Si vous avez renommé le fichier buildspec, entrez le nom ici. Assurez-vous qu'il correspond au nom du fichier qui se trouve dans le CodeCommit référentiel. | DevOps | 
| Spécifiez la journalisation. | Pour consulter les journaux d'Amazon CloudWatch Events, conservez le paramètre par défaut. Vous pouvez également définir n'importe quel nom de groupe ou d'enregistreur spécifique. | DevOps | 

### Ignorer la phase de déploiement
<a name="skip-the-deploy-phase"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ignorez la phase de déploiement et terminez la création du pipeline. | Lorsque vous configurez le pipeline, vous CodePipeline ne pouvez créer qu'une seule étape dans la phase de déploiement. Pour effectuer un déploiement dans plusieurs régions AWS, ignorez cette phase. Une fois le pipeline créé, vous pouvez ajouter plusieurs étapes de phase de déploiement. | DevOps | 

### Phase de déploiement : configurer le pipeline pour le déploiement dans la première région
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez une étape à la phase de déploiement. | Modifiez le pipeline et choisissez **Ajouter une étape** dans la phase de déploiement. Cette première étape concerne la région principale. | DevOps | 
| Indiquez le nom de l'action pour l'étape. | Entrez un nom unique qui reflète la première étape (principale) et la première région. <region>Par exemple, entrez **primary\$1 \$1deploy**. | DevOps | 
| Spécifiez le fournisseur d'actions. | Pour **Action provider**, choisissez AWS CloudFormation. | DevOps | 
| Configurez la région pour la première étape. | Choisissez la première région (principale), la même région où CodePipeline et où vous CodeBuild êtes configurés. Il s'agit de la région principale dans laquelle vous souhaitez déployer la pile. | DevOps | 
| Spécifiez l'artefact d'entrée. | Sélectionnez **BuildArtifact**. Il s'agit du résultat de la phase de construction. | DevOps | 
| Spécifiez l'action à effectuer. | Pour le **mode Action**, choisissez **Create or update a stack (Créer ou mettre à jour une pile**). | DevOps | 
| Entrez un nom pour la CloudFormation pile. |  | DevOps | 
| Spécifiez le modèle pour la première région. | Sélectionnez le nom du package spécifique à la région qui a été empaqueté CodeBuild et déposé dans le compartiment S3 pour la première région (principale). | DevOps | 
| Spécifiez les fonctionnalités. | Des fonctionnalités sont requises si le modèle de pile inclut des ressources IAM ou si vous créez une pile directement à partir d'un modèle contenant des macros. Pour ce modèle, utilisez CAPABILITY\$1IAM, CAPABILITY\$1NAMED\$1IAM, CAPABILITY\$1AUTO\$1EXPAND. | DevOps | 

### Phase de déploiement : configurer le pipeline pour le déploiement dans la deuxième région
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez la deuxième étape à la phase de déploiement. | Pour ajouter une étape pour la deuxième région, modifiez le pipeline et choisissez **Ajouter une étape** dans la phase de déploiement. Important : Le processus de création de la deuxième région est le même que celui de la première région, à l'exception des valeurs suivantes. | DevOps | 
| Indiquez le nom de l'action pour la deuxième étape. | Entrez un nom unique qui reflète la deuxième étape et la deuxième région. | DevOps | 
| Configurez la région pour la deuxième étape. | Choisissez la deuxième région dans laquelle vous souhaitez déployer la pile. | DevOps | 
| Spécifiez le modèle pour la deuxième région. | Sélectionnez le nom du package spécifique à la région qui a été empaqueté CodeBuild et déposé dans le compartiment S3 pour la deuxième région. | DevOps | 

### Phase de déploiement : configurer le pipeline pour le déploiement dans la troisième région
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez la troisième étape à la phase de déploiement. | Pour ajouter une étape pour la troisième région, modifiez le pipeline et choisissez **Ajouter une étape** dans la phase de déploiement. Important : Le processus de création de la deuxième région est identique à celui des deux régions précédentes, à l'exception des valeurs suivantes. | DevOps | 
| Indiquez le nom de l'action pour la troisième étape. | Entrez un nom unique qui reflète la troisième étape et la troisième région. | DevOps | 
| Configurez la région pour la troisième étape. | Choisissez la troisième région dans laquelle vous souhaitez déployer la pile. | DevOps | 
| Spécifiez le modèle pour la troisième région. | Sélectionnez le nom du package spécifique à la région qui a été empaqueté CodeBuild et déposé dans le compartiment S3 pour la troisième région. | DevOps | 

### Nettoyez le déploiement
<a name="clean-up-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources AWS. | Pour nettoyer le déploiement, supprimez les CloudFormation piles dans chaque région. Supprimez ensuite les CodePipeline ressources CodeCommit CodeBuild, et de la région principale. | DevOps | 

## Ressources connexes
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [Qu'est-ce qu'AWS CodePipeline ?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Modèle d'application sans serveur AWS](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Référence de structure d' CloudFormation architecture AWS pour AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Pièces jointes
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)

# Déployez des charges de travail à partir de DevOps pipelines Azure vers des clusters Amazon EKS privés
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Ranasiddappa, Amazon Web Services*

## Résumé
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Ce modèle montre comment implémenter l'intégration continue et la livraison continue (CI/CD) à partir de DevOps pipelines Azure vers des clusters privés Amazon Elastic Kubernetes Service (Amazon EKS). Il répond à un défi critique auquel sont confrontées les entreprises qui améliorent leur niveau de sécurité en optant pour des points de terminaison de serveurs d'API privés pour leurs clusters Amazon EKS.

Un point de terminaison public expose le serveur d'API Kubernetes directement à Internet, ce qui crée une plus grande surface d'attaque que des acteurs malveillants pourraient potentiellement cibler. En passant à un point de terminaison privé, l'accès au plan de contrôle du cluster est limité au cloud privé virtuel (VPC) du client.

Bien que la transition d'un cluster Amazon EKS vers un point de terminaison d'API privé améliore considérablement la sécurité, elle pose des problèmes de connectivité pour les CI/CD plateformes externes telles qu'Azure DevOps. Le point de terminaison privé n'est accessible que depuis le VPC ou les réseaux pairs du cluster. Par conséquent, les DevOps agents Azure standard hébergés par Microsoft, opérant en dehors du réseau AWS privé, ne peuvent pas accéder directement au serveur d'API Kubernetes. Cela interrompt les flux de travail de déploiement classiques qui reposent sur des outils tels que kubectl ou Helm exécutés sur ces agents, car ils ne parviennent pas à établir de connexion avec le cluster.

Pour surmonter ce problème, ce modèle illustre une approche efficace en utilisant des DevOps agents Azure auto-hébergés au sein de clusters Amazon EKS privés. Cette solution offre une optimisation des coûts, une efficacité opérationnelle et une évolutivité supérieures tout en préservant les exigences de sécurité. Cette approche profite particulièrement aux entreprises qui cherchent à rationaliser leurs DevOps processus multicloud sans compromettre les performances ou la sécurité.

## Conditions préalables et limitations
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Command Line Interface [(AWS CLI) version 2.13.17 ou ultérieure, installée.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Kubectl version 1.25.1 ou ultérieure, installée.](https://kubernetes.io/docs/tasks/tools/)
+ [Un cluster Amazon EKS privé version 1.24 ou ultérieure [créé](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), avec des autorisations pour créer des espaces de noms, des secrets et des déploiements.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Nœuds de travail dans un cluster Amazon EKS dotés d'une connectivité sortante à Internet afin que l' DevOps agent Azure qui s'exécute sur ces nœuds puisse se connecter au pool d' DevOps agents Azure.
+ GitHub compte [créé](https://github.com/signup).
+ Un DevOps projet Azure ayant accès à la configuration des connexions de service, qui sont des connexions authentifiées entre Azure Pipelines et des services externes ou distants, [a été créé](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account).
+ La AWS Toolkit pour Azure DevOps version 1.15 ou ultérieure installée pour le DevOps projet Azure décrit au point précédent. Pour les instructions d'installation, reportez-vous [AWS Toolkit pour Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools)à Visual Studio Marketplace.

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Ce modèle crée ce qui suit :
+ Référentiel **Amazon ECR : le référentiel** Amazon Elastic Container Registry (Amazon ECR) stocke l'image Docker avec l' DevOps agent Azure et l'exemple d'application déployé.
+ **Pool d' DevOps agents Azure** : un pool d'agents DevOps auto-hébergé par Azure enregistre l'agent exécuté sur le cluster Amazon EKS privé.
+ Rôle **IAM : rôle** Gestion des identités et des accès AWS (IAM) permettant à la connexion au service Azure de fournir l'accès requis à l'agent qui s'exécute sur un cluster Amazon EKS privé.
+ Connexion au ** DevOps service Azure : connexion** au service dans un DevOps compte Azure pour utiliser le rôle IAM qui fournit l'accès requis pour que les tâches du pipeline puissent accéder Services AWS.

Le schéma suivant montre l'architecture du déploiement d'un DevOps agent Azure auto-hébergé sur un cluster Amazon EKS privé et du déploiement d'un exemple d'application sur le même cluster.

![\[Déploiement d'un DevOps agent Azure auto-hébergé et d'un exemple d'application sur un cluster Amazon EKS privé.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


Le schéma suivant illustre le flux de travail suivant :

1. Déployez un DevOps agent Azure auto-hébergé en tant que déploiement au sein d'un cluster Amazon EKS.

1. Un DevOps agent Azure se connecte au pool d'agents sur un DevOps compte Azure à l'aide d'un jeton d'accès personnel (PAT) pour l'authentification.

1. Azure Pipelines configure un pipeline à déployer en utilisant le code d'un GitHub référentiel.

1. Le pipeline s'exécute sur l'agent à partir du pool d'agents configuré dans la configuration du pipeline. L' DevOps agent Azure obtient les informations relatives aux tâches du pipeline en interrogeant constamment le DevOps compte Azure.

1. L' DevOps agent Azure crée une image Docker dans le cadre de la tâche de pipeline et envoie l'image vers le référentiel Amazon ECR.

1. L' DevOps agent Azure déploie l'exemple d'application sur un cluster Amazon EKS privé dans un espace de noms appelé. `webapp` 

## Outils
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Outils**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.

**Autres outils**
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.

**Référentiel de code**
+ Le code de ce modèle est disponible dans le référentiel GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Bonnes pratiques
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Pour Amazon EKS, consultez le [guide des meilleures pratiques Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Création d'une connexion de service
<a name="create-a-service-connection"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Trouvez le GUID de DevOps l'organisation Azure. | Connectez-vous à votre DevOps compte Azure, puis utilisez l'URL suivante pour trouver le GUID de l'organisation : `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` dans l'URL, remplacez-le par votre identifiant `{DevOps_org_ID}` d' DevOps organisation Azure. | AWS DevOps | 
| Configurez un IdP dans le. Compte AWS | Pour configurer un fournisseur d'identité (IdP) dans le cadre Compte AWS d'une connexion au service Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Pour plus de détails, consultez [Comment créer une fédération AWS depuis Azure à DevOps l'aide d'OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Créez une politique IAM dans le Compte AWS. | Pour créer une politique IAM afin de fournir les autorisations requises au rôle IAM utilisé par le DevOps pipeline Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Créez un rôle IAM dans le Compte AWS. | Pour configurer un rôle IAM dans Compte AWS la connexion au service Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>Dans la politique, fournissez vos informations pour les espaces réservés suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Créez une connexion de service dans le DevOps compte Azure. | Pour configurer une connexion au service Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Pour plus de détails, consultez la section [Créer une connexion de service](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) dans la documentation Microsoft. | AWS DevOps | 
| Ajoutez le rôle IAM au fichier de configuration Amazon EKS. | Le rôle IAM doit disposer des autorisations nécessaires pour effectuer les opérations requises sur le cluster Amazon EKS. Comme il s'agit d'un rôle de pipeline, le rôle IAM doit être capable de gérer presque tous les types de ressources du cluster. Par conséquent, l'autorisation de `system:masters` groupe est appropriée pour ce rôle.Pour ajouter la configuration requise à Kubernetes, utilisez le code `aws-auth ConfigMap` suivant :<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>`{account_id}`Remplacez-le par votre Compte AWS identifiant.Pour plus d'informations, consultez [Comment Amazon EKS fonctionne avec IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) dans la documentation Amazon EKS. | AWS DevOps | 

### Création d'un pool d'agents
<a name="create-an-agent-pool"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un pool d'agents auto-hébergé. | Pour configurer un pool d'agents auto-hébergé dans le DevOps compte Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Pour plus de détails, consultez la section [Création et gestion de pools d'agents](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) dans la documentation Microsoft. |  | 

### Créez une image d' DevOps agent Azure et envoyez-la vers Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Les images Docker utilisées pour déployer l' DevOps agent Azure et l'exemple d'application (`webapp`) sur le cluster Amazon EKS privé doivent être stockées dans un référentiel Amazon ECR. Pour créer un référentiel Amazon ECR, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Pour plus de détails, consultez la section [Création d'un référentiel privé Amazon ECR pour stocker des images](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. | AWS DevOps | 
| Créez un Dockerfile pour créer l'agent Azure DevOps . | Créez un Dockerfile pour créer l'image Docker sur laquelle l'agent Azure DevOps est installé. Stockez le contenu suivant dans un fichier nommé `Dockerfile` :<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Créez un script pour l' DevOps agent Azure. | Pour créer le `start.sh` script, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Créez une image Docker avec l' DevOps agent Azure.  | Pour créer une image Docker afin d'installer l' DevOps agent Azure, utilisez le Dockerfile que vous avez créé précédemment pour créer l'image. Dans le répertoire où le Dockerfile est stocké, exécutez les commandes suivantes :<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>Remplacez `aws_account_id` et `region` par votre Compte AWS identifiant et Région AWS. | AWS DevOps | 

### Déployer l' DevOps agent Azure sur un cluster Amazon EKS privé
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Générez un jeton d'accès personnel Azure. | L'agent exécuté sur le cluster privé Amazon EKS a besoin d'un jeton d'accès personnel (PAT) afin de pouvoir s'authentifier auprès du DevOps compte Azure. Pour générer un PAT, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>Pour plus de détails, voir [Enregistrer un agent à l'aide d'un jeton d'accès personnel (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) dans la documentation Microsoft. | AWS DevOps | 
| Utilisez le fichier manifeste Kubernetes pour le déploiement de l'agent. | Pour déployer l' DevOps agent Azure sur le cluster privé Amazon EKS, copiez le fichier manifeste suivant et stockez-le sous le nom `agent-deployment.yaml` : <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>Remplacez `aws_account_id` et `<Azure account URL>` par votre Compte AWS identifiant et l'URL de votre DevOps compte Azure. | AWS DevOps | 
| Déployez l'agent sur le cluster Amazon EKS privé. | Pour déployer l'agent Azure Devops sur le cluster privé Amazon EKS, utilisez la commande suivante :<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Vérifiez que l'agent est en cours d'exécution. | Pour vérifier que l' DevOps agent Azure est en cours d'exécution, utilisez la commande suivante :<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>Le résultat attendu doit être similaire à ce qui suit :<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>Assurez-vous que la `READY ` colonne s'affiche`1/1`. | AWS DevOps | 
| Vérifiez que l'agent est enregistré dans le pool d' DevOps agents Azure. | Pour vérifier que l'agent est déployé sur le cluster privé Amazon EKS et qu'il est enregistré dans le pool d'agents`eks-agent`, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Vous devriez voir un agent répertorié avec un **statut** **en ligne**, et le nom de l'agent doit commencer par **azure-pipelines-agent-eks-\$1**. | AWS DevOps | 

### Déployer un exemple d'application
<a name="deploy-sample-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez le référentiel d'exemples d'applications à votre GitHub compte.  | Ajoutez le référentiel AWS d'échantillons suivant à votre GitHub compte :[https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Créez un pipeline. | Pour créer un pipeline dans votre DevOps compte Azure, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Vérifiez que l'exemple d'application a été déployé. | Une fois le pipeline terminé, vérifiez le déploiement réussi de l'exemple d'application en vérifiant à la fois le référentiel Amazon ECR et le cluster Amazon EKS.Pour vérifier les artefacts dans le référentiel Amazon ECR, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Par exemple : `20250501.1-image` et `20250501.1-helm`.Pour vérifier le déploiement sur le cluster privé Amazon EKS dans l'espace de noms`webapp`, utilisez la commande suivante :<pre>kubectl get deploy -n webapp </pre>La sortie attendue est la suivante :<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>Remarque : s'il s'agit de votre première exécution de pipeline, vous devrez peut-être autoriser la connexion au service et le pool d'agents. Recherchez les demandes d'autorisation dans l'interface du DevOps pipeline Azure et approuvez-les pour continuer. | AWS DevOps | 

## Résolution des problèmes
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le pipeline échoue lorsque le nom du référentiel Amazon ECR ne correspond pas `webapp` | L'exemple d'application s'attend à ce que le nom du référentiel Amazon ECR corresponde au `projectName: webapp` paramètre indiqué dans`azure_pipeline.yml`.Pour résoudre ce problème, renommez votre référentiel Amazon ECR en ou mettez à jour `webapp` ce qui suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| Erreur : le cluster Kubernetes est inaccessible : le serveur a demandé au client de fournir des informations d'identification | Si vous rencontrez cette erreur à l'étape « Pull and Deploy Helm Chart » de votre pipeline Azure, la cause première provient généralement d'une configuration incorrecte des rôles IAM dans celui de `aws-auth ConfigMap` votre cluster Amazon EKS.Pour résoudre ce problème, vérifiez les points suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## Ressources connexes
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blogs**
+ [Comment créer une fédération AWS depuis Azure à l' DevOps aide d'OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Services AWS documentation**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Documentation Microsoft**
+ [Qu'est-ce qu'Azure DevOps ?](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [Qu'est-ce qu'Azure Pipelines ?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

# Exécutez des requêtes SQL Amazon Redshift à l'aide de Terraform
<a name="execute-redshift-sql-queries-using-terraform"></a>

*Sylvia Qi et Aditya Ambati, Amazon Web Services*

## Résumé
<a name="execute-redshift-sql-queries-using-terraform-summary"></a>

L'utilisation de l'infrastructure en tant que code (IaC) pour le déploiement et la gestion d'Amazon Redshift est une pratique courante au sein de l'entreprise. DevOps IaC facilite le déploiement et la configuration de diverses ressources Amazon Redshift, telles que les clusters, les instantanés et les groupes de paramètres. Cependant, IaC ne s'étend pas à la gestion des ressources de base de données telles que les tables, les schémas, les vues et les procédures stockées. Ces éléments de base de données sont gérés par le biais de requêtes SQL et ne sont pas directement pris en charge par les outils IaC. Bien qu'il existe des solutions et des outils pour gérer ces ressources, vous préférerez peut-être ne pas ajouter d'outils supplémentaires à votre infrastructure technologique.

Ce modèle décrit une méthodologie qui utilise Terraform pour déployer les ressources de base de données Amazon Redshift, notamment les tables, les schémas, les vues et les procédures stockées. Le modèle distingue deux types de requêtes SQL :
+ **Requêtes non répétables** : ces requêtes sont exécutées une seule fois lors du déploiement initial d'Amazon Redshift afin d'établir les composants essentiels de la base de données. 
+ **Requêtes répétables** : ces requêtes sont immuables et peuvent être réexécutées sans affecter la base de données. La solution utilise Terraform pour surveiller les modifications des requêtes répétables et les appliquer en conséquence.

Pour plus de détails, consultez la section Présentation *de la solution* dans [Informations supplémentaires](#execute-redshift-sql-queries-using-terraform-additional).

## Conditions préalables et limitations
<a name="execute-redshift-sql-queries-using-terraform-prereqs"></a>

**Conditions préalables**

Vous devez avoir un système actif Compte AWS et installer ce qui suit sur votre machine de déploiement :
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS CLI)
+ Un [AWS CLI profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) configuré avec les autorisations Amazon Redshift read/write 
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) version 1.6.2 ou ultérieure
+ [Python 3](https://www.python.org/downloads/)
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)

**Limites**
+ Cette solution prend en charge une seule base de données Amazon Redshift car Terraform n'autorise la création d'une seule base de données lors de la création du cluster.
+ Ce modèle n'inclut pas de tests pour valider les modifications apportées aux requêtes répétables avant de les appliquer. Nous vous recommandons d'intégrer de tels tests pour une fiabilité accrue.
+ Pour illustrer la solution, ce modèle fournit un exemple de `redshift.tf` fichier qui utilise un fichier d'état Terraform local. Toutefois, pour les environnements de production, nous vous recommandons vivement d'utiliser un fichier d'état distant doté d'un mécanisme de verrouillage pour améliorer la stabilité et la collaboration.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**

Cette solution est développée et testée sur le [correctif 179 d'Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-179).

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [amazon-redshift-sql-deploy-terraform](https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform).

## Architecture
<a name="execute-redshift-sql-queries-using-terraform-architecture"></a>

Le schéma suivant illustre comment Terraform gère les ressources de base de données Amazon Redshift en gérant à la fois les requêtes SQL non répétables et répétables.

![\[Processus permettant à Terraform de gérer les ressources de base de données Amazon Redshift à l'aide de requêtes SQL.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/0f4467ac-761b-4b6b-a32f-e18a2ca2245d/images/3b6ff9e8-e3d1-48ed-9fa1-4b14f7d3d65b.png)


Le schéma montre les étapes suivantes :

1. Terraform applique des requêtes SQL non répétables lors du déploiement initial du cluster Amazon Redshift.

1. Le développeur valide les modifications apportées aux requêtes SQL répétables.

1. Terraform surveille les modifications apportées aux requêtes SQL répétables.

1. Terraform applique des requêtes SQL répétables à la base de données Amazon Redshift.

La solution fournie par ce modèle est basée sur le [module Terraform pour Amazon Redshift](https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/latest). Le module Terraform fournit un cluster et une base de données Amazon Redshift. Pour améliorer le module, nous avons utilisé `terraform_data` des ressources qui invoquent un script Python personnalisé pour exécuter des requêtes SQL à l'aide de l'opération d'API Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. Par conséquent, le module peut effectuer les opérations suivantes :
+ Déployez autant de ressources de base de données que vous le souhaitez à l'aide de requêtes SQL après le provisionnement de la base de données.
+ Surveillez en permanence les modifications apportées aux requêtes SQL répétables et appliquez ces modifications à l'aide de Terraform.

Pour plus de détails, consultez la section Présentation *de la solution* dans [Informations supplémentaires](#execute-redshift-sql-queries-using-terraform-additional).

## Outils
<a name="execute-redshift-sql-queries-using-terraform-tools"></a>

**Services AWS**
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) est un service d'entrepôt de données entièrement géré à l'échelle du pétaoctet situé dans le. AWS Cloud

**Autres outils**
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.
+ [Python](https://www.python.org/) est un langage de programmation polyvalent utilisé dans ce modèle pour exécuter des requêtes SQL. 

## Bonnes pratiques
<a name="execute-redshift-sql-queries-using-terraform-best-practices"></a>
+ [Bonnes pratiques relatives à Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)
+ [Utilisation de l'API Amazon Redshift Data pour interagir avec les clusters Amazon Redshift](https://aws.amazon.com/blogs/big-data/using-the-amazon-redshift-data-api-to-interact-with-amazon-redshift-clusters/)

## Épopées
<a name="execute-redshift-sql-queries-using-terraform-epics"></a>

### Déployez la solution à l'aide de Terraform
<a name="deploy-the-solution-using-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| **Clonez le dépôt.** | Pour cloner le référentiel Git contenant le code Terraform pour le provisionnement d'un cluster Amazon Redshift, utilisez la commande suivante.<pre>git clone https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform.git</pre> | DevOps ingénieur | 
| **Mettez à jour les variables Terraform.** | Pour personnaliser le déploiement du cluster Amazon Redshift en fonction de vos besoins spécifiques, mettez à jour les paramètres suivants dans le `terraform.tfvars` fichier.<pre>region                    = "<AWS_REGION>"<br />cluster_identifier        = "<REDSHIFT_CLUSTER_IDENTIFIER>"<br />node_type                 = "<REDSHIFT_NODE_TYPE>"<br />number_of_nodes           = "<REDSHIFT_NODE_COUNT>"<br />database_name             = "<REDSHIFT_DB_NAME>"<br />subnet_ids                = "<REDSHIFT_SUBNET_IDS>"<br />vpc_security_group_ids    = "<REDSHIFT_SECURITY_GROUP_IDS>"<br />run_nonrepeatable_queries = true<br />run_repeatable_queries    = true<br />sql_path_bootstrap        = "<BOOTSTRAP_SQLS_PATH>"<br />sql_path_nonrepeatable    = "<NON-REPEATABLE_SQLS_PATH>"<br />sql_path_repeatable       = "<REPEATABLE_SQLS_PATH>"<br />sql_path_finalize         = "<FINALIZE_SQLS_PATH>"<br />create_random_password    = false<br />master_username           = "<REDSHIFT_MASTER_USERNAME>"</pre> | DevOps ingénieur | 
| Déployez les ressources à l'aide de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DevOps ingénieur | 
| (Facultatif) Exécutez des requêtes SQL supplémentaires. | Le référentiel d'exemples fournit plusieurs requêtes SQL à des fins de démonstration. Pour exécuter vos propres requêtes SQL, ajoutez-les dans les dossiers suivants :`/bootstrap` `/nonrepeatable` `/repeatable` `/finalize` |  | 

### Surveiller l'exécution des instructions SQL
<a name="monitor-the-execution-of-sql-statements"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Surveillez le déploiement des instructions SQL. | Vous pouvez surveiller les résultats des exécutions SQL sur un cluster Amazon Redshift. Pour obtenir des exemples de résultats illustrant un échec ou une exécution réussie de SQL, reportez-vous à la section *Exemples d'instructions SQL* dans [Informations supplémentaires](#execute-redshift-sql-queries-using-terraform-additional).  | DBA, ingénieur DevOps  | 
| nettoyer les ressources. | Pour supprimer toutes les ressources déployées par Terraform, exécutez la commande suivante.<pre>terraform destroy</pre> | DevOps ingénieur | 

### Valider les résultats
<a name="validate-the-results"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez les données dans le cluster Amazon Redshift. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | ADMINISTRATEUR DE BASES DE DONNÉES, AWS DevOps | 

## Ressources connexes
<a name="execute-redshift-sql-queries-using-terraform-resources"></a>

**AWS documentation**
+ [Clusters provisionnés par Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)
+ [Résolution des problèmes liés à l'API Amazon Redshift Data](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-troubleshooting.html)

**Autres ressources**
+ [Commande : appliquer](https://developer.hashicorp.com/terraform/cli/commands/apply) (documentation Terraform)

## Informations supplémentaires
<a name="execute-redshift-sql-queries-using-terraform-additional"></a>

**Présentation de la solution**

Pour utiliser la solution, vous devez organiser vos requêtes SQL Amazon Redshift de manière spécifique. Toutes les requêtes SQL doivent être stockées dans des fichiers dotés d'une `.sql` extension.

Dans l'exemple de code fourni avec ce modèle, les requêtes SQL sont organisées dans la structure de dossiers suivante. Vous pouvez modifier le code (`sql-queries.tf`et`sql-queries.py`) pour qu'il fonctionne avec n'importe quelle structure adaptée à votre cas d'utilisation unique.

```
/bootstrap
     |- Any # of files
     |- Any # of sub-folders
/nonrepeatable
     |- Any # of files
     |- Any # of sub-folders
/repeatable
     /udf
          |- Any # of files
          |- Any # of sub-folders
     /table
          |- Any # of files
          |- Any # of sub-folders
     /view
          |- Any # of files
          |- Any # of sub-folders
     /stored-procedure
          |- Any # of files
          |- Any # of sub-folders
/finalize
     |- Any # of files
     |- Any # of sub-folders
```

Compte tenu de la structure de dossiers précédente, lors du déploiement du cluster Amazon Redshift, Terraform exécute les requêtes dans l'ordre suivant :

1. `/bootstrap`

1. `/nonrepeatable`

1. `/repeatable`

1. `/finalize`

Le `/repeatable` dossier contient quatre sous-dossiers :`/udf`, `/table``/view`, et`/stored-procedure`. Ces sous-dossiers indiquent l'ordre dans lequel Terraform exécute les requêtes SQL.

Le script Python qui exécute les requêtes SQL est`sql-queries.py`. Tout d'abord, le script lit tous les fichiers et sous-dossiers d'un répertoire source spécifique, par exemple le `sql_path_bootstrap` paramètre. Le script exécute ensuite les requêtes en appelant l'opération d'API Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. Un fichier contient peut-être une ou plusieurs requêtes SQL. L'extrait de code suivant montre la fonction Python qui exécute les instructions SQL stockées dans un fichier sur un cluster Amazon Redshift.

```
def execute_sql_statement(filename, cluster_id, db_name, secret_arn, aws_region):
    """Execute SQL statements in a file"""
    redshift_client = boto3.client(
        'redshift-data', region_name=aws_region)
    contents = get_contents_from_file(filename),
    response = redshift_client.execute_statement(
        Sql=contents[0],
        ClusterIdentifier=cluster_id,
        Database=db_name,
        WithEvent=True,
        StatementName=filename,
        SecretArn=secret_arn
    )
    ...
```

Le script Terraform `sql-queries.tf` crée les ressources [terraform\$1data](https://developer.hashicorp.com/terraform/language/resources/terraform-data) qui appellent le script. `sql-queries.py` Il existe une `terraform_data` ressource pour chacun des quatre dossiers : `/bootstrap``/nonrepeatable`,`/repeatable`, et`/finalize`. L'extrait de code suivant montre la `terraform_data` ressource qui exécute les requêtes SQL dans le `/bootstrap` dossier.

```
locals {
  program               = "${path.module}/sql-queries.py"
  redshift_cluster_name = try(aws_redshift_cluster.this[0].id, null)
}

resource "terraform_data" "run_bootstrap_queries" {
  count      = var.create && var.run_nonrepeatable_queries && (var.sql_path_bootstrap != "") && (var.snapshot_identifier == null) ? 1 : 0
  depends_on = [aws_redshift_cluster.this[0]]

  provisioner "local-exec" {
    command = "python3 ${local.program} ${var.sql_path_bootstrap} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn} ${local.aws_region}"
  }
}
```

Vous pouvez contrôler l'exécution de ces requêtes à l'aide des variables suivantes. Si vous ne souhaitez pas exécuter de requêtes dans `sql_path_bootstrap``sql_path_nonrepeatable`, `sql_path_repeatable``sql_path_finalize`, ou définir leurs valeurs sur`""`.

```
  run_nonrepeatable_queries = true
  run_repeatable_queries    = true
  sql_path_bootstrap        = "src/redshift/bootstrap"
  sql_path_nonrepeatable    = "src/redshift/nonrepeatable"
  sql_path_repeatable       = "src/redshift/repeatable"
  sql_path_finalize         = "src/redshift/finalize"
```

Lorsque vous exécutez`terraform apply`, Terraform prend en compte la `terraform_data` ressource ajoutée une fois le script terminé, quels que soient les résultats du script. Si certaines requêtes SQL ont échoué et que vous souhaitez les exécuter à nouveau, vous pouvez supprimer manuellement la ressource de l'état Terraform et l'exécuter à nouveau. `terraform apply` Par exemple, la commande suivante supprime la `run_bootstrap_queries` ressource de l'état Terraform.

`terraform state rm module.redshift.terraform_data.run_bootstrap_queries[0]`

L'exemple de code suivant montre comment la `run_repeatable_queries` ressource surveille les modifications dans le `repeatable` dossier à l'aide du [hachage sha256](https://developer.hashicorp.com/terraform/language/functions/sha256). Si un fichier du dossier est mis à jour, Terraform marque l'ensemble du répertoire pour une mise à jour. Ensuite, Terraform exécute à nouveau les requêtes dans le répertoire lors de la suivante. `terraform apply`

```
resource "terraform_data" "run_repeatable_queries" {
  count      = var.create_redshift && var.run_repeatable_queries && (var.sql_path_repeatable != "") ? 1 : 0
  depends_on = [terraform_data.run_nonrepeatable_queries]

  # Continuously monitor and apply changes in the repeatable folder
  triggers_replace = {
    dir_sha256 = sha256(join("", [for f in fileset("${var.sql_path_repeatable}", "**") : filesha256("${var.sql_path_repeatable}/${f}")]))
  }

  provisioner "local-exec" {
    command = "python3 ${local.sql_queries} ${var.sql_path_repeatable} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn}"
  }
}
```

Pour affiner le code, vous pouvez implémenter un mécanisme permettant de détecter et d'appliquer des modifications uniquement aux fichiers qui ont été mis à jour dans le `repeatable` dossier, plutôt que d'appliquer les modifications à tous les fichiers sans distinction.

**Exemples d'instructions SQL**

La sortie suivante montre un échec de l'exécution de SQL, ainsi qu'un message d'erreur.

```
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/nonrepeatable testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): src/redshift/nonrepeatable/table/admin/admin.application_family.sql
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Status: FAILED
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): SQL execution failed.
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Error message: ERROR: syntax error at or near ")"
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec):   Position: 244
module.redshift.terraform_data.run_nonrepeatable_queries[0]: Creation complete after 3s [id=ee50ba6c-11ae-5b64-7e2f-86fd8caa8b76]
```

Le résultat suivant montre une exécution SQL réussie.

```
module.redshift.terraform_data.run_bootstrap_queries[0]: Provisioning with 'local-exec'...
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/bootstrap testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): src/redshift/bootstrap/db.sql
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Status: FINISHED
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): SQL execution successful.
module.redshift.terraform_data.run_bootstrap_queries[0]: Creation complete after 2s [id=d565ef6d-be86-8afd-8e90-111e5ea4a1be]
```

# Exportez les rapports AWS Backup de l'ensemble d'une organisation dans AWS Organizations sous forme de fichier CSV
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file"></a>

*Aromal Raj Jayarajan et Purushotham GK, Amazon Web Services*

## Résumé
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-summary"></a>

Ce modèle montre comment exporter les rapports de tâches AWS Backup provenant de l'ensemble d'une organisation dans AWS Organizations sous forme de fichier CSV. La solution utilise AWS Lambda et Amazon EventBridge pour classer les rapports de tâches AWS Backup en fonction de leur statut, ce qui peut faciliter la configuration d'automatisations basées sur le statut.

AWS Backup aide les entreprises à gérer et à automatiser de manière centralisée la protection des données sur l'ensemble des services AWS, dans le cloud et sur site. Toutefois, pour les tâches AWS Backup configurées au sein d'AWS Organizations, les rapports consolidés ne sont disponibles que dans l'AWS Management Console du compte de gestion de chaque organisation. Le fait de transférer ces rapports en dehors du compte de gestion peut réduire les efforts nécessaires à l'audit et élargir le champ des automatisations, des notifications et des alertes.

## Conditions préalables et limitations
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-prereqs"></a>

**Prérequis**
+ Un compte AWS actif
+ Une [organisation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html) active au sein d'AWS Organizations qui inclut au moins un compte de gestion et un compte de membre
+ AWS Backup configuré au niveau de l'organisation dans AWS Organizations (pour plus d'informations, consultez [Automatiser la sauvegarde centralisée à grande échelle sur l'ensemble des services AWS à l'aide d'AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) sur le blog AWS)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installé et configuré sur votre machine locale

**Limites**

La solution fournie dans ce modèle identifie les ressources AWS configurées uniquement pour les tâches AWS Backup. Le rapport ne permet pas d'identifier les ressources AWS qui ne sont pas configurées pour la sauvegarde via AWS Backup.

## Architecture
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-architecture"></a>

**Pile technologique cible**
+ AWS Backup
+ AWS CloudFormation
+ Amazon EventBridge
+ AWS Lambda
+ AWS Security Token Service (AWS STS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Identity and Access Management (IAM)

**Architecture cible**

Le schéma suivant montre un exemple de flux de travail pour l'exportation des rapports de travail AWS Backup provenant de l'ensemble d'une organisation dans AWS Organizations sous forme de fichier CSV.

![\[Utilisation EventBridge de Lambda, AWS STS et IAM pour exporter les rapports de tâches AWS Backup provenant de l'ensemble d'une organisation au format CSV.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/74955aad-cc6d-488b-aa34-ae43f50fec60/images/5c39c79f-e731-4ad0-b404-51ebe0976420.png)


Le schéma suivant illustre le flux de travail suivant :

1. Une règle d' EventBridge événement planifié invoque une fonction Lambda dans le compte AWS du membre (de reporting).

1. La fonction Lambda utilise ensuite AWS STS pour assumer un rôle IAM disposant des autorisations requises pour se connecter au compte de gestion.

1. La fonction Lambda effectue ensuite les opérations suivantes :
   + Demande le rapport consolidé sur les tâches AWS Backup au service AWS Backup
   + Catégorise les résultats en fonction du statut de la tâche AWS Backup
   + Convertit la réponse en fichier CSV
   + Télécharge les résultats dans un compartiment Amazon S3 du compte de reporting, dans des dossiers étiquetés en fonction de leur date de création.

## Outils
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-tools"></a>

**Outils**
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) est un service entièrement géré qui vous aide à centraliser et à automatiser la protection des données sur l'ensemble des services AWS, dans le cloud et sur site.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, les fonctions AWS Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les bus d'événements dans d'autres comptes AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Code**

Le code de ce modèle est disponible dans le GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)référentiel.

## Bonnes pratiques
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-best-practices"></a>
+ [Bonnes pratiques de sécurité pour Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) (*Guide de l'utilisateur Amazon S3*)
+ [Bonnes pratiques d'utilisation des fonctions AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) (Guide du développeur *AWS Lambda*)
+ [Bonnes pratiques pour le compte de gestion](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) (*Guide de l'utilisateur d'AWS Organizations*)

## Épopées
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-epics"></a>

### Déployer les composants de la solution
<a name="deploy-the-solution-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le GitHub dépôt. | Clonez le GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)dépôt en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/aws-backup-report-generator.git</pre>Pour plus d'informations, consultez la section [Clonage d'un dépôt](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) dans la GitHub documentation. | AWS DevOps, DevOps ingénieur | 
| Déployez les composants de la solution sur le compte AWS du membre (de reporting). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | DevOps ingénieur, AWS DevOps | 

### Tester la solution
<a name="test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Assurez-vous que la EventBridge règle s'exécute avant de procéder au test. | Assurez-vous que la EventBridge règle s'exécute en attendant au moins 24 heures ou en augmentant la fréquence des rapports dans le CloudFormation fichier **template-reporting.yml** du modèle.**Pour augmenter la fréquence des rapports**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingénieur | 
| Vérifiez le rapport généré dans le compartiment Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingénieur | 

### Nettoyage de vos ressources
<a name="clean-up-your-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les composants de la solution du compte membre (de reporting). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingénieur | 
| Supprimez les composants de la solution du compte de gestion. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingénieur | 

## Ressources connexes
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-resources"></a>
+ [Tutoriel : Utilisation d'AWS Lambda avec des événements planifiés (documentation](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html) AWS Lambda)
+ [Création d'événements planifiés pour exécuter les fonctions AWS Lambda](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/scheduled-events-invoking-lambda-example.html) (SDK AWS pour la documentation) JavaScript 
+ [Tutoriel IAM : déléguer l'accès entre les comptes AWS à l'aide de rôles IAM (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) IAM)
+ [Terminologie et concepts d'AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) (documentation AWS Organizations)
+ [Création de plans de rapports à l'aide de la console AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-report-plan-console.html) (documentation AWS Backup)
+ [Création d'un rapport d'audit](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-audit-report.html) (documentation AWS Backup)
+ [Création de rapports à la demande](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-on-demand-reports.html) (documentation AWS Backup)
+ [Qu'est-ce qu'AWS Backup ?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) (Documentation AWS Backup)
+ [Automatisez la sauvegarde centralisée à grande échelle sur l'ensemble des services AWS à l'aide d'AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) (article de blog AWS)

# Exporter les balises d'une liste d' EC2 instances Amazon vers un fichier CSV
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file"></a>

*Sida Ju et Pac Joonhyun, Amazon Web Services*

## Résumé
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-summary"></a>

Ce modèle montre comment exporter par programmation les balises d'une liste d'instances Amazon Elastic Compute Cloud EC2 (Amazon) vers un fichier CSV.

En utilisant l'exemple de script Python fourni, vous pouvez réduire le temps nécessaire pour examiner et classer vos EC2 instances Amazon par des balises spécifiques. Par exemple, vous pouvez utiliser le script pour identifier et classer rapidement une liste d'instances que votre équipe de sécurité a signalées comme nécessitant des mises à jour logicielles.

## Conditions préalables et limitations
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-prereqs"></a>

**Conditions préalables**
+ Python 3 installé et configuré
+ Interface de ligne de commande (AWS CLI) (AWS CLI) installée et configurée

**Limites**

L'exemple de script Python fourni dans ce modèle permet de rechercher EC2 des instances Amazon uniquement sur la base des attributs suivants :
+ Instance IDs
+  IPv4 Adresses privées
+  IPv4 Adresses publiques

## Outils
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-tools"></a>
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.
+ [virtualenv](https://virtualenv.pypa.io/en/latest/) vous aide à créer des environnements Python isolés.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

**Référentiel de code**

L'exemple de script Python pour ce modèle est disponible dans le référentiel GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags

## Épopées
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-epics"></a>

### Installation et configuration des prérequis
<a name="install-and-configure-the-prerequisites"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le GitHub dépôt. | Si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI, [assurez-vous que vous utilisez la version la plus récente de l'AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html).Clonez le instances-export-tags dépôt GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags) en exécutant la commande Git suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/search-ec2-instances-export-tags.git</pre> | DevOps ingénieur | 
| Installez et activez virtualenv. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html)Pour plus d'informations, consultez le guide de l'utilisateur de [virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html). | DevOps ingénieur | 
| Installez les dépendances. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html) | DevOps ingénieur | 
| Configurez un profil nommé AWS.  | Si ce n'est pas déjà fait, configurez un profil nommé AWS qui inclut les informations d'identification requises pour exécuter le script. Pour créer un profil nommé, exécutez la commande [aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods).Pour plus d'informations, consultez la section [Utilisation de profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) dans la documentation de l'AWS CLI. | DevOps ingénieur | 

### Configurer et exécuter le script Python
<a name="configure-and-run-the-python-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le fichier d'entrée. | Créez un fichier d'entrée contenant la liste des EC2 instances Amazon pour lesquelles le script doit rechercher et exporter des balises. Vous pouvez répertorier les instances IDs, IPv4 les adresses privées ou IPv4 les adresses publiques.Assurez-vous que chaque EC2 instance Amazon est répertoriée sur sa propre ligne dans le fichier d'entrée.**Exemple de fichier d'entrée**<pre>1    i-0547c351bdfe85b9f<br />2    54.157.194.156<br />3    172.31.85.33<br />4    54.165.198.144<br />5    i-0b6223b5914111a4b<br />6    172.31.85.44<br />7    54.165.198.145<br />8    172.31.80.219<br />9    172.31.94.199</pre> | DevOps ingénieur | 
| Exécutez le script python. | Exécutez le script en exécutant la commande suivante dans le terminal :<pre>python search_instances.py -i INPUTFILE -o OUTPUTFILE -r REGION [-p PROFILE]</pre>Remplacez `INPUTFILE` par le nom de votre fichier d'entrée. `OUTPUTFILE`Remplacez-le par le nom que vous souhaitez attribuer au fichier de sortie CSV. `REGION`Remplacez-le par la région AWS dans laquelle se trouvent vos EC2 ressources Amazon. Si vous utilisez un profil nommé AWS, remplacez-le `PROFILE` par le profil nommé que vous utilisez.Pour obtenir la liste des paramètres pris en charge et leur description, exécutez la commande suivante :<pre>python search_instances.py -h</pre>Pour plus d'informations et pour voir un exemple de fichier de sortie, consultez le `README.md` fichier dans le référentiel GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags | DevOps ingénieur | 

## Ressources connexes
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-resources"></a>
+ [Configuration de l'interface de ligne de commande AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) *(Guide de l'utilisateur de l'interface* de ligne de commande AWS)

# Générez un CloudFormation modèle AWS contenant les règles gérées par AWS Config à l'aide de Troposphere
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere"></a>

*Lucas Nation et Freddie Wilson, Amazon Web Services*

## Résumé
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-summary"></a>

De nombreuses organisations utilisent les règles [gérées par AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) pour évaluer la conformité de leurs ressources Amazon Web Services (AWS) par rapport aux meilleures pratiques courantes. Cependant, la maintenance de ces règles peut prendre beaucoup de temps et ce modèle vous permet de tirer parti de [Troposphere](https://troposphere.readthedocs.io/en/latest/quick_start.html), une bibliothèque Python, pour générer et gérer les règles gérées par AWS Config.

Le modèle vous aide à gérer vos règles gérées par AWS Config en utilisant un script Python pour convertir une feuille de calcul Microsoft Excel contenant des règles gérées par AWS en un CloudFormation modèle AWS. Troposphere agit comme une infrastructure en tant que code (IaC), ce qui signifie que vous pouvez mettre à jour la feuille de calcul Excel avec des règles gérées, au lieu d'utiliser un fichier au format JSON ou YAML. Vous utilisez ensuite le modèle pour lancer une CloudFormation pile AWS qui crée et met à jour les règles gérées dans votre compte AWS.

Le CloudFormation modèle AWS définit chaque règle gérée par AWS Config à l'aide de la feuille de calcul Excel et vous permet d'éviter de créer manuellement des règles individuelles dans l'AWS Management Console. *Le script définit par défaut les paramètres de chaque règle gérée sur un dictionnaire vide et les paramètres `ComplianceResourceTypes` par défaut de la portée sur. `THE_RULE_IDENTIFIER.template file`* Pour plus d'informations sur l'identifiant de règle, consultez la section [Création de règles gérées par AWS Config avec des CloudFormation modèles AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) dans la documentation AWS Config.

## Conditions préalables et limitations
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Connaissance de l'utilisation de CloudFormation modèles AWS pour créer des règles gérées par AWS Config. Pour plus d'informations à ce sujet, consultez la section [Création de règles gérées par AWS Config avec CloudFormation des modèles](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) AWS dans la documentation AWS Config.  
+ Python 3, installé et configuré. Pour plus d'informations à ce sujet, consultez la [documentation Python](https://www.python.org/).
+ Un environnement de développement intégré (IDE) existant.  
+ Identifiez vos unités organisationnelles (OUs) dans une colonne de l'exemple de feuille de calcul `excel_config_rules.xlsx` Excel (ci-joint).

## Épopées
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-epics"></a>

### Personnalisation et configuration des règles gérées par AWS Config
<a name="customize-and-configure-the-aws-config-managed-rules"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour l'exemple de feuille de calcul Excel. | Téléchargez l'exemple de feuille de calcul `excel_config_rules.xlsx` Excel (ci-joint) et étiquetez `Implemented` les règles gérées par AWS Config que vous souhaitez utiliser. Les règles marquées comme étant `Implemented` seront ajoutées au CloudFormation modèle AWS. | Developer | 
| (Facultatif) Mettez à jour le fichier config\$1rules\$1params.json avec les paramètres des règles AWS Config. | Certaines règles gérées par AWS Config nécessitent des paramètres et doivent être transmises au script Python sous forme de fichier JSON à l'aide de l'`--param-file`option. Par exemple, la règle `access-keys-rotated` gérée utilise le `maxAccessKeyAge` paramètre suivant :<pre>{<br />         "access-keys-rotated": {<br />             "InputParameters": {<br />                 "maxAccessKeyAge": 90<br />             }<br />         }<br />     }</pre>Dans cet exemple de paramètre, la valeur `maxAccessKeyAge` est fixée à 90 jours. Le script lit le fichier de paramètres et ajoute ceux `InputParameters` qu'il trouve. | Developer | 
| (Facultatif) Mettez à jour le fichier config\$1rules\$1params.json avec AWS Config. ComplianceResourceTypes | Par défaut, le script Python `ComplianceResourceTypes` extrait les modèles définis par AWS. Si vous souhaitez modifier le champ d'application d'une règle gérée par AWS Config spécifique, vous devez la transmettre au script Python sous forme de fichier JSON à l'aide de l'`--param-file`option.Par exemple, l'exemple de code suivant montre comment le `ComplianceResourceTypes` formulaire `ec2-volume-inuse-check` est défini dans la `["AWS::EC2::Volume"]` liste :<pre>{<br />         "ec2-volume-inuse-check": {<br />             "Scope": {<br />                 "ComplianceResourceTypes": [<br />                     "AWS::EC2::Volume"<br />                 ]<br />             }<br />         }<br />     }</pre> | Developer | 

### Exécutez le script Python
<a name="run-the-python-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les packages pip à partir du fichier requirements.txt.  | Téléchargez le `requirements.txt` fichier (joint) et exécutez la commande suivante dans votre IDE pour installer les packages Python :`pip3 install -r requirements.txt` | Developer | 
| Exécutez le script python.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html)Vous pouvez également ajouter les paramètres facultatifs suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

### Déployez les règles gérées par AWS Config
<a name="deploy-the-aws-config-managed-rules"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

## Pièces jointes
<a name="attachments-07c1cfff-fc9e-4a1f-bd36-48f025808bd8"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/07c1cfff-fc9e-4a1f-bd36-48f025808bd8/attachments/attachment.zip)

# Donnez aux instances de SageMaker bloc-notes un accès temporaire à un CodeCommit référentiel dans un autre compte AWS
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide, Amazon Web Services*

## Résumé
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

Ce modèle montre comment accorder aux instances d'Amazon SageMaker Notebook et aux utilisateurs un accès temporaire à un CodeCommit référentiel AWS qui se trouve dans un autre compte AWS. Ce modèle montre également comment vous pouvez accorder des autorisations granulaires pour des actions spécifiques que chaque entité peut effectuer sur chaque référentiel.

Organisations stockent souvent CodeCommit les référentiels dans un compte AWS différent de celui qui héberge leur environnement de développement. Cette configuration multi-comptes permet de contrôler l'accès aux référentiels et de réduire le risque de suppression accidentelle de ceux-ci. Pour accorder ces autorisations entre comptes, il est recommandé d'utiliser les rôles AWS Identity and Access Management (IAM). Les identités IAM prédéfinies de chaque compte AWS peuvent ensuite assumer temporairement les rôles nécessaires pour créer une chaîne de confiance contrôlée entre les comptes.

**Note**  
Vous pouvez appliquer une procédure similaire pour accorder à d'autres identités IAM l'accès entre comptes à un CodeCommit référentiel. Pour plus d'informations, consultez [Configurer l'accès entre comptes à un CodeCommit référentiel AWS à l'aide de rôles](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) dans le *guide de l' CodeCommit utilisateur AWS*.

## Conditions préalables et limitations
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif avec un CodeCommit référentiel (*compte A*)
+ Un deuxième compte AWS actif avec une instance de SageMaker bloc-notes (*compte B*)
+ Un utilisateur AWS disposant des autorisations suffisantes pour créer et modifier des rôles IAM dans le compte A
+ Un deuxième utilisateur AWS disposant des autorisations suffisantes pour créer et modifier des rôles IAM dans le compte B

## Architecture
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

Le schéma suivant montre un exemple de flux de travail permettant d'accorder à une instance de SageMaker bloc-notes et aux utilisateurs d'un compte AWS un accès croisé à un CodeCommit référentiel :

![\[Flux de travail pour l'accès entre comptes à CodeCommit\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


Le schéma suivant illustre le flux de travail suivant :

1. Le rôle d'utilisateur AWS et le rôle d'instance de SageMaker bloc-notes dans le compte B supposent un [profil nommé](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles).

1. La politique d'autorisation du profil nommé spécifie un rôle d' CodeCommit accès dans le compte A que le profil assume ensuite.

1. La politique de confiance du rôle d' CodeCommit accès dans le compte A permet au profil nommé dans le compte B d'assumer le rôle CodeCommit d'accès.

1. La politique d'autorisations IAM du CodeCommit référentiel dans le compte A autorise le rôle CodeCommit d'accès à accéder au CodeCommit référentiel.

**Pile technologique**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## Outils
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Git](https://git-scm.com/) est un système de contrôle de version distribué permettant de suivre les modifications du code source pendant le développement de logiciels.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)est un utilitaire qui vous permet de transférer et d'extraire du code depuis des CodeCommit référentiels en étendant Git.
+ [pip](https://pypi.org/project/pip/) est le programme d'installation du package pour Python. Vous pouvez utiliser pip pour installer des packages à partir de l'index des packages Python et d'autres index.

## Bonnes pratiques
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

Lorsque vous définissez des autorisations à l'aide de politiques IAM, assurez-vous de n'accorder que les autorisations requises pour effectuer une tâche. Pour plus d'informations, veuillez consulter la rubrique [Accorder les autorisations de moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dans la documentation IAM.

Lorsque vous implémentez ce modèle, veillez à effectuer les opérations suivantes :
+ Vérifiez que les principes IAM disposent uniquement des autorisations requises pour effectuer des actions spécifiques et nécessaires au sein de chaque référentiel. Par exemple, il est recommandé d'autoriser les principes IAM approuvés à appliquer et à fusionner les modifications apportées à des branches spécifiques du référentiel, mais de ne demander des fusions qu'aux branches protégées. 
+ Vérifiez que les principes IAM se voient attribuer différents rôles IAM en fonction de leurs rôles et responsabilités respectifs pour chaque projet. Par exemple, les autorisations d'accès d'un développeur seront différentes de celles d'un responsable de publication ou d'un administrateur AWS. 

## Épopées
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### Configuration des rôles IAM
<a name="configure-the-iam-roles"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le rôle CodeCommit d'accès et la politique d'autorisations. | Pour automatiser le processus de configuration manuelle décrit dans cette épopée,**** vous pouvez utiliser un [ CloudFormation modèle AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html).Dans le compte qui contient le CodeCommit référentiel (*compte A*), procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Avant de transférer cette configuration dans votre environnement de production, il est recommandé de rédiger votre propre politique IAM qui applique les autorisations du [moindre privilège.](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) Pour plus d'informations, consultez la section **Informations supplémentaires** de ce modèle. | AWS en général, AWS DevOps | 
| Accordez à l'instance du SageMaker bloc-notes l'autorisation d'assumer le rôle CodeCommit d'accès dans le compte A. | Dans le compte qui contient le rôle IAM de l'instance de SageMaker bloc-notes (*compte B),* procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Pour consulter le nom de ressource Amazon (ARN) de votre dépôt, consultez [Afficher les détails CodeCommit du référentiel](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html) dans le *guide de CodeCommit l'utilisateur AWS*. | AWS en général, AWS DevOps | 

### Configurez votre instance de SageMaker bloc-notes dans le compte B
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un profil utilisateur sur l'instance de SageMaker bloc-notes AWS pour assumer le rôle dans le compte A.  | [Assurez-vous que la dernière version de l'interface de ligne de commande AWS (AWS CLI) est installée.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)Dans le compte qui contient l'instance de SageMaker bloc-notes (*compte B),* procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | AWS en général, AWS DevOps | 
| Installez l’utilitaire git-remote-codecommit. | Suivez les instructions de l'[étape 2 : Installation git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) dans le *guide de CodeCommit l'utilisateur AWS*. | Scientifique des données | 

### Accédez au référentiel
<a name="access-the-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accédez au CodeCommit référentiel à l'aide des commandes Git ou SageMaker. | **Pour utiliser Git**Les principaux IAM qui assument le rôle de l'instance de SageMaker bloc-notes dans le compte B peuvent désormais exécuter des commandes Git pour accéder au CodeCommit référentiel du compte A. Par exemple, les utilisateurs peuvent exécuter des commandes telles que `git clone``git pull`, et. `git push`Pour obtenir des instructions, consultez la section [Se connecter à un CodeCommit référentiel AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) dans le *guide de CodeCommit l'utilisateur AWS*.Pour plus d'informations sur l'utilisation de Git avec CodeCommit, consultez [Getting started with AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html) dans le *guide de CodeCommit l'utilisateur AWS*.**À utiliser SageMaker**Pour utiliser Git depuis la SageMaker console, vous devez autoriser Git à récupérer les informations d'identification de votre CodeCommit dépôt. Pour obtenir des instructions, consultez la section [Associer un CodeCommit référentiel d'un autre compte AWS à une instance de bloc-notes](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html) dans la SageMaker documentation. | Git, console bash | 

## Ressources connexes
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [Configurer l'accès entre comptes à un CodeCommit référentiel AWS à l'aide de rôles](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) ( CodeCommit documentation AWS)
+ [Tutoriel IAM : déléguer l'accès entre les comptes AWS à l'aide de rôles IAM (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) IAM)

## Informations supplémentaires
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**Restreindre CodeCommit les autorisations à des actions spécifiques**

Pour limiter les actions qu'un principal IAM peut effectuer dans le CodeCommit référentiel, modifiez les actions autorisées dans la politique CodeCommit d'accès.

Pour plus d'informations sur les opérations CodeCommit d'API, consultez la [référence CodeCommit des autorisations](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html) dans le *guide de CodeCommit l'utilisateur AWS*.

**Note**  
Vous pouvez également modifier la politique gérée par [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser)AWS en fonction de votre cas d'utilisation.

**Restreindre CodeCommit les autorisations à des référentiels spécifiques**

Pour créer un environnement mutualisé dans lequel plusieurs référentiels de code ne sont accessibles qu'à des utilisateurs spécifiques, procédez comme suit :

1. Créez plusieurs rôles CodeCommit d'accès dans le compte A. Configurez ensuite la politique de confiance de chaque rôle d'accès pour permettre à des utilisateurs spécifiques du compte B d'assumer le rôle.

1. Limitez les référentiels de code que chaque rôle peut assumer en ajoutant une condition **« Ressource »** à la politique de chaque rôle CodeCommit d'accès.

**Exemple de condition de « ressource » qui restreint l'accès d'un principal IAM à un référentiel spécifique CodeCommit **

```
"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]
```

**Note**  
Pour identifier et différencier plusieurs référentiels de code dans le même compte AWS, vous pouvez attribuer différents préfixes aux noms des référentiels. **Par exemple, vous pouvez nommer les référentiels de code avec des préfixes correspondant à différents groupes de développeurs, tels que myproject-subproject1-repo1 et **myproject-subproject2-repo1**.** Vous pouvez ensuite créer un rôle IAM pour chaque groupe de développeurs en fonction des préfixes qui leur ont été attribués. **Par exemple, vous pouvez créer un rôle nommé **myproject-subproject1-repoaccess et lui accorder l'accès à** tous les référentiels de code qui incluent le préfixe myproject-subproject1.**

**Exemple de condition de « ressource » faisant référence à un ARN de référentiel de code qui inclut un préfixe spécifique**

```
"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*
```

# Mettre en œuvre une stratégie GitHub de branchement Flow pour les environnements multi-comptes DevOps
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens et Abhilash Vinod, Amazon Web Services*

## Résumé
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Lors de la gestion d'un référentiel de code source, différentes stratégies de branchement affectent les processus de développement et de publication des logiciels utilisés par les équipes de développement. Trunk, Flow et GitHub Gitflow sont des exemples de stratégies de branchement courantes. Ces stratégies utilisent différentes branches et les activités effectuées dans chaque environnement sont différentes. Organisations qui mettent en œuvre DevOps des processus bénéficieraient d'un guide visuel pour les aider à comprendre les différences entre ces stratégies de branchement. L'utilisation de ce visuel dans votre organisation aide les équipes de développement à aligner leur travail et à respecter les normes organisationnelles. Ce modèle fournit ce visuel et décrit le processus de mise en œuvre d'une stratégie de branchement GitHub Flow dans votre organisation.

Ce modèle fait partie d'une série de documentation sur le choix et la mise en œuvre de stratégies de DevOps succursales pour les organisations qui en ont plusieurs Comptes AWS. Cette série est conçue pour vous aider à appliquer la bonne stratégie et les meilleures pratiques dès le départ, afin de rationaliser votre expérience dans le cloud. GitHub Flow n'est qu'une des stratégies de branchement possibles que votre organisation peut utiliser. Cette série de documentation couvre également les modèles de branchement [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) et [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Si ce n'est pas déjà fait, nous vous recommandons de consulter [Choisir une stratégie de branchement Git pour les DevOps environnements multi-comptes](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) avant de mettre en œuvre les instructions de ce modèle. Veuillez faire preuve de diligence raisonnable pour choisir la bonne stratégie de succursale pour votre organisation.

Ce guide fournit un schéma qui montre comment une organisation peut mettre en œuvre la stratégie GitHub Flow. Il est recommandé de consulter le guide [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) pour passer en revue les meilleures pratiques. Ce modèle inclut les tâches, les étapes et les restrictions recommandées pour chaque étape du DevOps processus.

## Conditions préalables et limitations
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Conditions préalables**
+ Git, [installé](https://git-scm.com/downloads). Il est utilisé comme outil de dépôt de code source.
+ [Draw.io, installé.](https://github.com/jgraph/drawio-desktop/releases) Cette application permet de visualiser et de modifier le diagramme.

## Architecture
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architecture cible**

Le schéma suivant peut être utilisé comme un [carré de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Vous alignez les branches sur l'axe vertical avec les AWS environnements sur l'axe horizontal pour déterminer les actions à effectuer dans chaque scénario. Les chiffres indiquent la séquence des actions du flux de travail. Cet exemple vous emmène d'une `feature` succursale à un déploiement en production.

![\[Carré punnett des activités de GitHub Flow dans chaque branche et environnement.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/780a5bce-3cd2-4092-8537-b7a77c3d6b8d/images/8a2a774a-cd85-466e-838e-a9a1f3b58a63.png)


Pour plus d'informations sur les Comptes AWS environnements et les branches d'une approche GitHub Flow, consultez [Choisir une stratégie de branchement Git pour les environnements multi-comptes DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automatisation et mise à l'échelle**

L'intégration continue et la livraison continue (les CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CD pipelines) fournissent également une gouvernance et des garanties aux équipes de développement en garantissant la cohérence, les normes, les meilleures pratiques et les niveaux d'acceptation minimaux pour l'acceptation et le déploiement des fonctionnalités. Pour plus d'informations, voir [Pratiquer l'intégration continue et la livraison continue sur AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS propose une suite de services de développement conçus pour vous aider à créer des CI/CD pipelines. Par exemple, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)il s'agit d'un service de livraison continue entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compile le code source, exécute des tests et produit des ready-to-deploy progiciels. Pour plus d'informations, consultez la section [Outils de développement sur AWS](https://aws.amazon.com/products/developer-tools/).

## Outils
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS services et outils**

AWS fournit une suite de services de développement que vous pouvez utiliser pour implémenter ce modèle :
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)est un service de référentiel d'artefacts géré hautement évolutif qui vous permet de stocker et de partager des progiciels pour le développement d'applications.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatise les déploiements vers Amazon Elastic Compute Cloud EC2 (Amazon) ou vers des instances, des AWS Lambda fonctions ou des services Amazon Elastic Container Service (Amazon ECS) sur site.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.

**Autres outils**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) est une application pour créer des organigrammes et des diagrammes. Le référentiel de code contient des modèles au format .drawio pour Draw.io.
+ [Figma](https://www.figma.com/design-overview/) est un outil de conception en ligne conçu pour la collaboration. Le référentiel de code contient des modèles au format .fig pour Figma.

**Référentiel de code**

Ce fichier source pour le diagramme de ce modèle est disponible dans le référentiel GitHub [Git Branching Strategy for GitHub Flow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/github-flow). Il inclut des fichiers aux formats PNG, draw.io et Figma. Vous pouvez modifier ces diagrammes pour soutenir les processus de votre organisation.

## Bonnes pratiques
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Suivez les meilleures pratiques et recommandations décrites dans [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance et [Choosing a Git Branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy pour les environnements multi-comptes. DevOps Ils vous aident à mettre en œuvre efficacement le développement GitHub basé sur Flow, à favoriser la collaboration, à améliorer la qualité du code et à rationaliser le processus de développement.

## Épopées
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Révision des GitHub flux de travail Flow
<a name="reviewing-the-github-flow-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez en revue le processus GitHub Flow standard. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 
| Passez en revue le processus de correction de bogues GitHub Flow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 
| Passez en revue le processus du correctif GitHub Flow. | GitHub Flow est conçu pour permettre une diffusion continue, dans le cadre de laquelle les modifications de code sont déployées fréquemment et de manière fiable dans des environnements supérieurs. L'essentiel est que chaque `feature` branche puisse être déployée à tout moment.`Hotfix`les branches, qui sont apparentées à `feature` ou à `bugfix` des branches, peuvent suivre le même processus que l'une ou l'autre de ces branches. Cependant, étant donné leur urgence, les correctifs ont généralement une priorité plus élevée. En fonction des politiques de l'équipe et de l'urgence de la situation, certaines étapes du processus pourraient être accélérées. Par exemple, les révisions de code pour les correctifs peuvent être accélérées. Par conséquent, bien que le processus de correction soit parallèle au processus de correction des fonctionnalités ou des bogues, l'urgence des correctifs peut justifier des modifications de la conformité procédurale. Il est essentiel d'établir des directives relatives à la gestion des correctifs afin de s'assurer qu'ils sont gérés de manière efficace et sécurisée. | DevOps ingénieur | 

## Résolution des problèmes
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Conflits entre branches | Un problème courant qui peut survenir avec le modèle GitHub Flow est lorsqu'un correctif doit être appliqué en production`feature`, `bugfix` mais qu'une modification correspondante doit se produire dans une `hotfix` branche ou une branche où les mêmes ressources sont modifiées. Nous vous recommandons de fusionner fréquemment les modifications depuis `main` les branches inférieures afin d'éviter des conflits importants lors de la fusion avec`main`. | 
| Maturité des équipes | GitHub Flow encourage les déploiements quotidiens vers des environnements supérieurs, en adoptant une véritable intégration continue et une livraison continue (CI/CD). Il est impératif que l'équipe possède la maturité technique nécessaire pour créer des fonctionnalités et créer des tests d'automatisation pour celles-ci. L'équipe doit effectuer un examen exhaustif des demandes de fusion avant que les modifications ne soient approuvées. Cela favorise une solide culture d'ingénierie qui favorise la qualité, la responsabilité et l'efficacité du processus de développement. | 

## Ressources connexes
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Ce guide n'inclut pas de formation à Git ; toutefois, de nombreuses ressources de haute qualité sont disponibles sur Internet si vous avez besoin de cette formation. Nous vous recommandons de commencer par le site de [documentation Git](https://git-scm.com/doc).

Les ressources suivantes peuvent vous aider dans votre parcours de branchement GitHub Flow dans le AWS Cloud.

**AWS DevOps orientation**
+ [AWS DevOps Conseils](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Architecture de référence du pipeline de déploiement](https://pipelines.devops.aws.dev/)
+ [Qu'est-ce que c'est DevOps ?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**GitHub Guidage du flux**
+ [GitHub Tutoriel de démarrage rapide de Flow](https://docs.github.com/en/get-started/using-github/github-flow) () GitHub
+ [Pourquoi GitHub Flow ?](https://githubflow.github.io/)

**Autres ressources**
+ [Méthodologie d'application à douze facteurs (12factor.net](https://12factor.net/))

# Mettre en œuvre une stratégie de branchement Gitflow pour les environnements multi-comptes DevOps
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens, Stephen DiCato, Abhilash Vinod et Tim Wondergem, Amazon Web Services*

## Résumé
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Lors de la gestion d'un référentiel de code source, différentes stratégies de branchement affectent les processus de développement et de publication des logiciels utilisés par les équipes de développement. Trunk, Gitflow et Flow sont des exemples de stratégies de branchement courantes. GitHub Ces stratégies utilisent différentes branches et les activités effectuées dans chaque environnement sont différentes. Organisations qui mettent en œuvre DevOps des processus bénéficieraient d'un guide visuel pour les aider à comprendre les différences entre ces stratégies de branchement. L'utilisation de ce visuel dans votre organisation aide les équipes de développement à aligner leur travail et à respecter les normes organisationnelles. Ce modèle fournit ce visuel et décrit le processus de mise en œuvre d'une stratégie de branchement Gitflow dans votre organisation.

Ce modèle fait partie d'une série de documentation sur le choix et la mise en œuvre de stratégies de DevOps succursales pour les organisations qui en ont plusieurs Comptes AWS. Cette série est conçue pour vous aider à appliquer la bonne stratégie et les meilleures pratiques dès le départ, afin de rationaliser votre expérience dans le cloud. Gitflow n'est qu'une des stratégies de branchement possibles que votre organisation peut utiliser. Cette série de documentation couvre également les modèles de branchement [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) et [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html). Si ce n'est pas déjà fait, nous vous recommandons de consulter [Choisir une stratégie de branchement Git pour les DevOps environnements multi-comptes](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) avant de mettre en œuvre les instructions de ce modèle. Veuillez faire preuve de diligence raisonnable pour choisir la bonne stratégie de succursale pour votre organisation.

Ce guide fournit un schéma qui montre comment une organisation peut mettre en œuvre la stratégie Gitflow. Il est recommandé de consulter le guide [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) pour connaître les meilleures pratiques. Ce modèle inclut les tâches, les étapes et les restrictions recommandées pour chaque étape du DevOps processus.

## Conditions préalables et limitations
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Conditions préalables**
+ Git, [installé](https://git-scm.com/downloads). Il est utilisé comme outil de dépôt de code source.
+ [Draw.io, installé.](https://github.com/jgraph/drawio-desktop/releases) Cette application permet de visualiser et de modifier le diagramme.
+ (Facultatif) Plugin Gitflow, [installé.](https://github.com/nvie/gitflow)

## Architecture
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architecture cible**

Le schéma suivant peut être utilisé comme un [carré de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Vous alignez les branches sur l'axe vertical avec les AWS environnements sur l'axe horizontal pour déterminer les actions à effectuer dans chaque scénario. Les chiffres indiquent la séquence des actions du flux de travail. Cet exemple vous emmène d'une branche fonctionnelle au déploiement en production.

![\[Punnett carré des activités de Gitflow dans chaque branche et environnement.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/1dee2a06-cc54-4797-b9a9-78b6685edd33/images/d8be49bf-dca1-4892-ac4c-11996a7258c2.png)


Pour plus d'informations sur les Comptes AWS environnements et les branches d'une approche Gitflow, consultez [Choisir une stratégie de branchement Git pour les environnements DevOps multi-comptes](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/).

**Automatisation et évolutivité**

L'intégration continue et la livraison continue (les CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CD pipelines) fournissent également une gouvernance et des garanties aux équipes de développement en garantissant la cohérence, les normes, les meilleures pratiques et les niveaux d'acceptation minimaux pour l'acceptation et le déploiement des fonctionnalités. Pour plus d'informations, voir [Pratiquer l'intégration continue et la livraison continue sur AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS propose une suite de services de développement conçus pour vous aider à créer des CI/CD pipelines. Par exemple, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)il s'agit d'un service de livraison continue entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compile le code source, exécute des tests et produit des ready-to-deploy progiciels. Pour plus d'informations, consultez la section [Outils de développement sur AWS](https://aws.amazon.com/products/developer-tools/).

## Outils
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS services et outils**

AWS fournit une suite de services de développement que vous pouvez utiliser pour implémenter ce modèle :
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)est un service de référentiel d'artefacts géré hautement évolutif qui vous permet de stocker et de partager des progiciels pour le développement d'applications.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatise les déploiements vers Amazon Elastic Compute Cloud EC2 (Amazon) ou vers des instances, des AWS Lambda fonctions ou des services Amazon Elastic Container Service (Amazon ECS) sur site.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.

**Autres outils**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) est une application pour créer des organigrammes et des diagrammes. Le référentiel de code contient des modèles au format .drawio pour Draw.io.
+ [Figma](https://www.figma.com/design-overview/) est un outil de conception en ligne conçu pour la collaboration. Le référentiel de code contient des modèles au format .fig pour Figma.
+ (Facultatif) Le [plugin Gitflow](https://github.com/nvie/gitflow) est une collection d'extensions Git qui fournissent des opérations de dépôt de haut niveau pour le modèle de branchement Gitflow.

**Référentiel de code**

Ce fichier source pour le diagramme de ce modèle est disponible dans le GitFlow référentiel GitHub [Git Branching Strategy for](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/gitflow). Il inclut des fichiers aux formats PNG, draw.io et Figma. Vous pouvez modifier ces diagrammes pour soutenir les processus de votre organisation.

## Bonnes pratiques
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Suivez les meilleures pratiques et recommandations décrites dans [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance et [Choosing a Git Branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy pour les environnements multi-comptes. DevOps Ils vous aident à mettre en œuvre efficacement le développement basé sur Gitflow, à favoriser la collaboration, à améliorer la qualité du code et à rationaliser le processus de développement.

## Épopées
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Révision des flux de travail Gitflow
<a name="reviewing-the-gitflow-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez en revue le processus standard de Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 
| Passez en revue le processus Gitflow du correctif. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 
| Passez en revue le processus de correction de bogues Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Conflits entre branches | Un problème courant qui peut survenir avec le modèle Gitflow est celui où un correctif doit être apporté en production, mais une modification correspondante doit se produire dans un environnement inférieur, où une autre branche modifie les mêmes ressources. Nous vous recommandons de n'avoir qu'une seule branche de version active à la fois. Si plusieurs d'entre elles sont actives à la fois, les modifications apportées aux environnements peuvent se répercuter et vous risquez de ne pas être en mesure de faire passer une succursale en production. | 
| Fusion | Les versions doivent être fusionnées dans la version principale et développées dès que possible afin de consolider le travail dans les branches principales. | 
| Fusion de squash | N'utilisez une fusion par squash que lorsque vous fusionnez d'une `feature` branche à une autre`develop`. L'utilisation de fusions de courges dans les branches supérieures pose des difficultés lors de la fusion des modifications vers les branches inférieures. | 

## Ressources connexes
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Ce guide n'inclut pas de formation à Git ; toutefois, de nombreuses ressources de haute qualité sont disponibles sur Internet si vous avez besoin de cette formation. Nous vous recommandons de commencer par le site de [documentation Git](https://git-scm.com/doc).

Les ressources suivantes peuvent vous aider dans votre parcours de création de succursales Gitflow dans le. AWS Cloud

**AWS DevOps orientation**
+ [AWS DevOps Conseils](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Architecture de référence du pipeline de déploiement](https://pipelines.devops.aws.dev/)
+ [Qu'est-ce que c'est DevOps ?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Guidage Gitflow**
+ [Le blog original de Gitflow (article de blog](https://nvie.com/posts/a-successful-git-branching-model/) de Vincent Driessen)
+ Flux de travail [Gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) (Atlassian)
+ [Gitflow on GitHub : Comment utiliser les flux de travail Git Flow avec GitHub Based Repos](https://youtu.be/WQuxeEvaCxs) (YouTube vidéo)
+ [Exemple d'initialisation de Git Flow](https://www.youtube.com/watch?v=d4cDLBFbekw) (YouTube vidéo)
+ [La branche de lancement de Gitflow du début à la fin](https://www.youtube.com/watch?v=rX80eKPdA28) (YouTube vidéo)

**Autres ressources**

[Méthodologie d'application à douze facteurs (12factor.net](https://12factor.net/))

# Mettre en œuvre une stratégie de branchement Trunk pour les environnements multi-comptes DevOps
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens et Rayjan Wilson, Amazon Web Services*

## Résumé
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-summary"></a>

Lors de la gestion d'un référentiel de code source, différentes stratégies de branchement affectent les processus de développement et de publication des logiciels utilisés par les équipes de développement. Trunk, Flow et GitHub Gitflow sont des exemples de stratégies de branchement courantes. Ces stratégies utilisent différentes branches et les activités effectuées dans chaque environnement sont différentes. Organisations qui mettent en œuvre DevOps des processus bénéficieraient d'un guide visuel pour les aider à comprendre les différences entre ces stratégies de branchement. L'utilisation de ce visuel dans votre organisation aide les équipes de développement à aligner leur travail et à respecter les normes organisationnelles. Ce modèle fournit ce visuel et décrit le processus de mise en œuvre d'une stratégie de branchement Trunk dans votre organisation.

Ce modèle fait partie d'une série de documentation sur le choix et la mise en œuvre de stratégies de DevOps succursales pour les organisations qui en ont plusieurs Comptes AWS. Cette série est conçue pour vous aider à appliquer la bonne stratégie et les meilleures pratiques dès le départ, afin de rationaliser votre expérience dans le cloud. Trunk n'est qu'une des stratégies de branchement possibles que votre organisation peut utiliser. Cette série de documentation couvre également les modèles de branchement [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) [et Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Si ce n'est pas déjà fait, nous vous recommandons de consulter [Choisir une stratégie de branchement Git pour les DevOps environnements multi-comptes](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) avant de mettre en œuvre les instructions de ce modèle. Veuillez faire preuve de diligence raisonnable pour choisir la bonne stratégie de succursale pour votre organisation.

Ce guide fournit un schéma qui montre comment une organisation peut mettre en œuvre la stratégie Trunk. Il est recommandé de consulter le guide officiel [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) pour connaître les meilleures pratiques. Ce modèle inclut les tâches, les étapes et les restrictions recommandées pour chaque étape du DevOps processus.

## Conditions préalables et limitations
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Conditions préalables**
+ Git, [installé](https://git-scm.com/downloads). Il est utilisé comme outil de dépôt de code source.
+ [Draw.io, installé.](https://github.com/jgraph/drawio-desktop/releases) Cette application permet de visualiser et de modifier le diagramme.

## Architecture
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architecture cible**

Le schéma suivant peut être utilisé comme un [carré de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Vous alignez les branches sur l'axe vertical avec les AWS environnements sur l'axe horizontal pour déterminer les actions à effectuer dans chaque scénario. Les chiffres indiquent la séquence des actions du flux de travail. Cet exemple vous emmène d'une `feature` succursale à un déploiement en production.

![\[Punnett square of the Trunk : activités dans chaque succursale et environnement\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/5df23e4d-84fe-4ab3-a54f-96b6406abc57/images/ad549ef4-90ad-47c1-bd01-f21d6ce5511a.png)


Pour plus d'informations sur les Comptes AWS environnements et les branches d'une approche Trunk, consultez [Choisir une stratégie de branchement Git pour les environnements multi-comptes DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automatisation et mise à l'échelle**

L'intégration continue et la livraison continue (les CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CD pipelines) fournissent également une gouvernance et des garanties aux équipes de développement en garantissant la cohérence, les normes, les meilleures pratiques et les niveaux d'acceptation minimaux pour l'acceptation et le déploiement des fonctionnalités. Pour plus d'informations, voir [Pratiquer l'intégration continue et la livraison continue sur AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS propose une suite de services de développement conçus pour vous aider à créer des CI/CD pipelines. Par exemple, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)il s'agit d'un service de livraison continue entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compile le code source, exécute des tests et produit des ready-to-deploy progiciels. Pour plus d'informations, consultez la section [Outils de développement sur AWS](https://aws.amazon.com/products/developer-tools/).

## Outils
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS services et outils**

AWS fournit une suite de services de développement que vous pouvez utiliser pour implémenter ce modèle :
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)est un service de référentiel d'artefacts géré hautement évolutif qui vous permet de stocker et de partager des progiciels pour le développement d'applications.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatise les déploiements vers Amazon Elastic Compute Cloud EC2 (Amazon) ou vers des instances, des AWS Lambda fonctions ou des services Amazon Elastic Container Service (Amazon ECS) sur site.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.

**Autres outils**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) — Une application pour créer des organigrammes et des diagrammes.
+ [Figma](https://www.figma.com/design-overview/) est un outil de conception en ligne conçu pour la collaboration. Le référentiel de code contient des modèles au format .fig pour Figma.

**Référentiel de code**

Ce fichier source pour le diagramme de ce modèle est disponible dans le référentiel GitHub [Git Branching Strategy for Trunk](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/trunk). Il inclut des fichiers aux formats PNG, draw.io et Figma. Vous pouvez modifier ces diagrammes pour soutenir les processus de votre organisation.

## Bonnes pratiques
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Suivez les meilleures pratiques et recommandations décrites dans [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance et [Choosing a Git Branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy pour les environnements multi-comptes. DevOps Ils vous aident à mettre en œuvre efficacement le développement basé sur Trunk, à favoriser la collaboration, à améliorer la qualité du code et à rationaliser le processus de développement.

## Épopées
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Révision du flux de travail Trunk
<a name="reviewing-the-trunk-workflow"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez en revue le processus Trunk standard. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Conflits entre branches | Un problème courant qui peut survenir avec le modèle Trunk est lorsqu'un correctif doit être appliqué en production, mais qu'un changement correspondant doit se produire dans une `feature` succursale, où les mêmes ressources sont modifiées. Nous vous recommandons de fusionner fréquemment les modifications depuis `main` les branches inférieures afin d'éviter des conflits importants lors de la fusion vers`main`. | 

## Ressources connexes
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-resources"></a>

Ce guide n'inclut pas de formation à Git ; toutefois, de nombreuses ressources de haute qualité sont disponibles sur Internet si vous avez besoin de cette formation. Nous vous recommandons de commencer par le site de [documentation Git](https://git-scm.com/doc).

Les ressources suivantes peuvent vous aider dans votre parcours de branchement Trunk dans le AWS Cloud.

**AWS DevOps orientation**
+ [AWS DevOps Conseils](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [Architecture de référence des pipelines de déploiement d’AWS](https://pipelines.devops.aws.dev/)
+ [Qu'est-ce que c'est DevOps ?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Guidage du coffre**
+ [Développement basé sur le tronc](https://trunkbaseddevelopment.com/)

**Autres ressources**
+ [Méthodologie d'application à douze facteurs (12factor.net](https://12factor.net/))

# Mettez en œuvre une analyse Checkov personnalisée et centralisée pour appliquer la politique avant de déployer AWS l'infrastructure
<a name="centralized-custom-checkov-scanning"></a>

*Benjamin Morris, Amazon Web Services*

## Résumé
<a name="centralized-custom-checkov-scanning-summary"></a>

Ce modèle fournit un cadre d' GitHub actions pour écrire des politiques Checkov personnalisées dans un référentiel qui peut être réutilisé au sein d'une GitHub organisation. En suivant ce modèle, une équipe de sécurité de l'information peut rédiger, ajouter et gérer des politiques personnalisées en fonction des exigences de l'entreprise. Les politiques personnalisées peuvent être intégrées automatiquement à tous les pipelines de l' GitHub organisation. Cette approche peut être utilisée pour appliquer les normes de l'entreprise en matière de ressources avant que celles-ci ne soient déployées.

## Conditions préalables et limitations
<a name="centralized-custom-checkov-scanning-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS
+ Une GitHub organisation utilisant des GitHub actions
+ AWS infrastructure déployée avec HashiCorp Terraform ou AWS CloudFormation

**Limites**
+ Ce modèle est écrit pour GitHub Actions. Cependant, il peut être adapté à des cadres d'intégration continue et de livraison continue (CI/CD) similaires tels que. GitLab Aucune version payante spécifique de GitHub n'est requise.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité des régions, consultez la section [Points de terminaison et quotas du service](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) dans la AWS documentation, puis choisissez le lien correspondant au service.

## Architecture
<a name="centralized-custom-checkov-scanning-architecture"></a>

Ce modèle est conçu pour être déployé sous forme de GitHub référentiel contenant un flux de travail GitHub réutilisable et des politiques Checkov personnalisées. Le flux de travail réutilisable peut analyser à la fois Terraform et les référentiels CloudFormation d'infrastructure en tant que code (IaC).

Le schéma suivant montre le référentiel des ** GitHub flux de travail réutilisables et le référentiel** des **politiques Custom Checkov** sous forme d'icônes distinctes. Toutefois, vous pouvez implémenter ces référentiels en tant que référentiels distincts ou en tant que référentiel unique. L'exemple de code utilise un référentiel unique, avec des fichiers pour les flux de travail (`.github/workflows`) et des fichiers pour les politiques personnalisées (`custom_policies`dossier et fichier de `.checkov.yml` configuration) dans le même référentiel.

![\[GitHub Actions utilise un GitHub flux de travail réutilisable et des politiques Checkov personnalisées pour évaluer IaC.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/6c0c941f-14f9-4569-92da-9f81ab3e525c/images/a1539ce5-0ee6-4af1-bd01-cafad0f71708.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un utilisateur crée une pull request dans un GitHub référentiel.

1. Les flux de travail du pipeline commencent dans GitHub Actions, y compris une référence à un flux de travail réutilisable Checkov.

1. Le flux de travail de pipeline télécharge le flux de travail réutilisable Checkov référencé depuis un référentiel externe et exécute ce flux de travail de Checkov à l'aide GitHub d'Actions.

1. Le flux de travail réutilisable Checkov télécharge les politiques personnalisées à partir d'un référentiel externe.

1. Le flux de travail réutilisable Checkov évalue l'iAc du GitHub référentiel par rapport aux politiques Checkov intégrées et personnalisées. Le flux de travail réutilisable Checkov réussit ou échoue selon que des problèmes de sécurité sont détectés ou non.

**Automatisation et mise à l'échelle**

Ce modèle permet une gestion centralisée de la configuration de Checkov, afin que les mises à jour des politiques puissent être appliquées en un seul endroit. Toutefois, ce modèle nécessite que chaque référentiel utilise un flux de travail contenant une référence au flux de travail réutilisable central. Vous pouvez ajouter cette référence manuellement ou utiliser des scripts pour transférer le fichier vers le `.github/workflows` dossier de chaque référentiel.

## Outils
<a name="centralized-custom-checkov-scanning-tools"></a>

**Services AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie dans toutes Comptes AWS les régions. Checkov peut scanner CloudFormation.

**Autres outils**
+ [Checkov](https://www.checkov.io/) 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.
+ [GitHub Actions](https://github.com/features/actions) est intégré à la GitHub plateforme pour vous aider à créer, partager et exécuter des flux de travail au sein de vos GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser des tâches telles que la création, le test et le déploiement de votre code.
+ [Terraform](https://www.terraform.io/) est un outil IaC HashiCorp qui vous aide à créer et à gérer des ressources sur site et dans le cloud. Checkov peut scanner Terraform.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [centralized-custom-checkov-sast](https://github.com/aws-samples/centralized-custom-checkov-sast)référentiel.

## Bonnes pratiques
<a name="centralized-custom-checkov-scanning-best-practices"></a>
+ Pour maintenir une posture de sécurité cohérente, alignez les politiques de sécurité de votre entreprise sur les politiques de Checkov.
+ Au cours des premières phases de mise en œuvre des politiques personnalisées de Checkov, vous pouvez utiliser l'option soft-fail de votre scan Checkov pour autoriser la fusion des iAc présentant des problèmes de sécurité. Au fur et à mesure que le processus arrive à maturité, passez de l'option soft-fail à l'option hardfail.

## Épopées
<a name="centralized-custom-checkov-scanning-epics"></a>

### Créez un référentiel Checkov central pour les politiques personnalisées
<a name="create-a-central-checkov-repository-for-custom-policies"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un référentiel Checkov central. | Créez un référentiel pour stocker les politiques Checkov personnalisées qui seront utilisées au sein de l'organisation.Pour un démarrage rapide, vous pouvez copier le contenu du référentiel de ce modèle dans votre GitHub [centralized-custom-checkov-sast ](https://github.com/aws-samples/centralized-custom-checkov-sast)référentiel central Checkov. | DevOps ingénieur | 
| Créez un référentiel pour les flux de travail réutilisables. | Si un référentiel pour les flux de travail réutilisables existe déjà, ou si vous prévoyez d'inclure des fichiers de flux de travail réutilisables dans le même référentiel que les politiques Checkov personnalisées, vous pouvez ignorer cette étape.Créez un GitHub référentiel pour héberger les flux de travail réutilisables. Les pipelines d'autres référentiels référenceront ce référentiel. | DevOps ingénieur | 

### Créez des flux de travail Checkov réutilisables et exemples
<a name="create-reusable-and-example-checkov-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez un flux de travail Checkov réutilisable. | Créez un flux de travail d' GitHub actions Checkov réutilisable (fichier YAML) dans le référentiel de flux de travail réutilisables. Vous pouvez adapter ce flux de travail réutilisable à partir du fichier de flux de travail fourni dans ce modèle.Un exemple de modification que vous pourriez vouloir apporter est de modifier le flux de travail réutilisable pour utiliser l'option soft-fail. Le réglage `soft-fail` sur `true` permet de terminer le travail avec succès même en cas d'échec du scan Checkov. Pour obtenir des instructions, consultez la section [Défaillance matérielle et logicielle](https://www.checkov.io/2.Basics/Hard%20and%20soft%20fail.html) dans la documentation de Checkov. | DevOps ingénieur | 
| Ajoutez un exemple de flux de travail. | Ajoutez un exemple de flux de travail Checkov qui fait référence au `reusable` flux de travail. Cela fournira un modèle expliquant comment réutiliser le `reusable` flux de travail. Dans le référentiel d'exemples, `checkov-source.yaml` se trouve le flux de travail réutilisable et `checkov-scan.yaml` l'exemple qui consomme`checkov-source`.Pour plus de détails sur la rédaction d'un exemple de flux de travail Checkov, voir [Informations supplémentaires](#centralized-custom-checkov-scanning-additional). | DevOps ingénieur | 

### Associer les politiques de l'entreprise aux politiques personnalisées de Checkov
<a name="associate-company-policies-to-checkov-custom-policies"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déterminez les politiques qui peuvent être appliquées avec Checkov. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/centralized-custom-checkov-scanning.html)Pour plus de détails sur la création de politiques personnalisées Checkov, consultez la section [Présentation des politiques personnalisées](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html) dans la documentation de Checkov. | Sécurité et conformité | 
| Ajoutez des politiques personnalisées de Checkov. | Convertissez les politiques d'entreprise identifiées en politiques Checkov personnalisées dans le référentiel central. Vous pouvez écrire des politiques Checkov simples en Python ou en YAML. | Sécurité | 

### Mettre en œuvre des politiques personnalisées Checkov centralisées
<a name="implement-centralized-checkov-custom-policies"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez le flux de travail réutilisable Checkov à tous les référentiels. | À ce stade, vous devriez avoir un exemple de flux de travail Checkov qui fait référence au flux de travail réutilisable. Copiez l'exemple de flux de travail Checkov qui fait référence au flux de travail réutilisable dans chaque référentiel qui l'exige. | DevOps ingénieur | 
| Créez un mécanisme pour garantir que Checkov s'exécute avant les fusions. | Pour garantir que le flux de travail Checkov est exécuté pour chaque pull request, créez une [vérification de statut](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) qui nécessite un flux de travail Checkov réussi avant de pouvoir fusionner les pull requests. GitHub vous permet d'exiger l'exécution de flux de travail spécifiques avant de pouvoir fusionner les pull requests. | DevOps ingénieur | 
| Créez un PAT à l'échelle de l'organisation et partagez-le en tant que secret. | Si votre GitHub organisation est visible publiquement, vous pouvez ignorer cette étape.Ce modèle nécessite que le flux de travail Checkov soit en mesure de télécharger des politiques personnalisées à partir du référentiel de politiques personnalisées de votre GitHub organisation. Vous devez fournir des autorisations permettant au flux de travail Checkov d'accéder à ces référentiels.Pour ce faire, [créez un jeton d'accès personnel](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) (PAT) autorisé à lire les référentiels de l'organisation. Partagez ce PAT avec les référentiels, soit sous forme de secret à l'échelle de l'organisation (si vous utilisez un forfait payant), soit sous forme de secret dans chaque référentiel (version gratuite). Dans l'exemple de code, le nom par défaut du secret est`ORG_PAT`. | DevOps ingénieur | 
| (Facultatif) Protégez les fichiers du flux de travail Checkov contre toute modification. | Pour protéger les fichiers du flux de travail Checkov contre les modifications indésirables, vous pouvez utiliser un `CODEOWNERS` fichier. Le `CODEOWNERS` fichier est généralement déployé à la racine du répertoire.Par exemple, pour demander l'approbation du `secEng` groupe de votre GitHub organisation lorsque le `checkov-scan.yaml` fichier est modifié, ajoutez ce qui suit au `CODEOWNERS` fichier d'un référentiel :<pre>[Checkov]<br />.github/workflows/checkov-scan.yaml @myOrg/secEng</pre>Un `CODEOWNERS` fichier est spécifique au référentiel dans lequel il se trouve. Pour protéger le flux de travail Checkov utilisé par le référentiel, vous devez ajouter (ou mettre à jour) un `CODEOWNERS` fichier dans chaque référentiel.Pour plus d'informations sur la protection des fichiers de flux de travail Checkov, voir [Informations supplémentaires](#centralized-custom-checkov-scanning-additional). Pour plus d'informations sur `CODEOWNERS` les fichiers, consultez la documentation officielle de votre CI/CD fournisseur (par exemple [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)). | DevOps ingénieur | 

## Ressources connexes
<a name="centralized-custom-checkov-scanning-resources"></a>
+ [Vue d'ensemble des politiques personnalisées de Checkov](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html)
+ [CloudFormation Analyse de configuration](https://www.checkov.io/7.Scan%20Examples/Cloudformation.html)
+ [GitHub Actions > Workflows réutilisables](https://docs.github.com/en/actions/using-workflows/reusing-workflows)

## Informations supplémentaires
<a name="centralized-custom-checkov-scanning-additional"></a>

**Écrire des fichiers de flux de travail Checkov**

Lorsque vous écrivez`checkov-scan.yaml`, réfléchissez au moment où vous voulez qu'il s'exécute. La `on` clé de niveau supérieur détermine le moment où le flux de travail s'exécute. Dans le référentiel d'exemple, le flux de travail s'exécute lorsqu'une pull request cible la `main` branche (et chaque fois que la branche source de cette pull request est modifiée). Le flux de travail peut également être exécuté selon les besoins grâce à la `workflow_dispatch` clé.

Vous pouvez modifier les conditions de déclenchement du flux de travail en fonction de la fréquence à laquelle vous souhaitez que le flux de travail s'exécute. Par exemple, vous pouvez modifier le flux de travail pour qu'il s'exécute chaque fois que du code est envoyé vers une branche en le `pull_request` remplaçant par `push` et en supprimant la `branches` clé.

Vous pouvez modifier l'exemple de fichier de flux de travail que vous avez créé dans un référentiel individuel. Par exemple, vous pouvez modifier le nom de la branche cible de `main` à `production` si un référentiel est structuré autour d'une `production` branche.

**Protection des fichiers de flux de travail Checkov**

L'analyse Checkov fournit des informations utiles sur d'éventuelles erreurs de configuration de sécurité. Cependant, certains développeurs peuvent percevoir cela comme un obstacle à leur productivité et tenter de supprimer ou de désactiver le flux de numérisation.

Il existe plusieurs moyens de résoudre ce problème, notamment une meilleure communication sur la valeur à long terme de l'analyse de sécurité et une documentation plus claire sur le déploiement d'une infrastructure sécurisée. Il s'agit d'approches « souples » importantes en matière de DevSecOps collaboration qui peuvent être considérées comme la solution à la cause première de ce problème. Cependant, vous pouvez également utiliser des contrôles techniques tels qu'un `CODEOWNERS` fichier comme garde-fous pour aider les développeurs à rester sur la bonne voie.

**Schéma de test dans un bac à sable**

Pour tester ce modèle dans un environnement sandbox, procédez comme suit :

1. Créez une nouvelle GitHub organisation. Créez un jeton avec accès en lecture seule à tous les référentiels de l'organisation. Ce jeton étant destiné à un environnement sandbox et non à un environnement payant, vous ne pourrez pas le stocker dans un secret à l'échelle de l'organisation.

1. Créez un `checkov` référentiel pour contenir la configuration Checkov et un `github-workflows` référentiel pour contenir la configuration du flux de travail réutilisable. Remplissez les référentiels avec le contenu du référentiel d'exemple.

1. Créez un référentiel d'applications, puis copiez et collez le `checkov-scan.yaml` flux de travail `.github/workflows` dans son dossier. Ajoutez un secret au référentiel qui contient le PAT que vous avez créé pour l'accès en lecture seule de l'organisation. Le secret par défaut est`ORG_PAT`.

1. Créez une pull request qui ajoute du Terraform ou CloudFormation du code au référentiel d'applications. Checkov doit scanner et renvoyer un résultat.

# Implémentez les diagnostics et le dépannage de Kubernetes basés sur l'IA grâce à l'intégration de K8sGPT et Amazon Bedrock
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale, Muskan., et Prafful Gupta, Amazon Web Services*

## Résumé
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

Ce modèle montre comment implémenter les diagnostics et le dépannage de Kubernetes basés sur l'IA en intégrant K8sGPT au modèle Anthropic Claude v2 disponible sur Amazon Bedrock. La solution fournit une analyse en langage naturel et des étapes de résolution des problèmes liés au cluster Kubernetes via une architecture hôte Bastion sécurisée. En combinant l'expertise de K8sGPT Kubernetes avec les capacités linguistiques avancées d'Amazon Bedrock DevOps , les équipes peuvent identifier et résoudre rapidement les problèmes liés aux clusters. Grâce à ces fonctionnalités, il est possible de réduire le temps moyen de résolution (MTTR) jusqu'à 50 %. 

Ce modèle cloud natif tire parti d'Amazon Elastic Kubernetes Service (Amazon EKS) pour la gestion de Kubernetes. Le modèle met en œuvre les meilleures pratiques de sécurité grâce à des rôles Gestion des identités et des accès AWS (IAM) appropriés et à l'isolation du réseau. Cette solution est particulièrement utile pour les entreprises qui souhaitent rationaliser leurs opérations Kubernetes et améliorer leurs capacités de résolution des problèmes grâce à l'assistance de l'IA.

## Conditions préalables et limitations
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS avec les autorisations appropriées
+ AWS Command Line Interface (AWS CLI) [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Un cluster Amazon EKS
+ Accès au modèle Anthropic Claude 2 sur [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Un hôte bastion avec les paramètres de groupe de sécurité requis
+ [K8sGPT installé](https://docs.k8sgpt.ai/getting-started/installation/)

**Limites**
+ L'analyse K8sGpt est limitée par la taille de la fenêtre contextuelle du modèle Claude v2.
+ Les limites tarifaires de l'API Amazon Bedrock s'appliquent en fonction des quotas de votre compte.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ Amazon EKS [version 1.31 ou ultérieure](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Modèle Claude 2](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) sur Amazon Bedrock
+ [K8SGPT v0.4.2 ou version ultérieure](https://github.com/k8sgpt-ai/k8sgpt/releases)

## Architecture
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

Le schéma suivant montre l'architecture des diagnostics Kubernetes basés sur l'IA à l'aide de K8sGPT intégré à Amazon Bedrock dans le. AWS Cloud

![\[Flux de travail pour les diagnostics Kubernetes à l'aide de K8sGPT intégré à Amazon Bedrock.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


L'architecture présente le flux de travail suivant :

1. Les développeurs accèdent à l'environnement via une connexion sécurisée à l'hôte Bastion. Cette EC2 instance Amazon sert de point d'entrée sécurisé et contient l'installation de l'interface de ligne de commande (CLI) K8SGPT et les configurations requises.

1. L'hôte Bastion, configuré avec des rôles IAM spécifiques, établit des connexions sécurisées au cluster Amazon EKS et aux points de terminaison Amazon Bedrock. K8sGPT est installé et configuré sur l'hôte Bastion pour effectuer une analyse du cluster Kubernetes.

1. Amazon EKS gère le plan de contrôle Kubernetes et les nœuds de travail, fournissant ainsi l'environnement cible pour l'analyse K8sGPT. Le service s'exécute sur plusieurs zones de disponibilité au sein d'un cloud privé virtuel (VPC), ce qui contribue à garantir une disponibilité et une résilience élevées. Amazon EKS fournit des données opérationnelles via l'API Kubernetes, ce qui permet une analyse complète des clusters.

1. K8sGPT envoie des données d'analyse à Amazon Bedrock, qui fournit le modèle de base Claude v2 (FM) pour le traitement du langage naturel. Le service traite l'analyse K8sGPT pour générer des explications lisibles par l'homme et propose des suggestions de correction détaillées en fonction des problèmes identifiés. Amazon Bedrock fonctionne comme un service d'IA sans serveur offrant une disponibilité et une évolutivité élevées.

**Note**  
Tout au long de ce flux de travail, IAM contrôle l'accès entre les composants par le biais de rôles et de politiques, en gérant l'authentification pour les interactions entre l'hôte Bastion, Amazon EKS et Amazon Bedrock. L'IAM met en œuvre le principe du moindre privilège et permet une communication interservices sécurisée dans l'ensemble de l'architecture.

**Automatisation et mise à l'échelle**

Les opérations K8sGPT peuvent être automatisées et mises à l'échelle sur plusieurs clusters Amazon EKS à l'aide de divers outils et outils. Services AWS Cette solution prend en charge l'intégration continue et l'intégration du déploiement continu (CI/CD) à l'aide de [Jenkins](https://www.jenkins.io/), d'[GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions) ou [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)pour une analyse planifiée. L'opérateur K8sGPT permet une surveillance continue au sein du cluster grâce à des fonctionnalités automatisées de détection des problèmes et de création de rapports. Pour les déploiements à l'échelle de l'entreprise, vous pouvez utiliser [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) pour planifier des scans et déclencher des réponses automatisées à l'aide de scripts personnalisés. AWS L'intégration du SDK permet un contrôle programmatique sur un large parc de clusters.

## Outils
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**Services AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.

**Autres outils**
+ [K8sGPT](https://k8sgpt.ai/) est un outil open source basé sur l'IA qui transforme la gestion de Kubernetes. Il agit en tant qu'expert en ingénierie de fiabilité des sites virtuels (SRE), analysant, diagnostiquant et résolvant automatiquement les problèmes liés au cluster Kubernetes. Les administrateurs peuvent interagir avec K8sGPT en langage naturel et obtenir des informations claires et exploitables sur l'état du cluster, les pannes de pods et les défaillances de service. Les analyseurs intégrés de l'outil détectent un large éventail de problèmes, des composants mal configurés aux contraintes de ressources, et fournissent des easy-to-understand explications et des solutions.

## Bonnes pratiques
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ Mettez en œuvre des contrôles d'accès sécurisés en utilisant AWS Systems Manager Session Manager for [Bastion Host Access](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html).
+ Assurez-vous que l'authentification K8sGPT utilise des rôles IAM dédiés dotés des autorisations de moindre privilège pour les interactions avec Amazon Bedrock et Amazon EKS. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.
+ Configurez le [balisage des ressources](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html), activez la CloudWatch [journalisation Amazon pour les pistes d'audit](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html) et implémentez l'[anonymisation des données](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/) pour les informations sensibles. 
+ Maintenez des sauvegardes régulières des configurations K8sGPT tout en configurant des programmes de numérisation automatisés pendant les heures creuses afin de minimiser l'impact opérationnel.

## Épopées
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### Ajoutez Amazon Bedrock à la liste des fournisseurs de backend AI.
<a name="add-br-to-ai-backend-provider-list"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez Amazon Bedrock comme fournisseur de backend AI pour K8sGPT. | Pour définir Amazon Bedrock comme fournisseur de [backend](https://docs.k8sgpt.ai/reference/providers/backend/) AI r pour K8sGPT, utilisez la commande suivante : AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>L'exemple de commande utilise `us-west-2` pour Région AWS. Toutefois, vous pouvez sélectionner une autre région, à condition que le cluster Amazon EKS et le modèle Amazon Bedrock correspondant soient disponibles et activés dans cette région sélectionnée.Pour vérifier qu'il `amazonbedrock` est ajouté à la liste des fournisseurs de backend AI et qu'il est en bon `Active` état, exécutez la commande suivante :<pre>k8sgpt auth list</pre>Voici un exemple du résultat attendu de cette commande :<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### Analyser les ressources à l'aide d'un filtre
<a name="scan-resources-using-a-filter"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Consultez la liste des filtres disponibles. | Pour voir la liste de tous les filtres disponibles, utilisez la AWS CLI commande suivante :<pre>k8sgpt filters list</pre>Voici un exemple du résultat attendu de cette commande :<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| Scannez un pod dans un espace de noms spécifique à l'aide d'un filtre. | Cette commande est utile pour le débogage ciblé de problèmes de pod spécifiques au sein d'un cluster Kubernetes, en utilisant les fonctionnalités d'Amazon Bedrock AI pour analyser et expliquer les problèmes détectés.Pour scanner un pod dans un espace de noms spécifique à l'aide d'un filtre, utilisez la AWS CLI commande suivante :<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>Voici un exemple du résultat attendu de cette commande :<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| Analysez un déploiement dans un espace de noms spécifique à l'aide d'un filtre. | Cette commande est utile pour identifier et résoudre les problèmes spécifiques au déploiement, en particulier lorsque l'état réel ne correspond pas à l'état souhaité.Pour analyser un déploiement dans un espace de noms spécifique à l'aide d'un filtre, utilisez la AWS CLI commande suivante :<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>Voici un exemple du résultat attendu de cette commande :<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.</pre> | AWS DevOps | 
| Scannez un nœud dans un espace de noms spécifique à l'aide d'un filtre. | Pour scanner un nœud dans un espace de noms spécifique à l'aide d'un filtre, utilisez la AWS CLI commande suivante :<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>Voici un exemple du résultat attendu de cette commande :<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### Analyser les résultats détaillés
<a name="analyze-detailed-outputs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Obtenez des résultats détaillés. |  Pour obtenir des résultats détaillés, utilisez la AWS CLI commande suivante :<pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>Voici un exemple du résultat attendu de cette commande :<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| Vérifiez les pods problématiques. | Pour vérifier la présence de pods problématiques spécifiques, utilisez la AWS CLI commande suivante :<pre>kubectl get pods --all-namespaces | grep -v Running</pre>Voici un exemple du résultat attendu de cette commande :<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| Obtenez des informations spécifiques aux applications. | Cette commande est particulièrement utile lorsque :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)Pour obtenir des informations spécifiques à l'application, utilisez la commande suivante :<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>Voici un exemple du résultat attendu de cette commande :<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## Ressources connexes
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**Blogues AWS**
+ [Automatisez le dépannage d'Amazon EKS à l'aide d'un flux de travail Amazon Bedrock agentic](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [Utilisez K8sGPT et Amazon Bedrock pour simplifier la maintenance des clusters Kubernetes](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS documentation**
+ AWS CLI [commandes : [create-cluster et describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Commencez à utiliser Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) (documentation Amazon EKS)
+ [Bonnes pratiques de sécurité dans l'IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentation IAM)

**Autres ressources**
+ [K8SGPT](https://k8sgpt.ai/)

# Détectez automatiquement les modifications et lancez différents CodePipeline pipelines pour un monorepo dans CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha et Ricardo Morais, Amazon Web Services*

## Résumé
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Remarque** : n' AWS Cloud9 est plus disponible pour les nouveaux clients. Les clients existants de AWS Cloud9 peuvent continuer à utiliser le service normalement. [En savoir plus](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Ce modèle vous permet de détecter automatiquement les modifications apportées au code source d'une application monorepo, puis de lancer un pipeline AWS CodePipeline qui exécute l'intégration AWS CodeCommit et la livraison continues (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), ce qui garantit une meilleure visibilité, un partage facilité du code et une collaboration, une standardisation et une découvrabilité améliorées.

La solution décrite dans ce modèle n'effectue aucune analyse de dépendance entre les microservices du monorepo. Il détecte uniquement les modifications du code source et lance le CI/CD pipeline correspondant.

Le modèle est utilisé AWS Cloud9 comme environnement de développement intégré (IDE) et AWS Cloud Development Kit (AWS CDK) pour définir une infrastructure en utilisant deux CloudFormation piles : `MonoRepoStack` et`PipelinesStack`. La `MonoRepoStack` pile crée le monorepo dans AWS CodeCommit et la AWS Lambda fonction qui initie les pipelines. CI/CD La `PipelinesStack` pile définit l'infrastructure de votre pipeline.

**Important**  
Le flux de travail de ce modèle est une preuve de concept (PoC). Nous vous recommandons de l'utiliser uniquement dans un environnement de test. Si vous souhaitez utiliser l'approche de ce modèle dans un environnement de production, consultez les [meilleures pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation Gestion des identités et des accès AWS (IAM) et apportez les modifications requises à vos rôles IAM et. Services AWS 

## Conditions préalables et limitations
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Conditions préalables**
+ Un AWS compte actif.
+ AWS Command Line Interface (AWS CLI), installé et configuré. Pour plus d'informations, consultez la section [Installation, mise à jour et désinstallation du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dans la AWS CLI documentation.  
+ Python 3 et`pip`, installé sur votre machine locale. Pour plus d'informations, consultez la [documentation Python](https://www.python.org/). 
+ AWS CDK, installé et configuré. Pour plus d'informations, consultez la section [Mise en route avec le AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dans la AWS CDK documentation. 
+ Un AWS Cloud9 IDE, installé et configuré. Pour plus d'informations, consultez la section [Configuration AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) dans la AWS Cloud9 documentation. 
+ Le référentiel de [déclencheurs multi-pipelines GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), cloné sur votre machine locale. 
+ Répertoire existant contenant le code d'application que vous souhaitez utiliser pour créer et déployer CodePipeline.
+ Connaissance et expérience des DevOps meilleures pratiques en matière de AWS Cloud. Pour vous familiariser davantage DevOps, vous pouvez utiliser le modèle [Créez une architecture faiblement couplée avec des microservices en utilisant des DevOps pratiques et AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) sur le site Web du guide AWS prescriptif.  

## Architecture
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

Le schéma suivant montre comment utiliser le AWS CDK pour définir une infrastructure à deux AWS CloudFormation piles : `MonoRepoStack` et`PipelinesStack`.

![\[Flux de travail permettant d'utiliser le kit AWS CDK pour définir une infrastructure à deux CloudFormation piles.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


Le schéma suivant illustre le flux de travail suivant :

1. Le processus bootstrap utilise le AWS CDK pour créer les AWS CloudFormation piles et`MonoRepoStack`. `PipelinesStack`

1. La `MonoRepoStack` pile crée le CodeCommit référentiel pour votre application et la fonction `monorepo-event-handler` Lambda qui est lancée après chaque validation.

1. La `PipelinesStack` pile crée les pipelines CodePipeline initiés par la fonction Lambda. Chaque microservice doit disposer d'un pipeline d'infrastructure défini.

1. Le pipeline pour `microservice-n` est initié par la fonction Lambda et démarre ses CI/CD étapes isolées basées sur le code source dans. CodeCommit

1. Le pipeline pour `microservice-1` est initié par la fonction Lambda et démarre ses CI/CD étapes isolées basées sur le code source dans. CodeCommit

Le schéma suivant montre le déploiement des AWS CloudFormation stacks `MonoRepoStack` et `PipelinesStack` dans un compte.

![\[Déploiement des CloudFormation stacks MonoRepoStack et PipelinesStack dans un compte AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un utilisateur modifie le code dans l'un des microservices de l'application.

1. L'utilisateur transfère les modifications d'un dépôt local vers un CodeCommit dépôt.

1. L'activité push lance la fonction Lambda qui reçoit tous les push vers le référentiel. CodeCommit 

1. La fonction Lambda lit un paramètre dans Parameter Store, une fonctionnalité de AWS Systems Manager, pour récupérer l'ID de validation le plus récent. Le paramètre a le format de dénomination :`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Si le paramètre n'est pas trouvé, la fonction Lambda lit le dernier ID de validation dans le CodeCommit référentiel et enregistre la valeur renvoyée dans Parameter Store.

1. Après avoir identifié l'ID de validation et les fichiers modifiés, la fonction Lambda identifie les pipelines pour chaque répertoire de microservices et lance le pipeline requis. CodePipeline 

## Outils
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via CloudFormation celle-ci.
+ [Python](https://www.python.org/) est un langage de programmation qui permet de travailler rapidement et d'intégrer des systèmes plus efficacement.

**Code**

Le code source et les modèles de ce modèle sont disponibles dans le référentiel de déclencheurs [multi-pipelines GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Bonnes pratiques
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Cet exemple d'architecture n'inclut pas de solution de surveillance pour l'infrastructure déployée. Si vous souhaitez déployer cette solution dans un environnement de production, nous vous recommandons d'activer la surveillance. Pour plus d'informations, consultez la section [Surveiller vos applications sans serveur avec CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) dans la documentation AWS Serverless Application Model (AWS SAM).
+ Lorsque vous modifiez l'exemple de code fourni par ce modèle, suivez les [meilleures pratiques de développement et de déploiement de l'infrastructure cloud](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) décrites dans la AWS CDK documentation.
+ Lorsque vous définissez vos pipelines de microservices, consultez les [meilleures pratiques de sécurité décrites](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dans la AWS CodePipeline documentation.
+ Vous pouvez également vérifier les meilleures pratiques de votre AWS CDK code à l'aide de l'utilitaire [cdk-nag](https://github.com/cdklabs/cdk-nag). Cet outil utilise un ensemble de règles, regroupées par packs, pour évaluer votre code. Les packs disponibles sont les suivants :
  + [AWS Bibliothèque de solutions](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Sécurité de la Health Insurance Portability and Accountability Act (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Institut national des normes et de la technologie (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 version 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Norme de sécurité des données de l'industrie des cartes de paiement (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Épopées
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configuration de l'environnement
<a name="set-up-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un environnement Python virtuel. | Dans votre AWS Cloud9 IDE, créez un environnement Python virtuel et installez les dépendances requises en exécutant la commande suivante :`make install` | Developer | 
| Bootstrap le Compte AWS et Région AWS pour le. AWS CDK | Démarrez le fichier requis Compte AWS et la région en exécutant la commande suivante :`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Ajouter un nouveau pipeline pour un microservice
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Ajoutez votre exemple de code dans le répertoire de votre application. | Ajoutez le répertoire contenant votre exemple de code d'application au `monorepo-sample` répertoire du référentiel de déclencheurs GitHub [AWS CodeCommit monorepo multi-pipelines](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) clonés. | Developer | 
| Modifiez le fichier `monorepo-main.json`. | Ajoutez le nom du répertoire du code de votre application et le nom du pipeline au `monorepo-main.json` fichier du référentiel cloné. | Developer | 
| Créez le pipeline. | Dans le `Pipelines` répertoire du référentiel, ajoutez le pipeline `class` de votre application. Le répertoire contient deux exemples de fichiers, `pipeline_hotsite.py` et`pipeline_demo.py`. Chaque fichier comporte trois étapes : source, génération et déploiement.Vous pouvez copier l'un des fichiers et y apporter des modifications conformément aux exigences de votre application.  | Developer | 
| Modifiez le fichier `monorepo_config.py`. | Dans`service_map`, ajoutez le nom du répertoire de votre application et la classe que vous avez créée pour le pipeline.Par exemple, le code suivant montre une définition de pipeline dans le `Pipelines` répertoire qui utilise un fichier nommé `pipeline_mysample.py` avec une `MySamplePipeline` classe :<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Developer | 

### Déployez la MonoRepoStack pile
<a name="deploy-the-monorepostack-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la AWS CloudFormation pile. | Déployez la AWS CloudFormation `MonoRepoStack` pile avec les valeurs de paramètres par défaut dans le répertoire racine du référentiel cloné en exécutant la `make deploy-core` commande.Vous pouvez modifier le nom du dépôt en exécutant la `make deploy-core monorepo-name=<repo_name>` commande.Vous pouvez déployer les deux pipelines simultanément à l'aide de la `make deploy monorepo-name=<repo_name>` commande. | Developer | 
| Validez le CodeCommit référentiel. | Vérifiez que vos ressources ont été créées en exécutant la `aws codecommit get-repository --repository-name <repo_name>` commande. Étant donné que la CloudFormation pile crée le CodeCommit référentiel dans lequel le monorepo est stocké, n'exécutez pas la `cdk destroy MonoRepoStack ` commande si vous avez commencé à y apporter des modifications. | Developer | 
| Validez les résultats de la CloudFormation pile. | Vérifiez que la CloudFormation `MonoRepoStack` pile est correctement créée et configurée en exécutant la commande suivante :<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Déployez la PipelinesStack pile
<a name="deploy-the-pipelinesstack-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la CloudFormation pile. | La AWS CloudFormation `PipelinesStack` pile doit être déployée après le déploiement de la `MonoRepoStack` pile. La taille de la pile augmente lorsque de nouveaux microservices sont ajoutés à la base de code du monorepo et est redéployée lorsqu'un nouveau microservice est intégré.Déployez la PipelinesStack pile en exécutant la `make deploy-pipelines` commande.Vous pouvez également déployer simultanément les deux pipelines en exécutant la `make deploy monorepo-name=<repo_name>` commande.L'exemple de sortie suivant montre comment le `PipelinesStacks` déploiement imprime URLs les microservices à la fin de l'implémentation :<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Validez les résultats de la AWS CloudFormation pile. | Vérifiez que la AWS CloudFormation `PipelinesStacks` pile est correctement créée et configurée en exécutant la commande suivante :<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez vos AWS CloudFormation piles. | Exécutez la commande `make destroy`. | Developer | 
| Supprimez les compartiments S3 de vos pipelines. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## Résolution des problèmes
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| J'ai rencontré AWS CDK des problèmes. | Consultez la section [Résolution AWS CDK des problèmes courants](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) dans la documentation AWS CDK. | 
| J'ai envoyé mon code de microservice, mais le pipeline de microservices n'a pas fonctionné. | **Validation de configuration***Vérifiez la configuration de la branche :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Validez les fichiers de configuration :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Résolution des problèmes sur la console***AWS CodePipeline chèques :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda résolution des problèmes :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Je dois redéployer tous mes microservices.  | Il existe deux approches pour forcer le redéploiement de tous les microservices. Choisissez l'option qui correspond à vos besoins.**Approche 1 : supprimer un paramètre dans Parameter Store**Cette méthode implique la suppression d'un paramètre spécifique dans le magasin de paramètres de Systems Manager qui suit le dernier ID de validation utilisé pour le déploiement. Lorsque vous supprimez ce paramètre, le système est obligé de redéployer tous les microservices lors du prochain déclencheur, car il le perçoit comme un nouvel état.Étapes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Avantages :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Inconvénients :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Approche 2 : envoyer un commit dans chaque sous-dossier monorepo**Cette méthode consiste à apporter une modification mineure et à l'insérer dans chaque sous-dossier de microservice du monorepo pour initier leurs pipelines individuels.Étapes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Avantages :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Inconvénients :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Ressources connexes
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Intégration et livraison continues (CI/CD) à l'aide de CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentation)AWS CDK 
+ [module aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (référence d'API)AWS CDK 

# Intégrer un référentiel Bitbucket à AWS Amplify à l'aide d'AWS CloudFormation
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation"></a>

*Alwin Abraham, Amazon Web Services*

## Résumé
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-summary"></a>

AWS Amplify vous aide à déployer et à tester rapidement des sites Web statiques sans avoir à configurer l'infrastructure généralement requise. Vous pouvez déployer l'approche de ce modèle si votre entreprise souhaite utiliser Bitbucket pour le contrôle de source, que ce soit pour migrer le code d'application existant ou créer une nouvelle application. En utilisant AWS CloudFormation pour configurer automatiquement Amplify, vous offrez une visibilité sur les configurations que vous utilisez.

Ce modèle décrit comment créer un pipeline et un environnement de déploiement continus (CI/CD) frontaux en utilisant AWS CloudFormation pour intégrer un référentiel Bitbucket à AWS Amplify. L'approche du modèle signifie que vous pouvez créer un pipeline frontal Amplify pour des déploiements répétables.

## Conditions préalables et limitations
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-prereqs"></a>

**Prérequis******
+ Un compte Amazon Web Services (AWS) actif
+ Un compte Bitbucket actif avec accès administrateur
+ [Accès à un terminal utilisant [cURL](https://curl.se/) ou l'application Postman](https://www.postman.com/)
+ Connaissance d'Amplify
+ Connaissance d'AWS CloudFormation
+ Connaissance des fichiers au format YAML

## Architecture
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-architecture"></a>

![\[Diagram showing user interaction with Bitbucket repository connected to AWS Amplify in AWS Cloud region.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/images/25d73a9d-d2ae-40bc-9ebc-57f9bd13884a.png)


**Pile technologique**
+ Amplify
+ AWS CloudFormation
+ Bitbucket

## Outils
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-tools"></a>
+ [AWS Amplify — Amplify](https://docs.aws.amazon.com/amplify/) aide les développeurs à développer et à déployer des applications mobiles et Web basées sur le cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation est un service qui vous aide à modéliser et à configurer vos ressources AWS afin que vous puissiez passer moins de temps à gérer ces ressources et plus de temps à vous concentrer sur vos applications exécutées dans AWS.
+ [Bitbucket](https://bitbucket.org/) — Bitbucket est une solution de gestion de référentiels Git conçue pour les équipes professionnelles. Il vous offre un emplacement central pour gérer les référentiels Git, collaborer sur votre code source et vous guider tout au long du processus de développement.

 

**Code**

Le `bitbucket-amplify.yml` fichier (joint) contient le CloudFormation modèle AWS pour ce modèle.

## Épopées
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-epics"></a>

### Configuration du référentiel Bitbucket
<a name="configure-the-bitbucket-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| (Facultatif) Créez un dépôt Bitbucket.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Vous pouvez également utiliser un dépôt Bitbucket existant. | DevOps ingénieur | 
| Ouvrez les paramètres de l'espace de travail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingénieur | 
| Créez un OAuth consommateur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingénieur | 
| Obtenez un jeton OAuth d'accès.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)`curl -X POST -u "KEY:SECRET" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials `Remplacez `KEY` et `SECRET` par la clé et le secret que vous avez enregistrés précédemment. 2. Enregistrez le jeton d'accès sans utiliser les guillemets. Le jeton n'est valide que pour une durée limitée et la durée par défaut est de deux heures. Vous devez exécuter le CloudFormation modèle AWS dans ce délai. | DevOps ingénieur | 

### Création et déploiement de la CloudFormation pile AWS
<a name="create-and-deploy-the-aws-cloudformation-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Téléchargez le CloudFormation modèle AWS. | Téléchargez le CloudFormation modèle `bitbucket-amplify.yml` AWS (ci-joint). Ce modèle crée le CI/CD pipeline dans Amplify, en plus du projet et de la branche Amplify. |  | 
| Créez et déployez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)5. Choisissez **Next**, puis **Create Stack**. | DevOps ingénieur | 

### Testez le CI/CD pipeline
<a name="test-the-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le code dans la branche de votre référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Pour plus d'informations à ce sujet, consultez les [commandes Git de base](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html) dans la documentation de Bitbucket.  | Développeur d’applications | 

## Ressources connexes
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-resources"></a>

[Méthodes d'authentification](https://developer.atlassian.com/bitbucket/api/2/reference/meta/authentication) (documentation Atlassian)

## Pièces jointes
<a name="attachments-24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/attachments/attachment.zip)

# Lancez un CodeBuild projet sur des comptes AWS à l'aide de Step Functions et d'une fonction proxy Lambda
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function"></a>

*Richard Milner-Watts et Amit Anjarlekar, Amazon Web Services*

## Résumé
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-summary"></a>

Ce modèle montre comment lancer un CodeBuild projet AWS de manière asynchrone sur plusieurs comptes AWS à l'aide d'AWS Step Functions et d'une fonction de proxy AWS Lambda. Vous pouvez utiliser l'exemple de machine à états Step Functions du modèle pour tester le succès de votre CodeBuild projet.

CodeBuild vous aide à lancer des tâches opérationnelles à l'aide de l'interface de ligne de commande AWS (AWS CLI) à partir d'un environnement d'exécution entièrement géré. Vous pouvez modifier le comportement de votre CodeBuild projet au moment de l'exécution en remplaçant les variables d'environnement. En outre, vous pouvez l'utiliser CodeBuild pour gérer les flux de travail. Pour plus d'informations, consultez [Service Catalog Tools](https://service-catalog-tools-workshop.com/tools.html) sur le site Web d'AWS Workshop et [Schedule jobs in Amazon RDS for PostgreSQL using AWS et EventBridge Amazon sur le blog de base de données CodeBuild AWS](https://aws.amazon.com/blogs/database/schedule-jobs-in-amazon-rds-for-postgresql-using-aws-codebuild-and-amazon-eventbridge/).

## Conditions préalables et limitations
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-prereqs"></a>

**Conditions préalables**
+ Deux comptes AWS actifs : un compte source pour appeler une fonction proxy Lambda avec Step Functions et un compte cible pour créer un CodeBuild exemple de projet à distance

**Limites**
+ Ce modèle ne peut pas être utilisé pour copier [des artefacts](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html) entre comptes.

## Architecture
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-architecture"></a>

Le schéma suivant montre l'architecture créée par ce modèle.

![\[Schéma d'architecture du lancement d'un CodeBuild projet sur plusieurs comptes AWS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/857ba3ae-eb9a-4d6b-b73e-e596f41c8cb8.png)


Le schéma suivant illustre le flux de travail suivant :

1. La machine d'état Step Functions analyse la carte d'entrée fournie et invoque la fonction proxy Lambda (`codebuild-proxy-lambda`) pour chaque compte, région et projet que vous avez définis.

1. La fonction de proxy Lambda utilise AWS Security Token Service (AWS STS) pour assumer un rôle de proxy IAM (`codebuild-proxy-role`), qui est associé à une politique IAM (`codebuild-proxy-policy`) dans le compte cible.

1. À l'aide du rôle assumé, la fonction Lambda lance le CodeBuild projet et renvoie l'ID de CodeBuild tâche. La machine à états Step Functions boucle et interroge la CodeBuild tâche jusqu'à ce qu'elle reçoive un statut de réussite ou d'échec.

La logique de la machine à états est illustrée dans l'image suivante.

![\[Flux de travail de la machine à états Step Functions\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/4729bbfc-79ad-455d-a85a-b96cce00f432.png)


**Pile technologique**
+ AWS CloudFormation
+ CodeBuild
+ IAM
+ Lambda
+ Step Functions
+ X-Ray

## Outils
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-tools"></a>
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [AWS CloudFormation Designer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html) fournit un éditeur JSON et YAML intégré qui vous permet de visualiser et de modifier des CloudFormation modèles.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) est un service d'orchestration sans serveur qui vous permet de combiner les fonctions AWS Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise.
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) vous aide à collecter des données sur les demandes traitées par votre application et fournit des outils que vous pouvez utiliser pour visualiser, filtrer et obtenir des informations sur ces données afin d'identifier les problèmes et les opportunités d'optimisation.

**Code**

L'exemple de code pour ce modèle est disponible dans le référentiel GitHub [Cross Account CodeBuild Proxy](https://github.com/aws-samples/cross-account-codebuild-proxy). Ce modèle utilise la bibliothèque AWS Lambda Powertools for Python pour fournir des fonctionnalités de journalisation et de suivi. Pour plus d'informations sur cette bibliothèque et ses utilitaires, consultez [Powertools for AWS Lambda (Python)](https://docs.powertools.aws.dev/lambda/python/latest/).

## Bonnes pratiques
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-best-practices"></a>

1. Ajustez les valeurs du temps d'attente dans la machine d'état Step Function afin de minimiser les demandes d'interrogation concernant le statut du travail. Utilisez le temps d'exécution prévu pour le CodeBuild projet.

1. Ajustez la `MaxConcurrency` propriété de la carte dans Step Functions pour contrôler le nombre de CodeBuild projets pouvant être exécutés en parallèle.

1. Si nécessaire, consultez l'exemple de code pour connaître l'état de préparation à la production. Déterminez quelles données peuvent être enregistrées par la solution et déterminez si le CloudWatch chiffrement Amazon par défaut est suffisant.

## Épopées
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-epics"></a>

### Créez la fonction de proxy Lambda et le rôle IAM associé dans le compte source
<a name="create-the-lambda-proxy-function-and-associated-iam-role-in-the-source-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Enregistrez le compte AWS IDs. | Un compte AWS IDs est requis pour configurer l'accès entre les comptes.Enregistrez l'ID de compte AWS pour vos comptes source et cible. Pour plus d'informations, consultez la section [Trouver votre identifiant de compte AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) dans la documentation IAM. | AWS DevOps | 
| Téléchargez les CloudFormation modèles AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Dans les CloudFormation modèles AWS, `<SourceAccountId>` il s'agit de l'ID de compte AWS du compte source et `<TargetAccountId>` de l'ID de compte AWS du compte cible. | AWS DevOps | 
| Créez et déployez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Vous devez créer la CloudFormation pile AWS pour la fonction proxy Lambda avant de créer des ressources dans des comptes cibles. Lorsque vous créez une politique de confiance dans un compte cible, le rôle IAM est traduit du nom du rôle en identifiant interne. C'est pourquoi le rôle IAM doit déjà exister. | AWS DevOps | 
| Confirmez la création de la fonction proxy et de la machine à états. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Créez un rôle IAM dans le compte cible et lancez un exemple CodeBuild de projet
<a name="create-an-iam-role-in-the-target-account-and-launch-a-sample-codebuild-project"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez et déployez la CloudFormation pile AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Vérifiez la création de l'exemple de CodeBuild projet.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Testez la fonction de proxy Lambda entre comptes
<a name="test-the-cross-account-lambda-proxy-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez la machine à états. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Validez les variables d'environnement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

## Résolution des problèmes
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| L'exécution de Step Functions prend plus de temps que prévu. | Ajustez les `MaxConcurrency` propriétés de la carte dans la machine d'état Step Function pour contrôler le nombre de CodeBuild projets pouvant être exécutés en parallèle. | 
| L'exécution des CodeBuild travaux prend plus de temps que prévu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | 

# Gérez le basculement multi-AZ pour les clusters EMR à l'aide d'Application Recovery Controller
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra et Nidhi Sharma, Amazon Web Services*

## Résumé
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Ce modèle propose une stratégie de reprise après sinistre efficace pour les charges de travail Amazon EMR afin de garantir la haute disponibilité et la cohérence des données dans plusieurs zones de disponibilité au sein d'une même zone. Région AWS La conception utilise [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) et un [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) pour gérer les opérations de basculement et la distribution du trafic pour un cluster EMR basé sur Apache Spark. 

Dans des conditions standard, la zone de disponibilité principale héberge un cluster EMR actif et une application dotée de fonctionnalités complètes read/write . En cas de défaillance inattendue d'une zone de disponibilité, le trafic est automatiquement redirigé vers la zone de disponibilité secondaire, où un nouveau cluster EMR est lancé. Les deux zones de disponibilité accèdent à un bucket Amazon Simple Storage Service (Amazon S3) partagé via des points de terminaison de [passerelle dédiés](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html), ce qui garantit une gestion cohérente des données. Cette approche minimise les temps d'arrêt et permet une restauration rapide des charges de travail critiques liées au Big Data en cas de défaillance de la zone de disponibilité. La solution est utile dans des secteurs tels que la finance ou le commerce de détail, où les analyses en temps réel sont cruciales.

## Conditions préalables et limitations
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Conditions préalables**
+ Un actif [Compte AWS](https://aws.amazon.com/resources/create-account/)
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) sur Amazon Elastic Compute Cloud (Amazon) EC2
+ Accès depuis le nœud principal du cluster EMR à Amazon S3.
+ AWS Infrastructure multi-AZ

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez la page [Points de terminaison et quotas du service](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien vers le service.

**Versions du produit**
+ [Amazon EMR 6.x et versions ultérieures](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Architecture
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Pile technologique cible**
+ Cluster Amazon EMR
+ Amazon Application Recovery Controller
+ Application Load Balancer
+ Compartiment Amazon S3
+ Points de terminaison de passerelle pour Amazon S3

**Architecture cible**

![\[Architecture pour un mécanisme de restauration automatique avec Application Recovery Controller.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Cette architecture assure la résilience des applications en utilisant plusieurs zones de disponibilité et en mettant en œuvre un mécanisme de restauration automatique via l'Application Recovery Controller.

1. L'Application Load Balancer achemine le trafic vers l'environnement Amazon EMR actif, qui est généralement le cluster EMR principal de la zone de disponibilité principale.

1. Le cluster EMR actif traite les demandes d'application et se connecte à Amazon S3 via son point de terminaison dédié à la passerelle Amazon S3 pour les opérations de lecture et d'écriture.

1. Amazon S3 sert de référentiel de données central et est potentiellement utilisé comme point de contrôle ou comme stockage partagé entre des clusters EMR. Les clusters EMR préservent la cohérence des données lorsqu'ils écrivent directement sur Amazon S3 via le `s3://` protocole et le [système de fichiers EMR (EMRFS).](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html) 

1. Application Recovery Controller surveille en permanence l'état de santé de la zone de disponibilité principale et gère automatiquement les opérations de basculement lorsque cela est nécessaire.

1. Si l'Application Recovery Controller détecte une défaillance dans le cluster EMR principal, il prend les mesures suivantes :
   + Lance le processus de basculement vers le cluster EMR secondaire dans la zone de disponibilité 2.
   + Met à jour les configurations de routage pour diriger le trafic vers le cluster secondaire.

## Outils
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Services AWS**
+ [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) vous**** aide à gérer et à coordonner la restauration de vos applications dans toutes Régions AWS les zones de disponibilité. Ce service simplifie le processus et améliore la fiabilité de la restauration des applications en réduisant les étapes manuelles requises par les outils et processus traditionnels.
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) fonctionne au niveau de la couche application, qui est la septième couche du modèle d'interconnexion des systèmes ouverts (OSI). Il répartit le trafic applicatif entrant sur plusieurs cibles, telles que EC2 les instances, dans plusieurs zones de disponibilité. La disponibilité de votre application s'en trouve accrue.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) est une plateforme de mégadonnées qui fournit le traitement des données, l'analyse interactive et l'apprentissage automatique pour les frameworks open source tels qu'Apache Spark, Apache Hive et Presto.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) fournit une interface de service Web simple que vous pouvez utiliser pour stocker et récupérer n'importe quel volume de données, à tout moment et en tout lieu. Grâce à ce service, vous pouvez facilement créer des applications qui utilisent le stockage cloud natif.
+ Les [points de terminaison de passerelle pour Amazon S3](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) sont des passerelles que vous spécifiez dans votre table de routage pour accéder à Amazon S3 depuis votre cloud privé virtuel (VPC) via le réseau. AWS 

## Bonnes pratiques
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Suivez les [AWS meilleures pratiques en matière de sécurité, d'identité et de conformité](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all) afin de garantir une architecture robuste et sécurisée.
+ Alignez l'architecture avec le [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/).
+ Utilisez Amazon S3 Access Grants pour gérer l'accès à Amazon S3 depuis votre cluster EMR basé sur Spark. Pour plus de détails, consultez le billet de blog [Use Amazon EMR with S3 Access Grants to Spark Access to Amazon](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/) S3.
+ [Améliorez les performances de Spark avec Amazon S3](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html).

## Épopées
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Connectez-vous au AWS Management Console. | Connectez-vous au en [AWS Management Console](https://console.aws.amazon.com/)tant qu'utilisateur IAM. Pour obtenir des instructions, consultez la [AWS documentation](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Configurez le AWS CLI. **** | Installez le AWS CLI ou mettez-le à jour vers la dernière version afin de pouvoir interagir avec Services AWS le AWS Management Console. Pour obtenir des instructions, consultez la [AWS CLI documentation](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Déployez une application Spark sur votre cluster EMR
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un compartiment S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Créez un cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Configurez les paramètres de sécurité pour le cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Connectez-vous au cluster EMR. | Connectez-vous au nœud principal du cluster EMR via SSH à l'aide de la paire de clés fournie.Assurez-vous que le fichier de paires de clés se trouve dans le même répertoire que votre application.Exécutez les commandes suivantes pour définir les autorisations correctes pour la paire de clés et établir la connexion SSH :<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Déployez l'application Spark. | Après avoir établi la connexion SSH, vous serez dans la console Hadoop.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Surveillez l'application Spark. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### Transférer le trafic vers une autre zone de disponibilité
<a name="shift-traffic-to-another-availability-zone"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un Application Load Balancer. | Configurez le groupe cible qui achemine le trafic entre les nœuds principaux Amazon EMR déployés dans deux zones de disponibilité au sein d'un. Région AWSPour obtenir des instructions, consultez la section [Création d'un groupe cible pour votre Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) dans la documentation d'Elastic Load Balancing. | AWS DevOps | 
| Configurez le décalage zonal dans Application Recovery Controller. | Au cours de cette étape, vous allez utiliser la [fonction de changement de zone](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) d'Application Recovery Controller pour transférer le trafic vers une autre zone de disponibilité.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)Pour utiliser le AWS CLI, consultez les [exemples d'utilisation du AWS CLI avec décalage de zone dans](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) la documentation d'Application Recovery Controller. | AWS DevOps | 
| Vérifiez la configuration et la progression du changement de zone. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## Ressources connexes
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI commandes :
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Configuration des types d'instances de cluster Amazon EMR et meilleures pratiques pour les instances Spot (documentation](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) Amazon EMR)
+ [Bonnes pratiques de sécurité dans l'IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentation IAM)
+ [Utiliser des profils d'instance](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (documentation IAM)
+ [Utiliser le décalage de zone et le décalage automatique de zone pour restaurer les applications dans ARC](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) (documentation Application Recovery Controller)

# Gérez les blue/green déploiements de microservices vers plusieurs comptes et régions à l'aide des services de code AWS et des clés multirégionales AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu et Anand Krishna Varanasi, Amazon Web Services*

## Résumé
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Ce modèle décrit comment déployer une application de microservices globale à partir d'un compte AWS central vers plusieurs comptes de charge de travail et régions conformément à une stratégie de blue/green déploiement. Le modèle prend en charge les éléments suivants :
+ Les logiciels sont développés dans un compte central, tandis que les charges de travail et les applications sont réparties sur plusieurs comptes et régions AWS.
+ Une seule clé multirégionale du système de gestion des clés AWS (AWS KMS) est utilisée pour le chiffrement et le déchiffrement afin de couvrir la reprise après sinistre.
+ La clé KMS est spécifique à une région et doit être maintenue ou créée dans trois régions différentes pour les artefacts du pipeline. Une clé multirégionale KMS permet de conserver le même identifiant de clé dans toutes les régions.
+ Le modèle de branchement du flux de travail Git est implémenté avec deux branches (development et main) et le code est fusionné à l'aide de pull requests (PRs). La fonction AWS Lambda déployée à partir de cette pile crée un PR entre la branche de développement et la branche principale. La fusion des relations publiques avec la succursale principale lance un CodePipeline pipeline AWS, qui orchestre le flux d'intégration continue et de livraison continue (CI/CD) et déploie les stacks sur tous les comptes.

Ce modèle fournit un exemple de configuration d'infrastructure sous forme de code (IaC) via AWS CloudFormation Stacks pour illustrer ce cas d'utilisation. Le blue/green déploiement de microservices est mis en œuvre à l'aide d'AWS CodeDeploy.

## Conditions préalables et limitations
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Conditions préalables**
+ Quatre comptes AWS actifs :
  + Un compte d'outils pour gérer le pipeline de code et maintenir le CodeCommit référentiel AWS.
  + Trois comptes de charge de travail (test) pour déployer la charge de travail des microservices.
+ Ce modèle utilise les régions suivantes. Si vous souhaitez utiliser d'autres régions, vous devez apporter les modifications appropriées aux piles multirégionales AWS CodeDeploy et AWS KMS.
  + Compte Tools (AWS CodeCommit) : `ap-south-1`
  + Compte de charge de travail (test) 1 : `ap-south-1`
  + Compte de charge de travail (test) 2 : `eu-central-1`
  + Compte de charge de travail (test) 3 : `us-east-1`
+ Trois compartiments Amazon Simple Storage Service (Amazon S3) pour les régions de déploiement de chaque compte de charge de travail. (Ils sont appelés`S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` et `S3BUCKETNAMETESTACCOUNT3 ` plus tard dans ce modèle.)

  Par exemple, vous pouvez créer ces compartiments dans des comptes et des régions spécifiques avec des noms de compartiments uniques comme suit (remplacez *xxxx* par un nombre aléatoire) :

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Limites**

Le modèle utilise AWS CodeBuild et d'autres fichiers de configuration pour déployer un exemple de microservice. Si vous avez un autre type de charge de travail (par exemple, sans serveur), vous devez mettre à jour toutes les configurations pertinentes.

## Architecture
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Pile technologique cible**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Architecture cible**

![\[Architecture cible pour le déploiement de microservices sur plusieurs comptes et régions\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automatisation et mise à l'échelle**

La configuration est automatisée à l'aide de modèles de CloudFormation pile AWS (iAc). Il peut être facilement adapté à plusieurs environnements et comptes.

## Outils
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Services AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatise les déploiements vers Amazon Elastic Compute Cloud (Amazon EC2) ou des instances sur site, les fonctions AWS Lambda ou les services Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Outils supplémentaires**
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué open source qui fonctionne avec le CodeCommit référentiel AWS.
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs. Ce modèle utilise Docker pour créer et tester des images de conteneurs localement.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) et [cfn-nag](https://github.com/stelligent/cfn_nag) sont des outils open source qui vous aident à examiner les CloudFormation piles pour détecter d'éventuelles erreurs ou problèmes de sécurité.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel [ Blue/Green des déploiements GitHub mondiaux dans plusieurs régions et comptes](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Épopées
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Configurer les variables d’environnement
<a name="set-up-environment-variables"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exportez les variables d'environnement pour le déploiement de la CloudFormation pile. | Définissez les variables d'environnement qui seront utilisées comme entrée dans les CloudFormation piles ultérieurement dans ce modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package et déploiement des CloudFormation stacks pour l'infrastructure
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Clonez le [référentiel d'échantillons](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) dans un nouveau référentiel sur votre lieu de travail :<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Package des ressources Cloudformation. | Au cours de cette étape, vous devez empaqueter les artefacts locaux CloudFormation auxquels les modèles font référence pour créer les ressources d'infrastructure requises pour des services tels qu'Amazon Virtual Private Cloud (Amazon VPC) et Application Load Balancer.Les modèles sont disponibles dans le `Infra` dossier du référentiel de code.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Validez les modèles de package. | Validez les modèles de package :<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Déployez les fichiers du package dans les comptes de charge de travail, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Envoyez un exemple d'image et redimensionnez Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Transférez un exemple d'image dans le référentiel Amazon ECR. | Transférez un exemple d'image (NGINX) dans le référentiel Amazon Elastic Container Registry (Amazon ECR) `web` nommé (tel que défini dans les paramètres). Vous pouvez personnaliser l'image selon vos besoins.Pour vous connecter et définir les informations d'identification permettant de transférer une image vers Amazon ECR, suivez les instructions de la documentation [Amazon ECR.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)Les commandes sont les suivantes :<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Faites évoluer Amazon ECS et vérifiez l'accès. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configurer les services et les ressources de code
<a name="set-up-code-services-and-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un CodeCommit référentiel dans le compte Tools. | Créez un CodeCommit référentiel dans le compte d'outils à l'aide du `codecommit.yaml` modèle, qui se trouve dans le `code` dossier du GitHub référentiel. Vous ne devez créer ce référentiel que dans la seule région où vous prévoyez de développer le code.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Créez un compartiment S3 pour gérer les artefacts générés par CodePipeline. | Créez un compartiment S3 pour gérer les artefacts CodePipeline générés à l'aide du `pre-reqs-bucket.yaml` modèle, qui se trouve dans le `code` dossier du GitHub référentiel. Les piles doivent être déployées dans les trois comptes de charge de travail (test) et d'outils et dans les régions.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configurez une clé KMS multirégionale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configurez le CodeBuild projet dans le compte Outils. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configurez CodeDeploy dans les comptes de charge de travail. | Utilisez le `codedeploy.yaml` modèle figurant dans le `code` dossier du GitHub référentiel pour le configurer CodeDeploy dans les trois comptes de charge de travail. La sortie de `mainInfraStack` inclut les Amazon Resource Names (ARNs) du cluster Amazon ECS et l'écouteur Application Load Balancer.Les valeurs des piles d'infrastructure sont déjà exportées, elles sont donc importées par les modèles de CodeDeploy pile.<pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configuration CodePipeline dans le compte d'outils
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un pipeline de code dans le compte Tools. | Dans le compte des outils, exécutez la commande :<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Fournissez un accès CodePipeline et des CodeBuild rôles dans la politique clé d'AWS KMS et dans la politique de compartiment S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Appelez et testez le pipeline
<a name="call-and-test-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Transférez les modifications au CodeCommit référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez toutes les ressources déployées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Résolution des problèmes
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les modifications que vous avez apportées au référentiel ne sont pas déployées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Ressources connexes
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Transférer une image Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentation Amazon ECR)
+ [Connectez-vous à un CodeCommit référentiel AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentation AWS)
+ [Résolution des problèmes liés à AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentation AWS)

# Surveillez les référentiels Amazon ECR pour détecter les autorisations génériques à l'aide d'AWS et d'AWS Config CloudFormation
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar, Wassim Benhallam et Sajid Momin, Amazon Web Services*

## Résumé
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

Sur le cloud Amazon Web Services (AWS), Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs qui prend en charge les référentiels privés dotés d'autorisations basées sur les ressources à l'aide d'AWS Identity and Access Management (IAM).

IAM prend en charge le caractère générique `*` « » dans les attributs de ressource et d'action, ce qui facilite le choix automatique de plusieurs éléments correspondants. Dans votre environnement de test, vous pouvez autoriser tous les utilisateurs AWS authentifiés à accéder à un référentiel Amazon ECR en utilisant l'[autorisation `ecr:*` générique](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html) dans un élément principal de votre déclaration de politique de [dépôt](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html). L'autorisation `ecr:*` générique peut être utile lors du développement et des tests dans des comptes de développement qui ne peuvent pas accéder à vos données de production.

Cependant, vous devez vous assurer que l'autorisation `ecr:*` générique n'est pas utilisée dans vos environnements de production car elle peut entraîner de graves failles de sécurité. L'approche de ce modèle vous aide à identifier les référentiels Amazon ECR qui contiennent l'autorisation `ecr:*` générique dans les déclarations de politique relatives aux référentiels.   Le modèle fournit des étapes et un CloudFormation modèle AWS pour créer une règle personnalisée dans AWS Config. Une fonction AWS Lambda surveille ensuite les déclarations de politique de votre référentiel Amazon ECR pour `ecr:*` détecter les autorisations génériques. S'il trouve des déclarations de politique de dépôt non conformes, Lambda demande à AWS Config d'envoyer un événement à EventBridge EventBridge Amazon, puis lance une rubrique Amazon Simple Notification Service (Amazon SNS). La rubrique SNS vous informe par e-mail des déclarations de politique de dépôt non conformes.

## Conditions préalables et limitations
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Interface de ligne de commande AWS (AWS CLI), installée et configurée. Pour plus d'informations à ce sujet, consultez la section [Installation, mise à jour et désinstallation de l'interface de ligne de commande AWS dans la](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) documentation de l'interface de ligne de commande AWS.
+ Un référentiel Amazon ECR existant avec une déclaration de politique jointe, installé et configuré dans votre environnement de test. Pour plus d'informations à ce sujet, consultez les [sections Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) et [Définition d'une déclaration de politique de dépôt](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) dans la documentation Amazon ECR.
+ AWS Config, configuré dans votre région AWS préférée. Pour plus d'informations à ce sujet, consultez [Getting started with AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) dans la documentation AWS Config.
+ Le `aws-config-cloudformation.template` fichier (joint), téléchargé sur votre ordinateur local.

 

**Limites**
+ La solution de ce modèle est régionale et vos ressources doivent être créées dans la même région. 

## Architecture
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

Le schéma suivant montre comment AWS Config évalue les déclarations de politique du référentiel Amazon ECR. 

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


Le schéma suivant illustre le flux de travail suivant :

1. AWS Config initie une règle personnalisée. 

1. La règle personnalisée invoque une fonction Lambda pour évaluer la conformité des déclarations de politique du référentiel Amazon ECR. La fonction Lambda identifie ensuite les déclarations de politique de référentiel non conformes.

1. La fonction Lambda envoie le statut de non-conformité à AWS Config.

1. AWS Config envoie un événement à EventBridge.

1. EventBridge publie les notifications de non-conformité sur une rubrique SNS.

1. Amazon SNS envoie une alerte par e-mail à vous ou à un utilisateur autorisé.

**Automatisation et mise à l'échelle**

La solution de ce modèle peut surveiller un certain nombre de déclarations de politique relatives au référentiel Amazon ECR, mais toutes les ressources que vous souhaitez évaluer doivent être créées dans la même région.

## Outils
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS vous CloudFormation aide à modéliser et à configurer vos ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie. Vous pouvez utiliser un modèle pour décrire vos ressources et leurs dépendances, puis les lancer et les configurer ensemble sous forme de pile, au lieu de gérer les ressources individuellement. Vous pouvez gérer et approvisionner des piles sur plusieurs comptes AWS et régions AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) — AWS Config fournit une vue détaillée de la configuration des ressources AWS dans votre compte AWS. Elle indique comment les ressources sont liées entre elles et comment elles ont été configurées dans le passé, pour que vous puissiez observer comment les configurations et les relations changent au fil du temps.
+ [Amazon ECR****](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) —**** Amazon Elastic Container Registry (Amazon ECR) est un service de registre d'images de conteneurs géré par AWS qui est sécurisé, évolutif et fiable. Amazon ECR prend en charge les référentiels privés avec des autorisations basées sur les ressources à l'aide d' IAM.                                 
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) — Amazon EventBridge est un service de bus d'événements sans serveur que vous pouvez utiliser pour connecter vos applications à des données provenant de diverses sources. EventBridge fournit un flux de données en temps réel provenant de vos applications, de vos applications SaaS et des services AWS à des cibles telles que les fonctions AWS Lambda, les points de terminaison d'invocation HTTP utilisant des destinations d'API ou les bus d'événements d'autres comptes.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — AWS Lambda est un service de calcul qui prend en charge l'exécution de code sans provisionner ni gérer de serveurs. Lambda exécute le code uniquement lorsque cela est nécessaire et se met à l’échelle automatiquement, qu’il s’agisse de quelques requêtes par jour ou de milliers de requêtes par seconde. Vous payez uniquement le temps de calcul que vous utilisez. Vous n'exposez aucuns frais quand votre code n'est pas exécuté.
+ [Amazon SNS —](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Amazon Simple Notification Service (Amazon SNS) coordonne et gère la distribution ou l'envoi de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail. Les abonnés reçoivent tous les messages publiés dans les rubriques auxquelles ils sont abonnés, et tous les abonnés à une rubrique reçoivent les mêmes messages. 

**Code**

Le code de ce modèle est disponible dans le `aws-config-cloudformation.template` fichier (joint).

## Épopées
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### Création de la CloudFormation pile AWS
<a name="create-the-aws-cloudformation-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la CloudFormation pile AWS. | Créez une CloudFormation pile AWS en exécutant la commande suivante dans l'interface de ligne de commande AWS :<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Testez la règle personnalisée AWS Config
<a name="test-the-aws-config-custom-rule"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la règle personnalisée AWS Config. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## Pièces jointes
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)

# Optimisez les déploiements multicomptes sans serveur en utilisant les flux de travail et AWS CDK Actions GitHub
<a name="optimize-multi-account-serverless-deployments"></a>

*Sarat Chandra Pothula et VAMSI KRISHNA SUNKAVALLI, Amazon Web Services*

## Résumé
<a name="optimize-multi-account-serverless-deployments-summary"></a>

Organisations qui déploient une infrastructure sans serveur sur plusieurs Comptes AWS environnements sont souvent confrontées à des défis tels que la duplication de code, les processus manuels et les pratiques incohérentes. La solution de ce modèle montre comment utiliser les flux de travail réutilisables AWS Cloud Development Kit (AWS CDK) in Go et GitHub Actions pour rationaliser la gestion de l'infrastructure sans serveur multi-comptes. Cette solution montre comment définir les ressources cloud sous forme de code, mettre en œuvre des processus de integration/continuous déploiement continu standardisés (CI/CD) et créer des composants modulaires et réutilisables. 

En utilisant ces outils, les entreprises peuvent gérer efficacement les ressources entre comptes, mettre en œuvre des pipelines de déploiement cohérents et simplifier les architectures sans serveur complexes. Cette approche améliore également la sécurité et la conformité en appliquant des pratiques normalisées d'utilisation Comptes AWS, ce qui permet d'améliorer la productivité et de réduire les erreurs lors du développement et du déploiement d'applications sans serveur.

## Conditions préalables et limitations
<a name="optimize-multi-account-serverless-deployments-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Gestion des identités et des accès AWS Les [rôles et autorisations](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html) (IAM) sont en place pour le processus de déploiement. Cela inclut les autorisations pour accéder aux référentiels Amazon Elastic Container Registry (Amazon ECR), AWS Lambda créer des fonctions et toute autre ressource requise sur l'ensemble de la cible. Comptes AWS
+ AWS Command Line Interface [(AWS CLI) version 2.9.11 ou ultérieure, [installée et configurée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html).](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ AWS Cloud Development Kit (AWS CDK) [version 2.114.1 ou ultérieure, [installée et démarrée](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)
+ Go 1.22 ou version ultérieure, [installé.](https://go.dev/doc/install)
+ [Docker 24.0.6 ou version ultérieure, installé.](https://docs.docker.com/engine/install/)

**Limites**
+ **Compatibilité linguistique** — Go est un langage populaire pour les applications sans serveur. Cependant, outre Go, il AWS CDK prend en charge d'autres langages de programmation, notamment C\$1, Java, Python et TypeScript. Si votre organisation possède déjà des bases de code ou une expertise dans d'autres langages, vous devrez peut-être adapter ou apprendre Go pour utiliser pleinement la solution décrite dans le modèle.
+ **Courbe d'apprentissage** — L' AWS CDK adoption de flux de travail « Go » (s'il s'agit d'une nouveauté pour l'entreprise) et GitHub réutilisables peut impliquer une courbe d'apprentissage pour les développeurs et les DevOps équipes. Une formation et une documentation peuvent être nécessaires pour garantir une adoption harmonieuse et une utilisation efficace de ces technologies.

## Architecture
<a name="optimize-multi-account-serverless-deployments-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Architecture des flux de travail AWS CDK et GitHub Actions pour la gestion de l'infrastructure sans serveur multi-comptes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/8d61917b-bd27-44fa-ae95-55358aaf8812/images/a4b36793-95c7-42f7-a92f-99b4722c9c64.png)


Cette solution exécute les étapes suivantes :

1. Le développeur clone le référentiel, crée une nouvelle branche et modifie le code de l'application dans son environnement local.

1. Le développeur valide ces modifications et envoie la nouvelle branche dans le GitHub référentiel.

1. Le développeur crée une pull request dans le GitHub référentiel, proposant de fusionner sa branche de fonctionnalité ou de nouvelle fonctionnalité dans la branche principale.

1. Cette pull request déclenche le flux de travail des GitHub actions d'intégration continue (CI). Les flux de travail CI et de déploiement continu (CD) de ce modèle utilisent des flux de travail réutilisables, qui sont des modèles modulaires prédéfinis qui peuvent être partagés et exécutés dans différents projets ou référentiels. Les flux de travail réutilisables favorisent la standardisation et l'efficacité CI/CD des processus.

1. Le flux de travail CI configure l'environnement nécessaire, génère une balise Docker pour l'image et crée l'image Docker à l'aide du code de l'application. 

1. Le flux de travail CI s'authentifie AWS en utilisant le rôle central Compte AWS GitHub OIDC. Pour les flux de travail CI, le rôle Compte AWS GitHub OIDC central utilise AWS Security Token Service (AWS STS) pour obtenir des informations d'identification temporaires. Ces informations d'identification permettent au rôle de créer et de transférer des images Docker vers le référentiel Amazon ECR de la centrale. Compte AWS

1. Le flux de travail CI envoie l'image Docker créée vers Amazon ECR.

1. Le flux de travail CI stocke la balise d'image dans le magasin de paramètres de Systems Manager.

1. Une fois le flux de travail CI terminé avec succès, la balise d'image Docker est sortie. 

1. Lors du déclenchement du flux de travail sur CD, le développeur saisit manuellement la balise d'image de l'image Docker qu'il souhaite déployer. Cette balise d'image correspond à la balise qui a été générée et envoyée à Amazon ECR pendant le flux de travail CI.

1. Le développeur déclenche manuellement le flux de travail sur CD, qui utilise le flux de travail réutilisable sur CD. 

1. Le flux de travail du CD s'authentifie à AWS l'aide du rôle central Compte AWS GitHub OIDC. Pour le flux de travail sur CD, AWS STS il est d'abord utilisé pour assumer le rôle central de l' Compte AWS GitHub OIDC. Ce rôle assume ensuite les rôles d'amorçage du CDK pour les déploiements de comptes cibles. 

1. Le flux de travail sur CD utilise le AWS CDK pour synthétiser des AWS CloudFormation modèles.

1. Le flux de travail CD déploie l'application sur la cible Compte AWS à l'aide de CDK deploy, en utilisant la balise image spécifiée manuellement pour la fonction Lambda.

## Outils
<a name="optimize-multi-account-serverless-deployments-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS. CloudFormation fait partie intégrante du processus de AWS CDK déploiement. Le CDK synthétise les CloudFormation modèles, puis les utilise CloudFormation pour créer ou mettre à jour les ressources de l' AWS environnement.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets.

**Autres outils**
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [Go](https://go.dev/doc/install) est un langage de programmation open source pris en charge par Google.

**Référentiel de code**

Le code de ce modèle est disponible dans le cicd-github-actions référentiel GitHub [aws-cdk-golang-serverless-](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions).

## Bonnes pratiques
<a name="optimize-multi-account-serverless-deployments-best-practices"></a>
+ **Conception modulaire** : organisez votre AWS CDK code en structures ou en piles modulaires et réutilisables, afin de promouvoir la réutilisation et la maintenabilité du code sur plusieurs comptes et projets.
+ **Séparation des préoccupations** — Séparez le code d'infrastructure du code d'application, ce qui permet un déploiement et une gestion indépendants de chaque composant.
+ **Gestion des versions et immuabilité** : traitez votre infrastructure comme du code (IaC) et utilisez Git pour le contrôle de version. Adoptez des principes d'infrastructure immuables en créant de nouvelles ressources au lieu de modifier les ressources existantes.
+ **Tests et validation** : mettez en œuvre des stratégies de test complètes, notamment des tests unitaires, des tests d'intégration et end-to-end des tests, afin de garantir l'exactitude et la fiabilité de votre AWS CDK code et de vos déploiements.
+ **Sécurité et conformité** : suivez les meilleures pratiques en matière de AWS sécurité, telles que l'accès au moindre privilège, les communications sécurisées et le chiffrement des données. Mettez en œuvre des contrôles de conformité et des mécanismes d'audit pour garantir le respect des politiques organisationnelles et des exigences réglementaires. Mettez en œuvre les meilleures pratiques de sécurité pour les images de conteneur, telles que l'analyse des vulnérabilités, l'application de la signature des images et le respect des exigences de conformité de votre entreprise.
+ **Surveillance et journalisation** : configurez des mécanismes de surveillance et de journalisation pour suivre l'état et les performances de vos applications et infrastructures sans serveur. Services AWS À utiliser comme Amazon CloudWatch AWS CloudTrail, et à des AWS X-Ray fins de surveillance et d'audit.
+ **Automatisation et CI/CD** : utilisez des flux de travail GitHub réutilisables et d'autres CI/CD outils pour automatiser les processus de création, de test et de déploiement, afin de garantir des déploiements cohérents et reproductibles sur plusieurs comptes.
+ **Gestion de l'environnement** : maintenez des environnements distincts (par exemple, développement, mise en scène et production). Mettez en œuvre des stratégies pour promouvoir les changements entre les environnements, en garantissant des tests et une validation appropriés avant les déploiements en production.
+ **Documentation et collaboration** — Documentez le code de votre infrastructure, les processus de déploiement et les meilleures pratiques pour faciliter le partage des connaissances et la collaboration au sein de votre équipe.
+ **Optimisation des coûts** — Mettez en œuvre des stratégies de surveillance et d'optimisation des coûts, telles que la rationalisation des ressources, l'utilisation de l'auto-scaling et la mise à profit de services d'optimisation des AWS coûts tels que et. AWS Budgets AWS Cost Explorer
+ **Reprise après sinistre et sauvegarde** : planifiez des scénarios de reprise après sinistre en mettant en œuvre des mécanismes de sauvegarde et de restauration pour vos applications sans serveur et vos ressources d'infrastructure.
+ **Amélioration continue** — Passez régulièrement en revue et mettez à jour vos pratiques, outils et processus afin de les aligner sur les meilleures pratiques, les recommandations de sécurité et les avancées technologiques les plus récentes de l'écosystème sans serveur.
+ **Améliorez le niveau de sécurité** : [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)à utiliser pour améliorer le niveau de sécurité de votre cloud privé virtuel (VPC) en configurant les points de terminaison VPC d'interface pour Amazon ECR et Parameter Store. AWS Lambda AWS Systems Manager 

## Épopées
<a name="optimize-multi-account-serverless-deployments-epics"></a>

### Configuration des environnements
<a name="set-up-the-environments"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un référentiel Amazon ECR dans le centre Compte AWS. | Pour partager des images de conteneurs entre plusieurs Comptes AWS, vous devez configurer l'accès entre comptes pour Amazon ECR. Tout d'abord, créez un référentiel Amazon ECR dans le centre Compte AWS.Pour créer un référentiel Amazon ECR, exécutez la commande suivante :<pre>aws ecr create-repository --repository-name sample-repo</pre>Dans une tâche ultérieure, accordez l'accès pull à l'autre Comptes AWS personne qui doit utiliser l'image du conteneur. | AWS DevOps | 
| Ajoutez des autorisations entre comptes au référentiel Amazon ECR. | Pour ajouter des autorisations entre comptes au référentiel Amazon ECR dans le système central Compte AWS, exécutez le code suivant :<pre>{<br />  "Version": "2008-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "LambdaECRImageRetrievalPolicy",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />      "Condition": {<br />        "StringLike": {<br />          "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*"<br />        }<br />      }<br />    },<br />    {<br />      "Sid": "new statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<Target_Account_ID>:root"<br />        },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />    }<br />  ] <br />}</pre> | AWS DevOps | 
| Configurez un rôle pour le rôle GitHub OIDC dans la centrale Compte AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Démarrez l' AWS environnement dans la cible Comptes AWS. | Configurez un environnement CDK dans un environnement spécifique Région AWS qui permet Compte AWS les déploiements entre comptes à partir d'un compte central et applique le principe du moindre privilège au rôle d'exécution. CloudFormation Pour [démarrer un](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) AWS environnement, exécutez la commande suivante :<pre>cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy></pre> | AWS DevOps | 
| Accordez l'accès aux rôles Compte AWS OIDC centraux aux rôles Compte AWS bootstrap cibles. | Le bootstrap du CDK crée les rôles IAM suivants, conçus pour être assumés par le central au Compte AWS cours des différentes étapes du processus de déploiement du CDK :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Chaque rôle dispose d'autorisations spécifiques adaptées à son objectif, conformément au principe du moindre privilège. Le `Target_Account_ID` et `Target_Region` dans le nom de chaque rôle indique que ces rôles sont uniques selon Comptes AWS les différentes régions. Cette approche permet une identification et une gestion claires dans les configurations multi-comptes et multi-régions.<pre>Target Account CDK Bootstrap Roles<br />arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Pour mettre à jour la politique d'autorisation pour le rôle OIDC dans la centrale Compte AWS, utilisez le code suivant :<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "sts:AssumeRole",<br />            "Resource": [<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>"<br />            ]<br />        }<br />    ]<br /> }<br /></pre> | AWS DevOps | 

### Créez l'image Docker
<a name="build-the-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel du projet. | Pour cloner le [GitHub dépôt](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions) de ce modèle, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git</pre> | AWS DevOps | 
| Accédez au chemin Dockerfile. | Pour accéder au chemin Dockerfile, exécutez la commande suivante :<pre>cd lambda</pre> | AWS DevOps | 
| Authentifiez Docker avec Amazon ECR. | Amazon ECR nécessite un accès sécurisé à vos référentiels de conteneurs privés. En signant de cette manière, vous autorisez Docker sur votre machine ou CI/CD environnement local à interagir avec Amazon ECR en toute sécurité.Pour authentifier Docker auprès d'Amazon ECR, exécutez la commande suivante :<pre>aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com</pre>Révisez les espaces réservés `AWS_REGION` et `AWS_Account_ID` utilisez vos informations. | AWS DevOps | 
| Développez l’image Docker. | Pour créer l'image Docker, exécutez la commande suivante :<pre>docker build --platform linux/arm64 -t sample-app .</pre> | AWS DevOps | 
| Marquez et appuyez sur l'image Docker. | Pour étiqueter et transférer l'image Docker vers le référentiel Amazon ECR, exécutez les commandes suivantes :<pre>docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre><pre>docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre>Révisez les espaces réservés `AWS_Account_ID``AWS_REGION`,`ECR_REPOSITORY`, et `DOCKER_TAG` avec vos informations. | AWS DevOps | 

### Déployez l' AWS CDK application
<a name="deploy-the-cdk-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Synthétisez la pile CDK avec des variables spécifiques à l'environnement. | Pour générer le CloudFormation modèle de votre infrastructure tel que défini dans votre code CDK, exécutez la commande suivante :<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth</pre>Modifiez les espaces réservés suivants avec vos informations :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Déployez la pile CDK. | Pour déployer la pile CDK sur votre Compte AWS, exécutez la commande suivante. L'`--require-approval never`indicateur signifie que le CDK approuvera et exécutera automatiquement *toutes les* modifications. Cela inclut les modifications que le CDK signalerait normalement comme nécessitant une révision manuelle (telles que les modifications de la politique IAM ou la suppression de ressources). Assurez-vous que votre code CDK et votre CI/CD pipeline sont bien testés et sécurisés avant d'utiliser le `--require-approval never` drapeau dans les environnements de production.<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never</pre> | AWS DevOps | 

### Automatisez CI/CD à l'aide GitHub des workflows Actions
<a name="automate-ci-cd-using-github-actions-workflows"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une branche de fonctionnalités et ajoutez vos modifications. | Utilisez le référentiel cloné que vous avez créé précédemment, créez une branche de fonctionnalités, puis ajoutez vos modifications au code de l'application. Utilisez les commandes suivantes :<pre>git checkout -b <feature_branch><br />git add .<br />git commit -m "add your changes"<br />git push origin <feature_branch></pre>Voici des exemples de modifications :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)GitHub Les actions utiliseront les flux de travail réutilisables et déclencheront les CI/CD pipelines. | AWS DevOps | 
| Fusionnez vos modifications. | Créez une pull request et fusionnez vos modifications avec la commande principale. | AWS DevOps | 

## Résolution des problèmes
<a name="optimize-multi-account-serverless-deployments-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `AccessDenied`des erreurs lors du déploiement de ressources entre Comptes AWS, par exemple,`AccessDenied: User not authorized to perform: "sts:AssumeRole"`. | Pour résoudre ce problème, procédez comme suit pour vérifier les autorisations entre comptes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Problèmes de compatibilité dus à des incohérences de version, par exemple une `undefined: awscdkStack` erreur avec une version obsolète du CDK. | Pour résoudre ce problème, procédez comme suit pour vérifier que vous utilisez les versions requises de AWS CDK and Go :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Défaillances du pipeline CI/CD, par exemple, en `Error: No such file or directory` raison d'une configuration YAML incorrecte ou de branches protégées`Permission denied`. | Pour résoudre les problèmes liés à la configuration GitHub des actions, vérifiez que les flux de travail réutilisables sont correctement référencés et configurés. | 

## Ressources connexes
<a name="optimize-multi-account-serverless-deployments-resources"></a>

**Ressources AWS**
+ [AWS Bonnes pratiques en matière de sécurité, d'identité et de conformité](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [AWS CDK Atelier](https://cdkworkshop.com/60-go.html)
+ [AWS Bibliothèque de kits de développement Cloud](https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2)
+ [Création d'une fonction Lambda à l'aide d'une image de conteneur](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [Identity and Access Management pour Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html)
+ [Utilisation du kit AWS CDK dans Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

**Autres ressources**
+ [Configuration d'OpenID Connect dans Amazon Web Services (documentation](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)) GitHub 
+ [Documentation sur le Golang](https://golang.org/doc/)
+ [Démarrage rapide pour les GitHub actions](https://docs.github.com/en/actions/writing-workflows/quickstart) (GitHub documentation)
+ [Réutilisation des flux de travail](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (GitHub documentation)

# Provisionner AWS Service Catalog des produits basés sur AWS CloudFormation des modèles à l'aide d' GitHub actions
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Ashish Bhatt et Ruchika Modi, Amazon Web Services*

## Résumé
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

Ce modèle fournit aux organisations une approche rationalisée utilisant des [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)produits et des portefeuilles pour fournir des services standardisés et conformes à Services AWS toutes les équipes. [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)permet de combiner les composants essentiels des produits et des portefeuilles Service Catalog pour le provisionnement de l'infrastructure réseau de base. AWS Cloud Ce modèle favorise également DevOps les pratiques en intégrant l'infrastructure en tant que code (IaC) dans les flux de travail de développement automatisés à l'aide d'[GitHub actions](https://github.com/features/actions).

AWS Service Catalog permet aux entreprises de créer et de gérer des services informatiques approuvés sur AWS, offrant des avantages tels que la standardisation, le contrôle centralisé, le provisionnement en libre-service et la gestion des coûts. En automatisant le déploiement des portefeuilles et des produits Service Catalog par le biais d' GitHub actions, les entreprises peuvent effectuer les opérations suivantes :
+ Réalisez des déploiements cohérents et reproductibles. 
+ Utilisez le contrôle de version pour IaC. 
+ Intégrez la gestion des ressources cloud aux flux de développement existants. 

Cette combinaison rationalise les opérations dans le cloud, renforce la conformité et accélère la fourniture de services approuvés tout en réduisant les erreurs manuelles et en améliorant l'efficacité globale.

## Conditions préalables et limitations
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS 
+ Accès au [GitHub référentiel](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Compréhension de base de AWS CloudFormation et AWS Service Catalog
+ Un compartiment Amazon Simple Storage Service (Amazon S3) pour héberger des modèles CloudFormation 
+ Rôle Gestion des identités et des accès AWS (IAM) nommé `github-actions` qui est utilisé pour la connectivité entre et GitHub AWS

**Limites**
+ Le code réutilisable de ce modèle a été testé uniquement avec GitHub des actions.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**

La solution de ce modèle a été créée à l'aide des actions [GitHub Marketplace](https://github.com/marketplace) suivantes et de leurs versions respectives :
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## Architecture
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

Le schéma suivant montre l'architecture de cette solution.

![\[Utiliser GitHub des actions pour approvisionner les produits Service Catalog sur la base CloudFormation de modèles.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. Les administrateurs ou les ingénieurs de plateforme CloudFormation transfèrent les modèles standardisés vers un GitHub référentiel, où ils sont conservés. Le GitHub dépôt contient également des flux de travail qui automatisent le provisionnement à l' AWS Service Catalog aide GitHub d'actions.

1. GitHub Actions déclenche un flux de travail qui se connecte à l' AWS Cloud aide d'un fournisseur OpenID Connect (OIDC) pour approvisionner Service Catalog.

1. Service Catalog contient le portefeuille et les produits que les développeurs peuvent directement utiliser pour fournir AWS des ressources standardisées. Ce modèle regroupe AWS des ressources telles que les clouds privés virtuels (VPCs), les sous-réseaux, les passerelles NAT et Internet, ainsi que les tables de routage.

1. Une fois que le développeur a créé un produit Service Catalog, Service Catalog le convertit en AWS ressources préconfigurées et standardisées. Les développeurs gagnent ainsi du temps car ils n'ont pas besoin de provisionner des ressources individuelles et de les configurer manuellement.

## Outils
<a name="provision-aws-service-catalog-products-using-github-actions-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS. Il s'agit d'un service d'infrastructure sous forme de code (IaC) qui peut être facilement utilisé comme l'un des types de produits AWS Service Catalog.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html)vous permet de gérer de manière centralisée le catalogue des services informatiques approuvés AWS. Les utilisateurs finaux peuvent déployer rapidement uniquement les services informatiques approuvés dont ils ont besoin, en respectant les contraintes définies par votre organisation.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Autres**
+ [GitHub Actions](https://docs.github.com/en/actions) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions). Le dépôt contient les fichiers intéressants suivants :
+ `github/workflows`:
  + `e2e-test.yaml`— Ce fichier appelle`workflow.yaml`, qui est le [flux de travail réutilisable](https://docs.github.com/en/actions/sharing-automations/reusing-workflows). Ce flux de travail est déclenché dès qu'il y a un commit et un push sur une branche.
  + `workflow.yaml`— Ce fichier contient le flux de travail réutilisable pour cette solution et est configuré avec `workflow_call` comme déclencheur. En tant que flux de travail réutilisable, il `workflow.yaml` peut être appelé depuis n'importe quel autre flux de travail.
+ `templates`:
  + `servicecatalog-portfolio.yaml`— Ce CloudFormation modèle inclut des ressources qui fournissent le portefeuille Service Catalog et le produit Service Catalog. Le modèle contient un ensemble de paramètres utilisés lors du provisionnement du portefeuille et des produits Service Catalog. Un paramètre accepte l'URL d'un fichier Amazon S3 où le modèle `vpc.yaml` est chargé. Bien que ce modèle inclut le `vpc.yaml` fichier pour provisionner AWS les ressources, vous pouvez également utiliser le paramètre URL du fichier S3 pour la configuration.
  + `vpc.yaml`— Ce CloudFormation modèle contient AWS des ressources à ajouter au produit Service Catalog. AWS les ressources incluent les VPCs sous-réseaux, les passerelles Internet, les passerelles NAT et les tables de routage. Le `vpc.yaml` modèle est un exemple de la manière dont vous pouvez utiliser n'importe quel CloudFormation modèle avec un modèle de produit et de portefeuille Service Catalog.

## Bonnes pratiques
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+ Consultez les [meilleures pratiques de sécurité AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html) dans la AWS Service Catalog documentation. 
+ Consultez [la section Renforcement de la sécurité pour GitHub les actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions) dans la GitHub documentation.

## Épopées
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### Configuration d'un poste de travail local
<a name="set-up-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez Git sur votre poste de travail local. | Pour installer et configurer Git sur votre poste de travail local, utilisez les instructions [Getting Started — Install Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) de la documentation Git. | Développeur d’applications | 
| Clonez le dépôt GitHub du projet. | Pour cloner le dépôt GitHub du projet, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingénieur | 

### Configurer le fournisseur OIDC
<a name="set-up-the-oidc-provider"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un fournisseur OIDC. | Créez un fournisseur OpenID Connect (OIDC) qui permet aux flux de travail GitHub Actions d'accéder aux ressources AWS, sans avoir à stocker les informations d' AWS identification sous forme de secrets de longue durée. GitHub Pour obtenir des instructions, consultez [la section Configuration d'OpenID Connect dans Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) dans la GitHub documentation.Une fois qu'un fournisseur OIDC est configuré, la politique de confiance du rôle IAM`github-actions`, mentionnée plus haut dans les [conditions préalables](#provision-aws-service-catalog-products-using-github-actions-prereqs), sera mise à jour. | Administrateur AWS, AWS DevOps, AWS général | 

### Pipeline Trigger GitHub Actions pour déployer le portefeuille et les produits Service Catalog
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettre à jour `e2e-test.yaml`. | Le `e2e-test.yaml` fichier déclenche le flux de travail réutilisable à l'adresse`workflow.yaml`. Mettez à jour et validez les valeurs des paramètres d'entrée suivants dans `e2e-test.yaml` :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingénieur | 

### Valider le déploiement
<a name="validate-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez les ressources du Service Catalog. | Pour valider les ressources du Service Catalog, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez la CloudFormation pile. | Pour supprimer la CloudFormation pile, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)Pour plus d'informations, voir [Supprimer une pile de la CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) dans la CloudFormation documentation | DevOps ingénieur, administrateur AWS | 

## Résolution des problèmes
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `e2e-test``Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions``Did you forget to run actions/checkout before running your local action?` | Pour vous assurer que les paramètres de référentiel corrects sont activés, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## Ressources connexes
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS documentation**
+ [Présentation du Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**Autres ressources**
+ [À propos des événements qui déclenchent des flux de travail](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub documentation)
+ [Réutilisation des flux de travail](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (GitHub documentation)

## Informations supplémentaires
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

Pour voir des captures d'écran liées aux [Epics](#provision-aws-service-catalog-products-using-github-actions-epics), rendez-vous dans le dossier **Images** du GitHub dépôt de ce modèle. Les captures d'écran suivantes sont disponibles :
+ [AWS Service Catalog portefeuille, section de l'administration](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog produit, section Administration](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog produit, User/Provisioning section](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)

# Fournissez des rôles IAM avec le moindre privilège en déployant une solution de distribution automatique de rôles
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution"></a>

*Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi et Tchad Moon, Amazon Web Services*

## Résumé
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-summary"></a>

Les autorisations de rôle Gestion des identités et des accès AWS surdimensionnées (IAM) pour les pipelines peuvent présenter des risques inutiles pour une organisation. Les développeurs accordent parfois des autorisations étendues pendant le développement, mais négligent de limiter les autorisations après avoir résolu le problème avec leur code. Cela pose un problème lorsque des rôles puissants sont présents sans aucun besoin commercial et n'ont peut-être jamais été revus par un ingénieur en sécurité.

Ce modèle offre une solution à ce problème : le distributeur automatique de rôles (RVM). À l'aide d'un modèle de déploiement sécurisé et centralisé, le RVM montre comment fournir des rôles IAM avec le moindre privilège pour les pipelines de GitHub référentiels individuels avec un minimum d'efforts de la part des développeurs. Le RVM étant une solution centrale, vous pouvez configurer vos équipes de sécurité en tant que réviseurs requis pour approuver les modifications. Cette approche permet à la sécurité de rejeter les demandes de rôle de pipeline avec des autorisations excessives. 

Le RVM prend le code Terraform en entrée et génère des rôles IAM prêts pour le pipeline en sortie. Les entrées requises sont l' Compte AWS ID, le nom du GitHub référentiel et la politique d'autorisation. Le RVM utilise ces entrées pour créer la politique de confiance et la politique d'autorisation du rôle. La politique de confiance qui en résulte permet au GitHub référentiel spécifié d'assumer le rôle et de l'utiliser pour les opérations de pipeline.

Le RVM utilise un rôle IAM (configuré lors du bootstrap). Ce rôle est autorisé à assumer un rôle role-provisioning-role dans chaque compte de l'organisation. Le rôle est configuré via AWS Control Tower Account Factory for Terraform (AFT) ou. AWS CloudFormation StackSets Ce role-provisioning-roles sont les rôles qui créent réellement les rôles de pipeline pour les développeurs.

## Conditions préalables et limitations
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+  GitHub Organisation utilisée pour déployer une infrastructure sous forme de code (IaC) par le biais d' GitHub actions. (*ne GitHub Enterprise/Premium/Ultimate sont pas***** obligatoires.)
+ Un AWS environnement multi-comptes. Il n'est pas nécessaire d'en faire partie AWS Organizations.
+ Mécanisme permettant de déployer un rôle IAM dans tous les domaines Comptes AWS (par exemple, AFT ou CloudFormation StackSets).
+ Terraform version 1.3 ou ultérieure [installée et configurée](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Terraform AWS Provider version 4 ou ultérieure [installée et configurée](https://github.com/hashicorp/terraform-provider-aws/releases).](https://developer.hashicorp.com/terraform/language/providers/configuration)

**Limites**
+ Le code de ce modèle est spécifique à GitHub Actions et Terraform. Cependant, les concepts généraux du modèle peuvent être réutilisés dans d'autres cadres d'intégration et de livraison continues (CI/CD).
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-architecture"></a>

Le schéma suivant illustre le flux de travail pour ce modèle.

![\[Workflow permettant d'automatiser la création et le déploiement de rôles IAM à l'aide d' GitHub actions.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/215c590e-0c84-411d-be6e-b1739f1e19d2/images/82fcdc9f-9576-4e7c-b7fe-b45046ba79d2.png)


Le flux de travail pour l'utilisation typique du distributeur automatique de rôles comprend les étapes suivantes :

1. Un développeur envoie du code contenant du code Terraform pour un rôle IAM récemment demandé vers le référentiel RVM. GitHub Cette action déclenche le pipeline d' GitHub actions RVM.

1. Le pipeline utilise une politique de confiance OpenID Connect (OIDC) pour assumer le rôle d'hypothèse de rôle du RVM.

1. Au fur et à mesure que le pipeline RVM s'exécute, il assume le rôle de flux de travail RVM dans le compte dans lequel il fournit le nouveau rôle IAM du développeur. (Le rôle de flux de travail RVM a été fourni à l'aide d'AFT ou CloudFormation StackSets.)

1. Le RVM crée le rôle IAM du développeur avec les autorisations et la confiance appropriées, afin que le rôle puisse être assumé par d'autres pipelines d'applications.

1. Les développeurs d'applications peuvent configurer leurs pipelines d'applications pour assumer ce rôle fourni par RVM.

Le rôle créé inclut les autorisations demandées par le développeur et une `ReadOnlyAccess` politique. Le rôle n'est assumé que par les pipelines qui s'exécutent sur la `main` branche du référentiel spécifié par le développeur. Cette approche permet de garantir que la protection et les révisions des succursales peuvent être nécessaires pour utiliser le rôle.

**Automatisation et mise à l'échelle**

Les autorisations de moindre privilège nécessitent une attention particulière aux détails pour chaque rôle fourni. Ce modèle réduit la complexité requise pour créer ces rôles, permettant aux développeurs de créer les rôles dont ils ont besoin sans trop d'apprentissage ou d'efforts supplémentaires.

## Outils
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-tools"></a>

**Services AWS**
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)est un service de gestion de comptes qui vous aide à Comptes AWS en regrouper plusieurs au sein d'une organisation que vous créez et gérez de manière centralisée.

**Autres outils**
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué et open source. Cela inclut la possibilité de créer un [compte d'organisation](https://docs.github.com/en/get-started/learning-about-github/types-of-github-accounts#organization-accounts).
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [role-vending-machine](https://github.com/aws-samples/role-vending-machine)référentiel.

## Bonnes pratiques
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-best-practices"></a>
+ **Facilitez le bon chemin et compliquez le mauvais chemin** — Faites en sorte qu'il soit facile de faire le bon choix. Si les développeurs rencontrent des difficultés avec le processus de provisionnement du RVM, ils peuvent tenter de créer des rôles par d'autres moyens, ce qui mine la nature centrale du RVM. Assurez-vous que votre équipe de sécurité fournit des conseils clairs sur la manière d'utiliser le RVM de manière sûre et efficace.

  Vous devez également empêcher les développeurs de faire le mauvais choix. Utilisez des politiques de contrôle des services (SCPs) ou des limites d'autorisation pour limiter les rôles qui peuvent créer d'autres rôles. Cette approche peut aider à limiter la création de rôles au seul RVM et à d'autres sources fiables.
+ **Donnez de bons exemples** — Inévitablement, certains développeurs adapteront les rôles existants dans le référentiel RVM en tant que modèles informels pour accorder des autorisations à leurs nouveaux rôles. Si vous disposez d'exemples d'autorisations minimales à partir desquels ils peuvent copier, cela peut réduire le risque que les développeurs demandent des autorisations étendues et comportant de nombreux caractères génériques. Si vous commencez avec des rôles très autorisés contenant de nombreux jokers, ce problème peut se multiplier au fil du temps.
+ **Utilisez des conventions et conditions de dénomination** : même si un développeur ne connaît pas tous les noms de ressources que son application va créer, il doit tout de même limiter les autorisations relatives aux rôles en utilisant une convention de dénomination. Par exemple, s'ils créent des compartiments Amazon S3, la valeur de leur clé de ressource peut sembler `arn:aws:s3:::myorg-myapp-dev-*` telle que leur rôle ne dispose pas d'autorisations autres que les compartiments portant ce nom. L'application de la convention de dénomination par le biais d'une politique IAM présente l'avantage supplémentaire d'améliorer le respect de la convention de dénomination. Cette amélioration est due au fait que la création de ressources non correspondantes ne sera pas autorisée.
+ **Exiger des révisions par pull request (PR)** — L'avantage de la solution RVM réside dans le fait qu'elle crée un emplacement central où les nouveaux rôles du pipeline peuvent être examinés. Cependant, cette conception n'est utile que s'il existe des garde-fous qui permettent de garantir que le code sécurisé et de haute qualité est transmis au RVM. Protégez les branches utilisées pour déployer du code (par exemple,`main`) contre les envois directs et exigez des approbations pour toute demande de fusion qui les cible.
+ **Configurer les rôles en lecture seule** : par défaut, le RVM fournit une `readonly` version de chaque rôle demandé. Ce rôle peut être utilisé dans des CI/CD pipelines qui n'écrivent pas de données, tels qu'un flux de travail de `terraform plan` pipeline. Cette approche permet d'éviter les modifications indésirables en cas de mauvais comportement d'un flux de travail en lecture seule.

  Par défaut, la `ReadOnlyAccess` politique AWS gérée est attachée à la fois aux rôles en lecture seule et aux rôles en lecture-écriture. Cette politique réduit le besoin d'itérations lors de la détermination des autorisations requises, mais elle peut être trop permissive pour certaines organisations. Si vous le souhaitez, vous pouvez supprimer la politique du code Terraform.
+ **Accorder des autorisations minimales** — Suivez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-epics"></a>

### Préparer l'environnement
<a name="prepare-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez le référentiel d'échantillons dans votre GitHub organisation. | [Clonez](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) le référentiel de [ce](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) modèle ou associez-le à votre GitHub organisation afin de l'adapter à vos besoins.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingénieur | 
| Déterminez le Compte AWS pour le RVM. | Déterminez le déploiement de l'infrastructure Compte AWS à utiliser pour le RVM. N'utilisez pas le compte de gestion ou le compte root. | Architecte du cloud | 
| (Facultatif) Autorisez la création des pipelines de l'organisation PRs. | Cette étape n'est nécessaire que si vous souhaitez autoriser la création du `generate_providers_and_account_vars` flux de travail PRs.Pour autoriser la création de pipelines de votre organisation PRs, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Pour plus d'informations, consultez [la section Gestion GitHub des paramètres des actions pour un référentiel](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests) dans la GitHub documentation. | DevOps ingénieur | 
| Accordez des autorisations en lecture seule au compte RVM. | Créez une politique de délégation dans votre compte de gestion qui accorde à votre compte RVM des autorisations en lecture seule. Cela permet à vos GitHub flux de travail RVM d'extraire dynamiquement une liste des comptes de votre AWS organisation lorsque le `generate_providers_and_account_vars.py` script s'exécute. Utilisez le code suivant et remplacez-le `<YOUR RVM Account ID>` par l' Compte AWS ID que vous avez sélectionné à l'étape 2 :<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "Statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<YOUR RVM Account ID>:root"<br />      },<br />      "Action": [<br />        "organizations:ListAccounts",<br />        "organizations:DescribeOrganization",<br />        "organizations:DescribeOrganizationalUnit",<br />        "organizations:ListRoots",<br />        "organizations:ListAWSServiceAccessForOrganization",<br />        "organizations:ListDelegatedAdministrators"<br />      ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | Administrateur du cloud | 
| Mettez à jour les valeurs par défaut à partir de l'exemple de dépôt. | Pour configurer le RVM afin qu'il fonctionne dans votre environnement spécifique Région AWS, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingénieur | 

### Initialisation de l'infrastructure
<a name="initialize-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Démarrez le dépôt RVM. | Cette étape est nécessaire pour créer les rôles OIDC Trust et IAM utilisés par le pipeline RVM lui-même, afin qu'il puisse commencer à fonctionner et à vendre d'autres rôles.Dans le contexte de votre compte RVM, exécutez manuellement une `terraform apply` commande depuis le `scripts/bootstrap` répertoire. Fournissez toutes les valeurs requises sur la base de la documentation des variables. | DevOps ingénieur | 

### Configuration des opérations
<a name="configure-operations"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez les `github-workflow-rvm-readonly` rôles `github-workflow-rvm` et sur tous les comptes. | Choisissez une méthode de déploiement conforme aux pratiques de votre organisation, telle que AFT ou StackSets. Utilisez cette méthode pour déployer les deux rôles IAM du `scripts/assumed_role/main.tf` fichier (noms par défaut `github-workflow-rvm` et`github-workflow-rvm-readonly`) sur chaque compte sur lequel vous souhaitez que le RVM puisse créer des rôles de pipeline.Ces rôles IAM ont des politiques de confiance qui permettent au rôle d'acceptation de rôle du compte RVM (ou son `readonly` équivalent) de l'assumer. Les rôles sont également soumis à des politiques d'autorisation IAM qui leur permettent de lire et d'écrire (sauf en utilisant le `readonly` rôle) les rôles correspondants`github-workflow-role-*`. | Administrateur AWS | 
| Exécutez le `generate_providers_and_account_vars` flux de travail. | Pour configurer votre RVM afin qu'elle soit prête à créer des rôles de pipeline, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Une fois le flux de travail terminé, le RVM est prêt à :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| J'ai créé un rôle à l'aide du RVM, mais je ne suis GitHub pas en mesure de l'assumer. | Vérifiez que le nom du GitHub dépôt correspond au nom fourni au `github_workflow_roles` module. Les rôles sont définis de manière à ce qu'un seul référentiel puisse les assumer.De même, vérifiez que la branche utilisée dans le GitHub pipeline correspond au nom de la branche fournie au `github_workflow_roles` module. Généralement, les rôles créés par RVM dotés d'autorisations d'écriture ne peuvent être utilisés que par les flux de travail limités à la `main` branche (c'est-à-dire les déploiements provenant de). `main` | 
| Mon rôle en lecture seule ne parvient pas à exécuter son pipeline car il n'est pas autorisé à lire une ressource spécifique. | Bien que la `ReadOnlyAccess` politique fournisse des autorisations étendues en lecture seule, elle ne comporte pas certaines actions de lecture (par exemple, certaines AWS Security Hub CSPM actions).Vous pouvez ajouter des autorisations d'action spécifiques en utilisant le `inline_policy_readonly` paramètre du `github-workflow-roles` module. | 

## Ressources connexes
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-resources"></a>
+ [Bonnes pratiques d'utilisation AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-bestpractices.html)
+ [Organisation de votre AWS environnement à l'aide de plusieurs comptes](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html)
+ [Présentation de AWS Control Tower Account Factory pour Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)
+ [Bonnes pratiques en matière de politiques](https://docs.aws.amazon.com/codepipeline/latest/userguide/security_iam_service-with-iam-policy-best-practices.html) 

## Informations supplémentaires
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-additional"></a>

**Utilisation d' GitHub environnements**

GitHub les environnements constituent une approche alternative aux restrictions d'accès aux rôles basées sur les branches. Si vous préférez utiliser un GitHub environnement, voici un exemple de syntaxe pour une condition supplémentaire dans la politique de confiance IAM. Cette syntaxe indique que le rôle ne peut être utilisé que lorsque l' GitHub action est exécutée dans l'`Production`environnement.

```
"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
```

L'exemple de syntaxe utilise les valeurs d'espace réservé suivantes :
+ `octo-org`est le nom GitHub de l'organisation.
+ `octo-repo`est le nom du dépôt.
+ `Production`est le nom de GitHub l'environnement spécifique.

# Publier CloudWatch les statistiques Amazon dans un fichier CSV
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Résumé
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-summary"></a>

Ce modèle utilise un script Python pour récupérer les CloudWatch métriques Amazon et pour convertir les informations des métriques dans un fichier de valeurs séparées par des virgules (CSV) pour une meilleure lisibilité. Le script utilise le service AWS dont les métriques doivent être récupérées comme argument obligatoire. Vous pouvez spécifier la région AWS et le profil d'identification AWS en tant qu'arguments facultatifs. Si vous ne spécifiez pas ces arguments, le script utilise la région et le profil par défaut configurés pour le poste de travail sur lequel le script est exécuté. Une fois le script exécuté, il génère et stocke un fichier CSV dans le même répertoire.

Consultez la section *Pièces jointes* pour le script et les fichiers associés fournis avec ce modèle.

## Conditions préalables et limitations
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-prereqs"></a>

**Conditions préalables**
+ Python 3.x
+ Interface de ligne de commande AWS (AWS CLI)

**Limites**

Le script prend actuellement en charge les services AWS suivants :
+ AWS Lambda
+ Amazon Elastic Compute Cloud (Amazon EC2)
  + Par défaut, le script ne collecte pas les métriques de volume Amazon Elastic Block Store (Amazon EBS). Pour collecter les métriques Amazon EBS, vous devez modifier le `metrics.yaml` fichier joint.
+ Amazon Relational Database Service (Amazon RDS)
  + Toutefois, le script ne prend pas en charge Amazon Aurora.
+ Application Load Balancer
+ Network Load Balancer
+ Amazon API Gateway

## Outils
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) est un service de surveillance conçu pour les DevOps ingénieurs, les développeurs, les ingénieurs de fiabilité des sites (SREs) et les responsables informatiques. CloudWatch fournit des données et des informations exploitables pour vous aider à surveiller vos applications, à répondre aux changements de performances à l'échelle du système, à optimiser l'utilisation des ressources et à obtenir une vue unifiée de l'état de fonctionnement. CloudWatch collecte des données opérationnelles et de surveillance sous forme de journaux, de mesures et d'événements, et fournit une vue unifiée des ressources, des applications et des services AWS exécutés sur AWS et sur des serveurs sur site.

## Épopées
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-epics"></a>

### Installation et configuration des prérequis
<a name="install-and-configure-the-prerequisites"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les prérequis. | Exécutez la commande suivante :<pre>$ pip3 install -r requirements.txt</pre> | Developer | 
| Configuration de l'AWS CLI. | Exécutez la commande suivante : <pre>$ aws configure</pre> | Developer | 

### Configuration du script Python
<a name="configure-the-python-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ouvrez le script. | Pour modifier la configuration par défaut du script, ouvrez`metrics.yaml`. | Developer | 
| Définissez la période du script. | Il s'agit de la période à récupérer. La période par défaut est de 5 minutes (300 secondes). Vous pouvez modifier la période, mais tenez compte des limites suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/publish-amazon-cloudwatch-metrics-to-a-csv-file.html)Dans le cas contraire, l'opération d'API ne renverra aucun point de données. | Developer | 
| Définissez les heures du script. | Cette valeur indique le nombre d'heures de métriques que vous souhaitez récupérer. La valeur par défaut est 1 heure. Pour récupérer plusieurs jours de métriques, indiquez la valeur en heures. Par exemple, pour 2 jours, spécifiez 48. | Developer | 
| Modifiez les valeurs statistiques du script.  | (Facultatif) La valeur des statistiques globales est`Average`, qui est utilisée lors de l'extraction de métriques auxquelles aucune valeur statistique spécifique n'est attribuée. Le script prend en charge les valeurs statistiques `Maximum``SampleCount`, et`Sum`. | Developer | 

### Exécutez le script Python
<a name="run-the-python-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le script. | Utilisez la commande suivante : <pre>$ python3 cwreport.py <service> </pre>Pour consulter la liste des valeurs de service, des options `region ` et `profile ` des paramètres, exécutez la commande suivante :<pre> $ python3 cwreport.py -h</pre>Pour plus d'informations sur les paramètres facultatifs, consultez la section *Informations supplémentaires*. | Developer | 

## Ressources connexes
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-resources"></a>
+ [Configuration de l'AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Utilisation des CloudWatch métriques Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)
+ [ CloudWatch Documentation Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [EC2 CloudWatch Métriques](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)
+ [Métriques AWS Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/logging-metrics.html)
+ [Métriques Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html#rds-cw-metrics-instance)
+ [Mesures relatives à l'Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)
+ [Métriques du Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html)
+ [Métriques Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html)

## Informations supplémentaires
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-additional"></a>

**Utilisation des scripts**

```
$ python3 cwreport.py -h
```

**Exemple de syntaxe**

```
python3 cwreport.py <service> <--region=Optional Region> <--profile=Optional credential profile>
```

**Paramètres**
+ **service (obligatoire)** ‒ Le service sur lequel vous souhaitez exécuter le script. Le script prend actuellement en charge les services suivants : AWS Lambda, Amazon, EC2 Amazon RDS, Application Load Balancer, Network Load Balancer et API Gateway.
+ **région (facultatif)** ‒ La région AWS à partir de laquelle récupérer les métriques. La région par défaut est`ap-southeast-1`.
+ **profil (facultatif)** ‒ Le profil nommé à utiliser dans l'interface de ligne de commande AWS. Si ce paramètre n'est pas spécifié, le profil d'identification configuré par défaut est utilisé.

**Exemples**
+ Pour utiliser la région par défaut `ap-southeast-1` et les informations d'identification configurées par défaut pour récupérer EC2 les métriques Amazon : `$ python3 cwreport.py ec2`
+ Pour spécifier une région et récupérer les métriques d'API Gateway, procédez comme suit : `$ python3 cwreport.py apigateway --region us-east-1`
+ Pour spécifier un profil AWS et récupérer les EC2 métriques Amazon : `$ python3 cwreport.py ec2 --profile testprofile`
+ Pour spécifier à la fois la région et le profil pour récupérer EC2 les métriques Amazon : `$ python3 cwreport.py ec2 --region us-east-1 --profile testprofile`

## Pièces jointes
<a name="attachments-0a915a9d-2eef-4da1-8283-3cf4a115b3b2"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/0a915a9d-2eef-4da1-8283-3cf4a115b3b2/attachments/attachment.zip)

# Supprimez les EC2 entrées Amazon Comptes AWS de l'autre côté AWS Managed Microsoft AD en utilisant l' AWS Lambda automatisation
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad et Tamilselvan P, Amazon Web Services*

## Résumé
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) est un outil de script Microsoft qui gère les informations de domaine et les interactions des utilisateurs avec les services réseau. Il est largement utilisé par les fournisseurs de services gérés (MSPs) pour gérer les informations d'identification et les autorisations d'accès des employés. Étant donné que les attaquants publicitaires peuvent utiliser des comptes inactifs pour tenter de pirater une organisation, il est important de trouver les comptes inactifs et de les désactiver dans le cadre d'un programme de maintenance de routine. Avec AWS Directory Service for Microsoft Active Directory, vous pouvez exécuter Microsoft Active Directory en tant que service géré. Ce modèle peut vous aider à configurer AWS Lambda l'automatisation pour trouver et supprimer rapidement les comptes inactifs.

Si les scénarios suivants s'appliquent à votre organisation, ce modèle peut vous aider :
+ **Gestion centralisée d'AD** : si votre organisation en possède plusieurs Comptes AWS, chacune avec son propre déploiement AD, il peut être difficile de gérer les comptes utilisateurs et les autorisations d'accès de manière cohérente sur tous les comptes. Avec une solution de nettoyage AD multicomptes, vous pouvez désactiver ou supprimer les comptes inactifs de toutes les instances AD de manière centralisée.
+ **Restructuration ou migration d'AD** : si votre organisation prévoit de restructurer ou de migrer son déploiement AD, une solution de nettoyage AD multi-comptes peut vous aider à préparer l'environnement. La solution peut vous aider à supprimer les comptes inutiles ou inactifs, à simplifier le processus de migration et à réduire les conflits ou problèmes potentiels.

Lorsque vous utilisez ce modèle, vous pouvez bénéficier des avantages suivants :
+ Améliorez les performances des bases de données et des serveurs, et corrigez les failles de sécurité liées aux comptes inactifs.
+ Si votre serveur AD est hébergé dans le cloud, la suppression des comptes inactifs peut également réduire les coûts de stockage tout en améliorant les performances. Vos factures mensuelles peuvent diminuer en raison de la baisse des frais de bande passante et des ressources informatiques.
+ Tenez les attaquants potentiels à distance grâce à un Active Directory propre.

## Conditions préalables et limitations
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-prereqs"></a>

**Conditions préalables**
+ Un parent actif Compte AWS et un ou plusieurs comptes enfants. Dans ce modèle, un *compte parent* est l'endroit où Active Directory est créé. *Les comptes enfants* hébergent des serveurs Windows et sont joints via le compte parent Active Directory.
+ Git [est installé](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) et configuré sur un poste de travail local.
+ Terraform [installé](https://learn.hashicorp.com/tutorials/terraform/install-cli) et configuré sur un poste de travail local.
+ AWS Managed Microsoft AD répertoire configuré dans le compte parent et partagé avec tous les comptes enfants. Pour plus de détails, voir [Tutoriel : Partage de votre AWS Managed Microsoft AD répertoire pour une jonction de EC2 domaine fluide](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html) dans le Guide d'*AWS Directory Service administration*.
+ Une connexion d'appairage au cloud privé virtuel (VPC) ou une AWS Transit Gateway connexion disponible entre le VPC de AWS Directory Service (compte parent) et le VPC des instances Amazon Elastic Compute Cloud ( EC2Amazon) (comptes enfants). *Pour plus de détails, consultez la section [Configurer une connexion d'appairage VPC entre le propriétaire de l'annuaire et le compte du consommateur de l'annuaire](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) dans le AWS Directory Service Guide d'administration.*
+ Une machine Windows configurée avec le `EC2WindowsUserdata` script sur tous les comptes parent et enfant. Le fichier de script est disponible à la racine du [référentiel de code](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup) de ce modèle.
+ Un rôle entre comptes Gestion des identités et des accès AWS (IAM) disponible sur chaque compte enfant configuré avec une politique de confiance autorisant l'utilisation d'une AWS Lambda fonction du compte parent. Pour plus d'informations, consultez la section [Envoi et réception d'événements entre Amazon Comptes AWS EventBridge dans](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html) le *guide de EventBridge l'utilisateur Amazon*.
+ Les valeurs secrètes suivantes sont disponibles dans le AWS Systems Manager Parameter Store du compte parent :
  + `domainJoinUser`— Nom d'utilisateur du service d'annuaire
  + `domainJoinPassword`— Mot de passe du service d'annuaire

  Pour plus d'informations sur les secrets, voir [Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) dans le *Guide de AWS Secrets Manager l'utilisateur*.

**Limites**
+ La création d'une ressource dans un compte enfant n'est pas automatisée avec Terraform. Vous devez créer les ressources suivantes manuellement à l'aide de AWS Management Console :
  +  EventBridge Règle Amazon pour envoyer les événements de EC2 résiliation d'Amazon au compte parent
  + Création de rôles EC2 entre comptes Amazon dans le compte enfant avec politique de confiance
  + Peering VPC ou connexion Transit Gateway
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ [Terraform version 1.1.9 ou ultérieure](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider version 3.0 ou supérieure](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Architecture
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-architecture"></a>

Le schéma suivant montre l'architecture de haut niveau de la solution.

![\[Processus d'utilisation de l'automatisation Lambda pour supprimer les EC2 entrées de différents comptes AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c397d873-e10d-44b6-8352-5f1380ab94ca/images/bd6c80a7-e490-47db-bd47-165314e1ea8a.png)


Le schéma d'architecture illustre le processus suivant :

1. Dans les comptes enfants, la EventBridge règle collecte tous les événements de EC2 résiliation d'Amazon. La règle envoie les EventBridge événements présents dans le compte parent.

1. À partir du compte parent, EventBridge collecte tous les événements et contient la règle permettant de déclencher la fonction Lambda. `ADcleanup-Lambda`

1. Le compte parent reçoit tous les événements de résiliation du compte parent ou enfant et déclenche la fonction Lambda.

1. La fonction Lambda appelle les groupes Amazon EC2 Auto Scaling à l'aide du module Python boto et obtient l'ID d'instance aléatoire. L'ID d'instance est utilisé pour exécuter les commandes de Systems Manager.

1. La fonction Lambda effectue un autre appel à Amazon à EC2 l'aide du module boto. La fonction Lambda obtient les adresses IP privées des serveurs Windows en cours d'exécution et les stocke dans une variable temporaire. Dans les étapes 5.1 et 5.2, les EC2 instances Windows en cours d'exécution sont collectées à partir de comptes enfants.

1. La fonction Lambda lance un nouvel appel à Systems Manager pour obtenir les informations de l'ordinateur auquel il est connecté. AWS Directory Service

1. Un AWS Systems Manager document permet d'exécuter la PowerShell commande sur les serveurs Amazon EC2 Windows pour obtenir les adresses IP privées des ordinateurs connectés à AD. (Le document Systems Manager utilise l'ID d'instance obtenu à l'étape 4.)

1. Le nom d'utilisateur et les mots de passe du domaine AD sont stockés dans le AWS Systems Manager Parameter Store. AWS Lambda et Systems Manager appellent Parameter Store et obtiennent les valeurs du nom d'utilisateur et du mot de passe à utiliser pour se connecter à AD.

1. À l'aide du document Systems Manager, le PowerShell script est exécuté sur le serveur Amazon EC2 Windows à l'aide de l'identifiant d'instance obtenu précédemment à l'étape 4.

1. Amazon EC2 se connecte AWS Directory Service à l'aide de PowerShell commandes et supprime les ordinateurs inutilisés ou inactifs.

## Outils
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-tools"></a>

**AWS services**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)propose plusieurs manières d'utiliser Microsoft Active Directory (AD) avec d'autres, Services AWS comme Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) pour SQL Server et FSx Amazon pour Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permet à vos charges de travail et à vos AWS ressources sensibles aux annuaires d'utiliser Microsoft Active Directory dans le. AWS Cloud
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fournit une capacité de calcul évolutive dans le AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, AWS Lambda des fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser. Avec IAM, vous pouvez spécifier qui ou quoi peut accéder aux services et aux ressources AWS, gérer de manière centralisée les autorisations détaillées et analyser les accès pour affiner les autorisations entre elles. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)vous aide à gérer vos applications et votre infrastructure exécutées dans le AWS Cloud. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos AWS ressources en toute sécurité à grande échelle.
+ [AWS Systems Manager les documents](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) définissent les actions que Systems Manager exécute sur vos instances gérées. Systems Manager inclut plus d'une centaine de documents préconfigurés que vous pouvez utiliser en spécifiant des paramètres lors de l'exécution.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) est une fonctionnalité AWS Systems Manager et fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)est un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [aws-lambda-ad-cleanup-terraform-samples](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup).

## Bonnes pratiques
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Joignez automatiquement des domaines.**Lorsque vous lancez une instance Windows destinée à faire partie d'un Directory Service domaine, rejoignez le domaine pendant le processus de création de l'instance au lieu de l'ajouter manuellement ultérieurement. Pour rejoindre automatiquement un domaine, sélectionnez le répertoire approprié dans la liste déroulante des **répertoires de jonction de domaines** lors du lancement d'une nouvelle instance. Pour plus de détails, consultez la [section Joindre sans difficulté une instance Amazon EC2 Windows à votre AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) dans le *guide d'Directory Service administration*.
+ **Supprimez les comptes inutilisés.**Il est courant de trouver dans AD des comptes qui n'ont jamais été utilisés. Tout comme les comptes désactivés ou inactifs qui restent dans le système, les comptes non utilisés négligés peuvent ralentir votre système publicitaire ou rendre votre organisation vulnérable aux violations de données.
+ **Automatisez les nettoyages d'Active Directory.**Pour atténuer les risques de sécurité et empêcher les comptes obsolètes d'affecter les performances d'AD, effectuez des nettoyages AD à intervalles réguliers. Vous pouvez accomplir la plupart des tâches de gestion et de nettoyage d'AD en écrivant des scripts. Les tâches incluent par exemple la suppression de comptes désactivés et inactifs, la suppression de groupes vides et inactifs et la localisation de comptes utilisateurs et de mots de passe expirés.

## Épopées
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-epics"></a>

### Configurer des comptes pour enfants
<a name="set-up-child-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un rôle multicompte dans le compte enfant. | Pour créer un rôle multicompte dans un compte enfant, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 
| Créez une règle d'événement dans le compte enfant. | Pour créer une EventBridge règle pour chaque compte enfant, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Pour plus de détails, consultez [la section Création de règles réagissant aux événements sur Amazon EventBridge dans](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) le *guide de EventBridge l'utilisateur Amazon*. | DevOps ingénieur | 
| Créez une EC2 instance et rejoignez-la à AD. | Pour créer une EC2 instance pour Windows, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 

### Configuration du poste de travail local
<a name="set-up-the-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un dossier de projet et ajoutez les fichiers. | Pour cloner le référentiel et créer un dossier de projet, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 
| Créez le `adcleanup.zip` fichier. | Pour compresser le `lambda_function.py` fichier, exécutez la commande suivante :`zip -r adcleanup.zip lambda_function.py` | DevOps ingénieur | 

### Provisionner l'architecture cible à l'aide de la configuration Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Fournissez des valeurs pour les variables Terraform. | Pour le compte enfant, fournissez les valeurs des `arn` variables suivantes sous forme de chaînes dans le `terraform.tfvars` fichier :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 
| Initialisez la configuration Terraform. | Pour initialiser votre répertoire de travail contenant les fichiers Terraform, exécutez la commande suivante :`terraform init` | DevOps ingénieur | 
| Prévisualisez les modifications. | Vous pouvez prévisualiser les modifications que Terraform apportera à l'infrastructure avant que celle-ci ne soit déployée. Pour valider que Terraform apportera les modifications nécessaires, exécutez la commande suivante :`terraform plan —-var-file=examples/terraform.tfvars` | DevOps ingénieur | 
| Exécutez les actions proposées. | Pour vérifier que les résultats de la `terraform plan` commande sont conformes aux attentes, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 

### Vérification du déploiement
<a name="verify-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez et testez la fonction Lambda. | Pour vérifier que le déploiement a bien eu lieu, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Les résultats de l'exécution indiquent le résultat de la fonction. | DevOps ingénieur | 
| Afficher les résultats de l'exécution des EventBridge règles depuis le compte parent. | Pour consulter les résultats de la EventBridge règle basée sur les événements de EC2 résiliation d'Amazon depuis le compte parent, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Dans la CloudWatch console, la page **Log groups** affiche les résultats de la fonction Lambda. | DevOps ingénieur | 
| Afficher les résultats de l'exécution des EventBridge règles à partir du compte enfant. | Pour consulter les résultats de la EventBridge règle basée sur les événements de EC2 résiliation d'Amazon liés au compte enfant, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Dans la CloudWatch console, la page **Log groups** affiche les résultats de la fonction Lambda. | DevOps ingénieur | 

### Nettoyer l'infrastructure après utilisation
<a name="clean-up-infrastructure-after-use"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez l'infrastructure. | Pour nettoyer l'infrastructure que vous avez créée, utilisez la commande suivante :`terraform destroy`Pour confirmer la `destroy` commande, tapez`yes`. | DevOps ingénieur | 
| Vérifiez après le nettoyage. | Vérifiez que les ressources ont été correctement supprimées. | DevOps ingénieur | 

## Résolution des problèmes
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problème de connexion entre AWS Directory Service (compte parent) et l' EC2 instance Amazon (compte enfant) : vous ne pouvez pas associer les ordinateurs du compte enfant à AD même si le peering VPC est disponible. | Ajoutez le routage dans le VPCs. Pour obtenir des instructions, consultez la section [Configurer une connexion d'appairage VPC entre le propriétaire du répertoire et le compte du consommateur de l'annuaire](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) dans la documentation. AWS Directory Service  | 

## Ressources connexes
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentation**
+ [Amazon EventBridge et Gestion des identités et des accès AWS](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurer des autorisations d’instance requises pour Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestion des identités et des accès pour Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Politiques IAM basées sur l'identité pour Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)
+ [Joindre manuellement une instance Amazon EC2 Windows à votre AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Supprimez EC2 les entrées Amazon dans le même Compte AWS formulaire AWS Managed Microsoft AD en utilisant l' AWS Lambda automatisation](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)

**Autres ressources**
+ [AWS Fournisseur](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentation Terraform)
+ [Configuration du backend](https://developer.hashicorp.com/terraform/language/backend) (documentation Terraform)
+ [Installer Terraform (documentation Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli))
+ [Module de démarrage Python](https://pypi.org/project/boto/) (référentiel Python Package Index)
+ [Téléchargement du binaire Terraform (documentation](https://www.terraform.io/downloads) Terraform)

# Supprimez EC2 les entrées Amazon dans le même Compte AWS formulaire AWS Managed Microsoft AD en utilisant l' AWS Lambda automatisation
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad et Tamilselvan P, Amazon Web Services*

## Résumé
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) est un outil de script Microsoft qui gère les informations de domaine et les interactions des utilisateurs avec les services réseau. Il est largement utilisé par les fournisseurs de services gérés (MSPs) pour gérer les informations d'identification et les autorisations d'accès des employés. Étant donné que les attaquants publicitaires peuvent utiliser des comptes inactifs pour tenter de pirater une organisation, il est important de trouver les comptes inactifs et de les désactiver dans le cadre d'un programme de maintenance de routine. Avec AWS Directory Service for Microsoft Active Directory, vous pouvez exécuter Microsoft Active Directory en tant que service géré. 

Ce modèle peut vous aider à configurer AWS Lambda l'automatisation pour trouver et supprimer rapidement les comptes inactifs. Lorsque vous utilisez ce modèle, vous pouvez bénéficier des avantages suivants :
+ Améliorez les performances des bases de données et des serveurs, et corrigez les failles de sécurité liées aux comptes inactifs.
+ Si votre serveur AD est hébergé dans le cloud, la suppression des comptes inactifs peut également réduire les coûts de stockage tout en améliorant les performances. Vos factures mensuelles peuvent diminuer en raison de la baisse des frais de bande passante et des ressources informatiques.
+ Tenez les attaquants potentiels à distance grâce à un Active Directory propre.

## Conditions préalables et limitations
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Git [est installé](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) et configuré sur un poste de travail local.
+ Terraform [installé](https://learn.hashicorp.com/tutorials/terraform/install-cli) et configuré sur un poste de travail local.
+ Ordinateur Windows doté de modules Active Directory (`ActiveDirectory`).
+ Un répertoire AWS Managed Microsoft AD et des informations d'identification stockées dans un [paramètre du AWS Systems Manager Parameter Store.](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)
+ Gestion des identités et des accès AWS *rôle (IAM) avec autorisations d'accès aux éléments Services AWS répertoriés dans [Outils](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools).* Pour plus d'informations sur IAM, consultez la section [Ressources connexes](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources).

**Limites**
+ Ce modèle ne prend pas en charge la configuration entre comptes.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ [Terraform version 1.1.9 ou ultérieure](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider version 3.0 ou supérieure](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Architecture
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Processus d'utilisation de l'automatisation Lambda pour supprimer des EC2 entrées de Managed Microsoft AD.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/6b50dcc5-4f4b-4eea-85a7-04cebc9f7454/images/b7fc5962-bfb8-4f5a-968e-7487b1d48c4f.png)


Le schéma suivant illustre le flux de travail suivant :

1. Amazon EventBridge déclenche la AWS Lambda fonction en fonction d'une expression cron. (Pour ce modèle, le calendrier des expressions cron est d'une fois par jour.)

1. Le rôle et la politique IAM requis sont créés et attachés AWS Lambda via Terraform.

1. La AWS Lambda fonction est exécutée et appelle Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling Groups à l'aide du module Python boto. La fonction Lambda obtient l'identifiant d'instance aléatoire. L'identifiant d'instance est utilisé pour exécuter AWS Systems Manager des commandes.

1. AWS Lambda effectue un autre appel à Amazon à l' EC2 aide du module boto et obtient les adresses IP privées des serveurs Windows en cours d'exécution et les stocke dans une variable temporaire.

1. AWS Lambda lance un nouvel appel à Systems Manager pour obtenir les informations de l'ordinateur auquel il est connecté Directory Service.

1. Un AWS Systems Manager document permet d'exécuter le PowerShell script sur les serveurs Amazon EC2 Windows pour obtenir les adresses IP privées des ordinateurs connectés à AD.

1. Le nom d'utilisateur et les mots de passe du domaine AD sont stockés dans le AWS Systems Manager Parameter Store. AWS Lambda et Systems Manager appellent Parameter Store et obtiennent les valeurs du nom d'utilisateur et du mot de passe à utiliser pour connecter AD.

1. À l'aide du document Systems Manager, le PowerShell script est exécuté sur le serveur Amazon EC2 Windows à l'aide de l'identifiant d'instance obtenu précédemment à l'étape 3.

1. Amazon EC2 se connecte Directory Service à l'aide de PowerShell commandes et supprime les ordinateurs inutilisés ou inactifs.

## Outils
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools"></a>

**Services AWS**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)propose plusieurs manières d'utiliser Microsoft Active Directory (AD) avec d'autres, Services AWS comme Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) pour SQL Server et FSx Amazon pour Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permet à vos charges de travail et à vos AWS ressources sensibles aux annuaires d'utiliser Microsoft Active Directory dans le. AWS Cloud
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fournit une capacité de calcul évolutive dans le AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, des AWS Lambda fonctions, des points de terminaison d'invocation HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser. Avec IAM, vous pouvez spécifier qui ou quoi peut accéder aux services et aux ressources AWS, gérer de manière centralisée les autorisations détaillées et analyser les accès pour affiner les autorisations entre elles. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)vous aide à gérer vos applications et votre infrastructure exécutées dans le AWS Cloud. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos AWS ressources en toute sécurité à grande échelle.
+ [AWS Systems Manager les documents](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) définissent les actions que Systems Manager exécute sur vos instances gérées. Systems Manager inclut plus d'une centaine de documents préconfigurés que vous pouvez utiliser en spécifiant des paramètres lors de l'exécution.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) est une fonctionnalité AWS Systems Manager et fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure open source sous forme de code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)est un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code** **C**

Le code de ce modèle est disponible dans le référentiel de [solutions GitHub Custom AD Cleanup Automation](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/). 

## Bonnes pratiques
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Joignez automatiquement des domaines.**Lorsque vous lancez une instance Windows destinée à faire partie d'un Directory Service domaine, rejoignez le domaine pendant le processus de création de l'instance au lieu de l'ajouter manuellement ultérieurement. Pour rejoindre automatiquement un domaine, sélectionnez le répertoire approprié dans la liste déroulante des **répertoires de jointure de domaines** lors du lancement d'une nouvelle instance. Pour plus de détails, consultez la [section Joindre sans difficulté une instance Amazon EC2 Windows à votre AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) dans le *guide d'Directory Service administration*.
+ **Supprimez les comptes inutilisés.**Il est courant de trouver dans AD des comptes qui n'ont jamais été utilisés. Tout comme les comptes désactivés ou inactifs qui restent dans le système, les comptes non utilisés négligés peuvent ralentir votre système publicitaire ou rendre votre organisation vulnérable aux violations de données.
+ **Automatisez les nettoyages d'Active Directory.**Pour atténuer les risques de sécurité et empêcher les comptes obsolètes d'affecter les performances d'AD, effectuez des nettoyages AD à intervalles réguliers. Vous pouvez accomplir la plupart des tâches de gestion et de nettoyage d'AD en écrivant des scripts. Les tâches incluent par exemple la suppression de comptes désactivés et inactifs, la suppression de groupes vides et inactifs et la localisation de comptes utilisateurs et de mots de passe expirés. 

## Épopées
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un dossier de projet et ajoutez les fichiers. | Pour cloner le référentiel et créer un dossier de projet, procédez comme suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 

### Provisionner l'architecture cible à l'aide de la configuration Terraform
<a name="provision-the-target-architecture-by-using-the-terraform-configuration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Initialisez la configuration Terraform. | Pour initialiser votre répertoire de travail contenant les fichiers Terraform, exécutez la commande suivante.`terraform init` | DevOps ingénieur | 
| Prévisualisez les modifications. | Vous pouvez prévisualiser les modifications que Terraform apportera à l'infrastructure avant que celle-ci ne soit déployée. Pour valider que Terraform apportera les modifications nécessaires, exécutez la commande suivante.`terraform plan` | DevOps ingénieur | 
| Exécutez les actions proposées. | Pour vérifier que les résultats de la `terraform plan` commande sont conformes aux attentes, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingénieur | 
| Nettoyez l'infrastructure. | Pour nettoyer l'infrastructure que vous avez créée, utilisez la commande suivante.`terraform destroy`Pour confirmer la commande de destruction, tapez`yes`. | DevOps ingénieur | 

### Vérification du déploiement
<a name="verify-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez et testez la fonction Lambda. | Pour vérifier que le déploiement a bien eu lieu, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Les résultats de l'exécution indiquent le résultat de la fonction. | DevOps ingénieur | 
| Affichez les résultats de la fonction Lambda. | Dans ce modèle, une EventBridge règle exécute la fonction Lambda une fois par jour. Pour afficher les résultats de la fonction Lambda, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Dans la CloudWatch console, la page **Log groups** affiche les résultats de la fonction Lambda. | DevOps ingénieur | 

### Nettoyer l'infrastructure après utilisation
<a name="clean-up-infrastructure-after-use"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez les infrastructures. | Pour nettoyer l'infrastructure que vous avez créée, utilisez la commande suivante.`terraform destroy`Pour confirmer la commande de destruction, tapez`yes`. | DevOps ingénieur | 
| Vérifiez après le nettoyage. | Vérifiez que les ressources ont été correctement supprimées. | DevOps ingénieur | 

## Résolution des problèmes
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Si vous essayez de supprimer l'ordinateur AD, le message « Accès refusé » s'affiche. L'ordinateur AD ne peut pas être supprimé car, par défaut, l'action tente de supprimer deux adresses IP privées connectées dans le cadre des services AD. | Pour éviter cette erreur, utilisez l'opération Python suivante pour ignorer les deux premiers ordinateurs lorsque vous listez les différences entre la sortie d'un ordinateur AD et la sortie de votre machine exécutant Windows.<pre>Difference = Difference[2:]</pre> | 
| Lorsque Lambda exécute un PowerShell script sur un serveur Windows, il s'attend à ce que les modules Active Directory soient disponibles par défaut. Si les modules ne sont pas disponibles, une fonction Lambda crée une erreur indiquant « Get- n'AdComputer est pas installé sur l'instance ». | Pour éviter cette erreur, installez les modules requis en utilisant les données utilisateur des EC2 instances. Utilisez le [EC2WindowsUserdata](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/EC2WindowsUserdata)script qui se trouve dans le GitHub dépôt de ce modèle. | 

## Ressources connexes
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentation**
+ [Amazon EventBridge et Gestion des identités et des accès AWS](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurer des autorisations d’instance requises pour Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestion des identités et des accès pour Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Joindre manuellement une instance Amazon EC2 Windows à votre AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Utilisation de politiques IAM basées sur l'identité dans AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)

**Autres ressources**
+ [AWS Fournisseur](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentation Terraform)
+ [Configuration du backend](https://developer.hashicorp.com/terraform/language/backend) (documentation Terraform)
+ [Installer Terraform (documentation Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli))
+ [Module de démarrage Python](https://pypi.org/project/boto/) (référentiel Python Package Index)
+ [Téléchargement du binaire Terraform (documentation](https://www.terraform.io/downloads) Terraform)

# Exécutez des tests unitaires pour les tâches ETL Python en AWS Glue utilisant le framework pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan et Vaidy Sankaran, Amazon Web Services*

## Résumé
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Vous pouvez exécuter des tests unitaires pour des tâches d'extraction, de transformation et de chargement (ETL) en Python AWS Glue dans un [environnement de développement local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), mais la réplication de ces tests dans un DevOps pipeline peut s'avérer difficile et chronophage. Les tests unitaires peuvent être particulièrement difficiles lorsque vous modernisez le processus ETL du mainframe sur des piles AWS technologiques. Ce modèle vous montre comment simplifier les tests unitaires, tout en préservant les fonctionnalités existantes, en évitant d'interrompre les fonctionnalités clés de l'application lorsque vous publiez de nouvelles fonctionnalités et en maintenant des logiciels de haute qualité. Vous pouvez utiliser les étapes et les exemples de code de ce modèle pour exécuter des tests unitaires pour les tâches ETL Python en AWS Glue utilisant le framework pytest dans AWS CodePipeline. Vous pouvez également utiliser ce modèle pour tester et déployer plusieurs AWS Glue tâches.

## Conditions préalables et limitations
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Une URI d'image Amazon Elastic Container Registry (Amazon ECR) pour AWS Glue votre bibliothèque, téléchargée depuis la galerie publique [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ terminal Bash (sur n'importe quel système d'exploitation) avec un profil pour la cible Compte AWS et Région AWS
+ [Python 3.10 ou version](https://www.python.org/downloads/) ultérieure
+ [Pytest](https://github.com/pytest-dev/pytest)
+ bibliothèque [Moto](https://github.com/getmoto/moto) Python pour les tests Services AWS

## Architecture
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

Le schéma suivant décrit comment intégrer les tests unitaires pour les processus AWS Glue ETL basés sur Python dans un pipeline typique à l'échelle AWS DevOps d'une entreprise.

![\[Tests unitaires pour les processus ETL d'AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


Le schéma suivant illustre le flux de travail suivant :

1. Au stade source, AWS CodePipeline utilise un bucket Amazon Simple Storage Service (Amazon S3) versionné pour stocker et gérer les actifs du code source. Ces ressources incluent un exemple de tâche ETL Python (`sample.py`), un fichier de test unitaire (`test_sample.py`) et un AWS CloudFormation modèle. CodePipeline Transfère ensuite le code le plus récent de la branche principale vers le AWS CodeBuild projet pour un traitement ultérieur.

1. Au cours de la phase de création et de publication, le code le plus récent de l'étape source précédente est testé à l'unité à l'aide d'une image Amazon ECR AWS Glue publique. Le rapport de test est ensuite publié dans les groupes de CodeBuild rapports. L'image du conteneur dans le référentiel public Amazon ECR pour les AWS Glue bibliothèques inclut tous les fichiers binaires nécessaires à l'exécution locale de tâches ETL [PySparkbasées sur](https://spark.apache.org/docs/latest/api/python/) des tests unitaires. AWS Glue Le référentiel de conteneurs public comporte trois balises d'image, une pour chaque version prise en charge par AWS Glue. À des fins de démonstration, ce modèle utilise la balise `glue_libs_4.0.0_image_01` image. Pour utiliser cette image de conteneur comme image d'exécution CodeBuild, copiez l'URI de l'image qui correspond à la balise d'image que vous souhaitez utiliser, puis mettez à jour le `pipeline.yml` fichier dans le GitHub référentiel de la `TestBuild` ressource.

1. Lors de la phase de déploiement, le CodeBuild projet est lancé et le code est publié dans un compartiment Amazon S3 si tous les tests sont réussis.

1. L'utilisateur déploie la AWS Glue tâche à l'aide du CloudFormation modèle figurant dans le `deploy` dossier.

## Outils
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Services AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)est un service ETL entièrement géré. Il vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets offrant une évolutivité, une disponibilité des données, une sécurité et des performances de pointe.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation de haut niveau interprété à usage général.
+ [Moto](https://github.com/getmoto/moto) est une bibliothèque Python pour les tests Services AWS.
+ [Pytest](https://github.com/pytest-dev/pytest) est un framework permettant d'écrire de petits tests unitaires évolutifs pour prendre en charge des tests fonctionnels complexes pour les applications et les bibliothèques.
+ [La bibliothèque Python ETL](https://github.com/awslabs/aws-glue-libs) for AWS Glue est un référentiel pour les bibliothèques Python utilisées dans le développement local de tâches PySpark par lots pour AWS Glue.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). Le référentiel inclut les ressources suivantes :
+ Exemple de AWS Glue tâche basée sur Python dans le dossier `src`
+ Cas de tests unitaires associés (créés à l'aide du framework pytest) dans le dossier `tests`
+ Un CloudFormation modèle (écrit en YAML) dans le dossier `deploy`

## Bonnes pratiques
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Sécurité des CodePipeline ressources**

Il est recommandé d'utiliser le chiffrement et l'authentification pour les référentiels sources qui se connectent à vos pipelines. CodePipeline Pour plus d'informations, consultez [la section Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dans la CodePipeline documentation.

**Surveillance et journalisation des CodePipeline ressources**

Il est recommandé d'utiliser les fonctionnalités de AWS journalisation pour déterminer les actions que les utilisateurs effectuent sur votre compte et les ressources qu'ils utilisent. Les fichiers journaux contiennent les informations suivantes :
+ Heure et date des actions
+ Adresse IP source des actions
+ Quelles actions ont échoué en raison d'autorisations inadéquates

Les fonctionnalités de journalisation sont disponibles dans AWS CloudTrail et Amazon CloudWatch Events. Vous pouvez l'utiliser CloudTrail pour enregistrer les appels d' AWS API et les événements connexes effectués par ou pour votre compte Compte AWS. Pour plus d'informations, consultez la section [Journalisation des appels d' CodePipeline API AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) dans la CodePipeline documentation.

Vous pouvez utiliser CloudWatch les événements pour surveiller vos AWS Cloud ressources et vos applications en cours d'exécution AWS. Vous pouvez également créer des alertes dans CloudWatch Événements. Pour plus d'informations, consultez la section [Surveillance CodePipeline des événements](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) dans la CodePipeline documentation.

## Épopées
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Déployer le code source
<a name="deploy-the-source-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez l'archive de code pour le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps ingénieur | 
| Créez la CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)La pile crée une CodePipeline vue en utilisant Amazon S3 comme source. Dans les étapes ci-dessus, le pipeline est **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps ingénieur | 

### Exécutez les tests unitaires
<a name="run-the-unit-tests"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez les tests unitaires dans le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingénieur | 

### Nettoyez toutes les AWS ressources
<a name="clean-up-all-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez les ressources de votre environnement. | Pour éviter des coûts d'infrastructure supplémentaires, assurez-vous de supprimer la pile après avoir testé les exemples fournis dans ce modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le rôle CodePipeline de service ne peut pas accéder au compartiment Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline renvoie une erreur indiquant que le compartiment Amazon S3 n'est pas versionné. | CodePipeline nécessite que le compartiment Amazon S3 source soit versionné. Activez le versionnement sur votre compartiment Amazon S3. Pour obtenir des instructions, consultez la section [Activation de la gestion des versions sur les buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html). | 

## Ressources connexes
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Développer et tester des AWS Glue emplois au niveau local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation pour AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Informations supplémentaires
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

En outre, vous pouvez déployer les AWS CloudFormation modèles à l'aide du AWS Command Line Interface (AWS CLI). Pour plus d'informations, consultez la section [Déploiement rapide de modèles avec transformations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) dans la CloudFormation documentation.

# Configuration d'un CI/CD pipeline à l'aide d'AWS CodePipeline et d'AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder et Cizer Pereira, Amazon Web Services*

## Accueil
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

L'automatisation de votre processus de création et de publication de logiciels grâce à l'intégration et à la livraison continues (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDincarne une culture, un ensemble de principes de fonctionnement et un [ensemble de pratiques qui aident les équipes de](https://aws.amazon.com/devops/#cicd) développement d'applications à apporter des modifications de code plus fréquemment et de manière plus fiable). L'implémentation est également connue sous le nom de pipeline *CI/CD*.

Ce modèle définit un pipeline d'intégration et de livraison continues (CI/CD) réutilisable sur Amazon Web Services (AWS) avec un référentiel AWS CodeCommit . Le CodePipeline pipeline AWS est écrit à l'aide d'[AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Vous pouvez ainsi modéliser les différentes étapes du processus de publication de votre logiciel via l'interface AWS Management Console, l'AWS Command Line Interface (AWS CLI), CloudFormation AWS ou AWS SDKs. CodePipeline Ce modèle illustre la mise en œuvre d'AWS CDK CodePipeline et de ses composants à l'aide d'AWS CDK. Outre la création de bibliothèques, AWS CDK inclut une boîte à outils (la commande CLI`cdk`), qui est le principal outil pour interagir avec votre application AWS CDK. Entre autres fonctions, le kit d'outils permet de convertir une ou plusieurs piles en CloudFormation modèles et de les déployer sur un compte AWS.

Le pipeline inclut des tests visant à valider la sécurité de vos bibliothèques tierces et contribue à garantir une publication accélérée et automatisée dans les environnements spécifiés. Vous pouvez améliorer la sécurité globale de vos applications en les soumettant à un processus de validation.

L'objectif de ce modèle est d'accélérer votre utilisation des CI/CD pipelines pour déployer votre code tout en garantissant que les ressources que vous déployez respectent les DevOps meilleures pratiques. Après avoir implémenté l'[exemple de code](https://github.com/aws-samples/aws-codepipeline-cicd), vous disposerez d'un [AWS CodePipeline](https://aws.amazon.com/codepipeline/) avec des processus de linting, de test, de vérification de sécurité, de déploiement et de post-déploiement. Ce modèle inclut également des étapes pour Makefile. À l'aide d'un Makefile, les développeurs peuvent reproduire CI/CD les étapes localement et accélérer le processus de développement.

## Conditions préalables et limitations
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Une compréhension de base dans les domaines suivants :
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limites**

Ce modèle utilise [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript uniquement pour. Il ne couvre pas les autres langues prises en charge par AWS CDK.

**Versions du produit**

Utilisez les dernières versions des outils suivants :
+ Interface de ligne de commande AWS (AWS CLI)
+ cfn\$1nag
+ git-remote-codecommit
+ Node.js

## Architecture
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Pile technologique cible**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Architecture cible**

Le pipeline est déclenché par une modification du CodeCommit référentiel AWS (`SampleRepository`). Au début, CodePipeline crée des artefacts, se met à jour et lance le processus de déploiement. Le pipeline qui en résulte déploie une solution dans trois environnements indépendants :
+ Dev — Vérification du code en trois étapes dans l'environnement de développement actif
+ Test — Environnement de test d'intégration et de régression
+ Prod — Environnement de production

Les trois étapes incluses dans la phase de développement sont le linting, la sécurité et les tests unitaires. Ces étapes s'exécutent en parallèle pour accélérer le processus. Pour garantir que le pipeline ne fournit que des artefacts fonctionnels, il sera arrêté de fonctionner chaque fois qu'une étape du processus échoue. Après un déploiement en phase de développement, le pipeline exécute des tests de validation pour vérifier les résultats. En cas de succès, le pipeline déploiera ensuite les artefacts dans l'environnement de test, qui contient une validation après le déploiement. La dernière étape consiste à déployer les artefacts dans l'environnement Prod.

Le schéma suivant montre le flux de travail entre le CodeCommit référentiel et les processus de création et de mise à jour exécutés par CodePipeline, les trois étapes de l'environnement de développement, ainsi que le déploiement et la validation ultérieurs dans chacun des trois environnements.

![\[L'environnement de développement inclut le linting, la sécurité et les tests unitaires, tous incluant le déploiement et la validation.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Outils
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS. Dans ce modèle, les CloudFormation modèles peuvent être utilisés pour créer un CodeCommit référentiel et un pipeline CodePipeline CI/CD.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) est un CI/CD service qui vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

**Autres outils**
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) est un outil open source qui recherche des modèles dans des CloudFormation modèles afin d'identifier les problèmes de sécurité potentiels.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)est un utilitaire permettant de transférer et d'extraire du code depuis des CodeCommit référentiels en étendant Git.
+ [Node.js](https://nodejs.org/en/docs/) est un environnement d' JavaScript exécution piloté par les événements conçu pour créer des applications réseau évolutives.

**Code**

Le code de ce modèle est disponible dans le référentiel GitHub [AWS CodePipeline with CI/CD practices](https://github.com/aws-samples/aws-codepipeline-cicd).

## Bonnes pratiques
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Passez en revue les ressources, telles que les politiques AWS Identity and Access Management (IAM), pour vérifier qu'elles sont conformes aux meilleures pratiques de votre organisation.

## Épopées
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Outils d'installation
<a name="install-tools"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez des outils sur macOS ou Linux. | Si vous utilisez macOS ou Linux, vous pouvez installer les outils en exécutant la commande suivante dans votre terminal préféré ou en utilisant [Homebrew pour Linux.](https://docs.brew.sh/Homebrew-on-Linux)<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps ingénieur | 
| Configurez l'AWS CLI. | Pour configurer l'AWS CLI, suivez les instructions correspondant à votre système d'exploitation :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingénieur | 

### Configuration du déploiement initial
<a name="set-up-the-initial-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez ou clonez le code. | Pour obtenir le code utilisé par ce modèle, effectuez l'une des opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre>Supprimez le `.git` répertoire du référentiel cloné.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre>Plus tard, vous utiliserez un CodeCommit dépôt AWS nouvellement créé comme origine distante. | DevOps ingénieur | 
| Connectez-vous au compte AWS. | Vous pouvez vous connecter à l'aide d'un jeton de sécurité temporaire ou d'une authentification par zone d'atterrissage. Pour vérifier que vous utilisez le bon compte et la bonne région AWS, exécutez les commandes suivantes.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps ingénieur | 
| Démarrez l'environnement. | Pour démarrer un environnement AWS CDK, exécutez les commandes suivantes.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Une fois que vous avez réussi à démarrer l'environnement, le résultat suivant doit être affiché.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre>Pour plus d'informations sur le démarrage d'AWS CDK, consultez la documentation du CDK [AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html). | DevOps ingénieur | 
| Synthétisez un modèle. | Pour synthétiser une application AWS CDK, utilisez la `cdk synth` commande.<pre>npm run cdk synth</pre>Le résultat suivant doit s'afficher.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps ingénieur | 
| Déployez la CodePipeline pile. | Maintenant que vous avez amorcé et synthétisé le CloudFormation modèle, vous pouvez le déployer. Le déploiement créera le CodePipeline pipeline et un CodeCommit référentiel, qui seront la source et le déclencheur du pipeline.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre>Après avoir exécuté la commande, vous devriez constater un déploiement réussi de la CodePipeline pile et des informations de sortie. Vous `CodePipeline.RepositoryName` donne le nom du CodeCommit référentiel dans le compte AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps ingénieur | 
| Configurez le CodeCommit référentiel et la branche distants. | Une fois le déploiement réussi, CodePipeline lancera la première exécution du pipeline, que vous trouverez dans la [ CodePipeline console AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Comme AWS CDK CodeCommit n'initie pas de branche par défaut, cette exécution initiale du pipeline échouera et renverra le message d'erreur suivant.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre>Pour corriger cette erreur, configurez une origine distante en tant que `SampleRepository` et créez la `main` branche requise.<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps ingénieur | 

### Testez le CodePipeline pipeline déployé
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez une modification pour activer le pipeline. | Après un déploiement initial réussi, vous devriez disposer d'un CI/CD pipeline complet avec une `main` branche pour `SampleRepository` en tant que branche source. Dès que vous validez les modifications apportées à la `main` branche, le pipeline lance et exécute la séquence d'actions suivante :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingénieur | 

### Testez localement en utilisant un Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez le processus de développement à l'aide d'un Makefile. | Vous pouvez exécuter l'ensemble du pipeline localement à l'aide de la `make` commande, ou vous pouvez exécuter une étape individuelle (par exemple,`make linting`).Pour tester l'utilisation`make`, effectuez les actions suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Développeur d'applications, DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources de l'application AWS CDK. | Pour nettoyer votre application AWS CDK, exécutez la commande suivante.<pre>cdk destroy --all</pre>Sachez que les compartiments Amazon Simple Storage Service (Amazon S3) créés lors du démarrage ne sont pas automatiquement supprimés. Ils ont besoin d'une politique de rétention autorisant leur suppression, ou vous devez les supprimer manuellement dans votre compte AWS. | DevOps ingénieur | 

## Résolution des problèmes
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le modèle ne fonctionne pas comme prévu. | Si quelque chose ne va pas et que le modèle ne fonctionne pas, assurez-vous que vous disposez des éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Ressources connexes
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Premiers pas avec les tâches courantes dans IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentation AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Kit de développement logiciel AWS](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

# Configurez une journalisation centralisée à l'échelle de l'entreprise à l'aide de Terraform
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Aarti Rajput, Yashwant Patel et Nishtha Yadav, Amazon Web Services*

## Résumé
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

La journalisation centralisée est vitale pour l'infrastructure cloud d'une entreprise, car elle fournit une visibilité sur ses opérations, sa sécurité et sa conformité. Au fur et à mesure que votre entreprise adapte son AWS environnement à plusieurs comptes, une stratégie structurée de gestion des journaux devient fondamentale pour exécuter les opérations de sécurité, répondre aux exigences d'audit et atteindre l'excellence opérationnelle.

Ce modèle fournit un cadre évolutif et sécurisé pour centraliser les journaux provenant de multiples services, afin de permettre la gestion Comptes AWS des journaux à l'échelle de l'entreprise dans le cadre de déploiements complexes. AWS La solution est automatisée à l'aide de Terraform, un outil d'infrastructure en tant que code (IaC) HashiCorp qui garantit des déploiements cohérents et répétables et minimise la configuration manuelle. En combinant Amazon CloudWatch Logs, Amazon Data Firehose et Amazon Simple Storage Service (Amazon S3), vous pouvez mettre en œuvre un pipeline robuste d'agrégation et d'analyse des journaux qui fournit :
+ Gestion centralisée des journaux au sein de votre organisation dans AWS Organizations
+ Collecte de journaux automatisée avec contrôles de sécurité intégrés
+ Traitement évolutif des journaux et stockage durable
+ Rapports de conformité et pistes d'audit simplifiés
+ Informations opérationnelles et surveillance en temps réel

La solution collecte les journaux à partir des AWS Lambda conteneurs, des fonctions et des instances de base de données Amazon Elastic Kubernetes Service (Amazon EKS) via Logs. CloudWatch Il transmet automatiquement ces journaux vers un compte de journalisation dédié à l'aide de filtres CloudWatch d'abonnement. Firehose gère le pipeline de streaming de journaux à haut débit vers Amazon S3 pour un stockage à long terme. Amazon Simple Queue Service (Amazon SQS) est configuré pour recevoir des notifications d'événements Amazon S3 lors de la création d'un objet. Cela permet l'intégration avec les services d'analyse, notamment :
+ Amazon OpenSearch Service pour la recherche dans les journaux, la visualisation et les analyses en temps réel
+ Amazon Athena pour les requêtes basées sur SQL
+ Amazon EMR pour le traitement à grande échelle
+ Lambda pour une transformation personnalisée
+ Amazon Quick Sight pour les tableaux de bord

Toutes les données sont cryptées à l'aide de AWS Key Management Service (AWS KMS), et l'ensemble de l'infrastructure est déployée à l'aide de Terraform pour une configuration cohérente dans tous les environnements.

Cette approche de journalisation centralisée permet aux entreprises d'améliorer leur niveau de sécurité, de respecter les exigences de conformité et d'optimiser l'efficacité opérationnelle de leur AWS infrastructure.

## Conditions préalables et limitations
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**Conditions préalables**
+ Une zone de landing zone pour votre organisation créée en utilisant [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)
+ [Account Factory pour Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html), déployé et configuré avec les comptes requis
+ [Terraform](https://developer.hashicorp.com/terraform/downloads) pour le provisionnement de l'infrastructure
+ Gestion des identités et des accès AWS Rôles et politiques [(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) pour l'accès entre comptes

Pour obtenir des instructions sur la configuration AWS Control Tower des comptes AFT et Application, consultez la [section Epics](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics).

**Comptes obligatoires**

Votre organisation AWS Organizations doit inclure les comptes suivants :
+ **Compte d'application** : un ou plusieurs comptes sources sur lesquels Services AWS (Amazon EKS, Lambda et Amazon RDS) s'exécutent et génèrent des journaux
+ **Compte Log Archive** : un compte dédié pour le stockage et la gestion centralisés des journaux

**Versions du produit**
+ [AWS Control Tower version 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) ou ultérieure
+ [Terraform version 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) ou ultérieure

## Architecture
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

Le schéma suivant illustre une architecture de journalisation AWS centralisée qui fournit une solution évolutive pour collecter, traiter et stocker les journaux de plusieurs comptes d'applications dans un compte Log Archive dédié. Cette architecture gère efficacement les journaux provenant Services AWS notamment d'Amazon RDS, Amazon EKS et Lambda, et les achemine via un processus rationalisé vers les compartiments S3 régionaux du compte Log Archive.

![\[Architecture de journalisation centralisée AWS pour collecter des journaux à partir de plusieurs comptes d'applications.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


Le flux de travail comprend cinq processus :

1. **Processus de journalisation**
   + Le processus de flux de journaux commence dans les comptes de l'application, où sont Services AWS générés différents types de journaux, tels que les journaux généraux, les journaux d'erreurs, les journaux d'audit, les journaux de requêtes lentes d'Amazon RDS, les journaux du plan de contrôle d'Amazon EKS et les journaux d'exécution et d'erreur de Lambda.
   + CloudWatch sert de point de collecte initial. Il rassemble ces journaux au niveau du groupe de journaux au sein de chaque compte d'application.
   + Dans CloudWatch, [les filtres d'abonnement](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) déterminent quels journaux doivent être transférés au compte central. Ces filtres vous permettent de contrôler de manière précise le transfert des journaux, afin que vous puissiez spécifier des modèles de journal exacts ou des flux de journaux complets à des fins de centralisation.

1. **Transfert de journaux entre comptes**
   + Les journaux sont transférés vers le compte Log Archive. CloudWatch les filtres d'abonnement facilitent le transfert entre comptes et préservent le contexte régional.
   + L'architecture établit plusieurs flux parallèles pour gérer efficacement différentes sources de journaux, afin de garantir des performances et une évolutivité optimales.

1. **Traitement des journaux dans le compte Log Archive**
   + Dans le compte Log Archive, Firehose traite les flux de journaux entrants.
   + Chaque région gère des flux de diffusion Firehose dédiés qui peuvent transformer, convertir ou enrichir les logs selon les besoins.
   + Ces flux Firehose fournissent les journaux traités aux compartiments S3 du compte Log Archive, qui se trouve dans la même région que les comptes de l'application source (région A dans le schéma) afin de respecter les exigences de souveraineté des données.

1. **Notifications et flux de travail supplémentaires**
   + Lorsque les logs atteignent leurs compartiments S3 de destination, l'architecture implémente un système de notification à l'aide d'Amazon SQS.
   + Les files d'attente SQS régionales permettent un traitement asynchrone et peuvent déclencher des flux de travail, des analyses ou des systèmes d'alerte supplémentaires en fonction des journaux stockés.

1. **AWS KMS pour la sécurité**

   L'architecture intègre des éléments AWS KMS de sécurité. AWS KMS fournit des clés de chiffrement pour les compartiments S3. Cela garantit que tous les journaux stockés maintiennent le chiffrement au repos tout en conservant le chiffrement régional pour répondre aux exigences de résidence des données.

## Outils
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**Services AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) est un service de surveillance et d'observabilité qui collecte des données opérationnelles et de surveillance sous forme de journaux, de mesures et d'événements. Il fournit une vue unifiée des AWS ressources, des applications et des services qui s'exécutent sur AWS et sur des serveurs sur site.
+ CloudWatch Les [filtres d'abonnement aux journaux](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html) sont des expressions qui correspondent à un modèle des événements de journal entrants et fournissent les événements de journal correspondants à la AWS ressource spécifiée pour un traitement ou une analyse ultérieurs.
+ [AWS Control Tower Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) met en place un pipeline Terraform pour vous aider à approvisionner et à personnaliser des comptes dans. AWS Control Tower AFT fournit un provisionnement de comptes basé sur Terraform tout en vous permettant de gérer vos comptes avec. AWS Control Tower
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) fournit des données de streaming en temps réel vers des destinations telles qu'Amazon S3, Amazon Redshift et Amazon Service. OpenSearch Il s'adapte automatiquement au débit de vos données et ne nécessite aucune administration continue.
+ [Amazon Elastic Kubernetes Service (Amazon EKS) est un service d'orchestration de conteneurs géré qui facilite le déploiement, la gestion et le dimensionnement d'applications conteneurisées à l'aide de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html). Il gère automatiquement la disponibilité et l'évolutivité des nœuds du plan de contrôle Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) crée et contrôle les clés de chiffrement pour chiffrer vos données. AWS KMS s'intègre Services AWS à d'autres services pour vous aider à protéger les données que vous stockez avec ces services.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)est un service de calcul sans serveur qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs. Il adapte automatiquement vos applications en exécutant du code en réponse à chaque déclencheur, et ne facture que le temps de calcul que vous utilisez.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) est un service de base de données relationnelle géré qui facilite la configuration, l'exploitation et le dimensionnement d'une base de données relationnelle dans le cloud. Il fournit une capacité rentable et redimensionnable tout en automatisant les tâches d'administration fastidieuses.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) est un service de mise en file d'attente de messages qui vous permet de découpler et de dimensionner les microservices, les systèmes distribués et les applications sans serveur. Il élimine la complexité de la gestion et de l'exploitation d'un intergiciel orienté message.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui offre évolutivité, disponibilité des données, sécurité et performances. Il peut stocker et récupérer n'importe quelle quantité de données n'importe où sur le Web.

**Autres outils**
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Code**

Le code de ce modèle est disponible dans le référentiel de [journalisation GitHub centralisé](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform).

## Bonnes pratiques
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ Utilisez [plusieurs Comptes AWS au sein d'une même organisation dans AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html). Cette pratique permet une gestion centralisée et une journalisation standardisée entre les comptes.
+ Configurez les [compartiments S3 avec le versionnement, les politiques de cycle de vie et la réplication entre](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html) régions. Mettez en œuvre le chiffrement et la journalisation des accès pour des raisons de sécurité et de conformité.
+ Mettez en œuvre des [normes de journalisation communes en utilisant le format JSON](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) avec des horodatages et des champs standard. Utilisez une structure de préfixes et une corrélation cohérentes IDs pour faciliter le suivi et l'analyse.
+ Activez [les contrôles de sécurité grâce au AWS KMS chiffrement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) et à l'accès avec le moindre privilège. Maintenez une AWS CloudTrail surveillance et une rotation régulière des clés pour une sécurité renforcée.
+ Configurez [CloudWatch des métriques et des alertes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) pour le suivi des livraisons. Surveillez les coûts et les performances grâce à des notifications automatisées.
+ Configurez [les politiques de rétention Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) pour répondre aux exigences de conformité et activez la journalisation des accès au serveur Amazon S3 pour suivre toutes les demandes adressées à vos compartiments S3. Tenez à jour la documentation relative aux politiques relatives aux compartiments S3 et aux règles de cycle de vie. Révisez régulièrement les journaux d'accès, les autorisations des compartiments et les configurations de stockage afin de garantir la conformité et les [meilleures pratiques en matière de sécurité](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Épopées
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### Comptes de configuration AWS Control Tower, AFT et d'application
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un AWS Control Tower environnement avec AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrateur AWS | 
| Activez le partage des ressources pour l'organisation. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrateur AWS | 
| Vérifiez ou approvisionnez les comptes de l'application. | Pour configurer de nouveaux comptes d'application pour votre cas d'utilisation, créez-les via AFT. Pour plus d'informations, voir [Provisionner un nouveau compte avec AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) dans la AWS Control Tower documentation. | Administrateur AWS | 

### Configuration des fichiers de configuration pour les comptes d'applications
<a name="set-up-configuration-files-for-application-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez `Application_account` le contenu du dossier dans le `aft-account-customizations` référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Vérifiez et modifiez les paramètres d'entrée pour configurer le compte de l'application. | Au cours de cette étape, vous configurez le fichier de configuration pour créer des ressources dans les comptes d'applications, notamment les groupes de CloudWatch journaux, les filtres CloudWatch d'abonnement, les rôles et politiques IAM, ainsi que les détails de configuration pour les fonctions Amazon RDS, Amazon EKS et Lambda.Dans votre `aft-account-customizations` référentiel, dans le `Application_account` dossier, configurez les paramètres d'entrée du `terraform.tfvars` fichier en fonction des exigences de votre organisation :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 

### Configuration des fichiers de configuration pour le compte Log Archive
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez `Log_archive_account` le contenu du dossier dans le `aft-account-customizations` référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Vérifiez et modifiez les paramètres d'entrée pour configurer le compte Log Archive. | Au cours de cette étape, vous configurez le fichier de configuration pour créer des ressources dans le compte Log Archive, notamment les flux de diffusion Firehose, les compartiments S3, les files d'attente SQS, ainsi que les rôles et politiques IAM.Dans le `Log_archive_account` dossier de votre `aft-account-customizations` référentiel, configurez les paramètres d'entrée dans le `terraform.tfvars` fichier en fonction des exigences de votre organisation :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 

### Exécutez des commandes Terraform pour provisionner des ressources
<a name="run-terraform-commands-to-provision-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Option 1 - Déployez les fichiers de configuration Terraform depuis AFT. | Dans AFT, le pipeline AFT est déclenché une fois que vous avez envoyé le code contenant les modifications de configuration dans le GitHub `aft-account-customizations` référentiel. AFT détecte automatiquement les modifications et lance le processus de personnalisation du compte.Après avoir apporté des modifications à vos fichiers Terraform (`terraform.tfvars`), validez et transférez vos modifications dans votre référentiel : `aft-account-customizations`<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>Si vous utilisez une autre branche (par exemple`dev`), remplacez-la `main` par le nom de votre succursale. | DevOps ingénieur | 
| Option 2 - Déployez le fichier de configuration Terraform manuellement. | Si vous n'utilisez pas AFT ou si vous souhaitez déployer la solution manuellement, vous pouvez utiliser les commandes Terraform suivantes à partir des dossiers `Application_account` et `Log_archive_account` :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 

### Valider les ressources
<a name="validate-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez les filtres d'abonnement. | Pour vérifier que les filtres d'abonnement transfèrent correctement les journaux des groupes de journaux du compte de l'application vers le compte Log Archive :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Vérifiez les streams Firehose. | Pour vérifier que les streams Firehose contenus dans le compte Log Archive traitent correctement les journaux de l'application :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Validez les compartiments S3 centralisés. | Pour vérifier que les compartiments S3 centralisés reçoivent et organisent correctement les journaux :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Validez les files d'attente SQS. | Pour vérifier que les files d'attente SQS reçoivent des notifications pour les nouveaux fichiers journaux :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Option 1 - Désaffecter le fichier de configuration Terraform d'AFT. | Lorsque vous supprimez les fichiers de configuration Terraform et que vous appliquez les modifications, AFT lance automatiquement le processus de suppression des ressources.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 
| Option 2 — Nettoyez les ressources Terraform manuellement. | Si vous n'utilisez pas AFT ou si vous souhaitez nettoyer les ressources manuellement, utilisez les commandes Terraform suivantes à partir des dossiers `Application_account` et `Log_archive_account` :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La destination CloudWatch Logs n'a pas été créée ou est inactive. | Validez les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Le filtre d'abonnement a échoué ou est bloqué en attente. | Vérifiez les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Le flux de livraison Firehose n'affiche aucun enregistrement entrant. | Vérifiez les paramètres suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## Ressources connexes
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Configuration de l'infrastructure Terraform (documentation](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Terraform)
+ [Déployer AWS Control Tower Account Factory pour Terraform (AFT) (AWS Control Tower documentation)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)
+ [Tutoriel IAM : Déléguer l'accès à l' Comptes AWS aide de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) () IAMdocumentation

# Configurer le end-to-end chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Evasiddappa et Vasanth Jeyaraj, Amazon Web Services*

## Résumé
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

La mise en œuvre du end-to-end chiffrement peut être complexe et vous devez gérer les certificats pour chaque actif de votre architecture de microservices. Bien que vous puissiez mettre fin à la connexion TLS (Transport Layer Security) à la périphérie du réseau Amazon Web Services (AWS) à l'aide d'un Network Load Balancer ou d'Amazon API Gateway, certaines organisations end-to-end exigent le chiffrement.

Ce modèle utilise le contrôleur d'entrée NGINX pour l'entrée. En effet, lorsque vous créez une entrée Kubernetes, la ressource d'entrée utilise un Network Load Balancer. Le Network Load Balancer n'autorise pas le téléchargement de certificats clients. Par conséquent, vous ne pouvez pas obtenir un TLS mutuel avec Kubernetes Ingress.

Ce modèle est destiné aux organisations qui ont besoin d'une authentification mutuelle entre tous les microservices de leurs applications. Le protocole TLS mutuel réduit le fardeau lié à la gestion des noms d'utilisateur ou des mots de passe et peut également utiliser le cadre de sécurité clé en main. L'approche de ce modèle est compatible si votre entreprise possède un grand nombre d'appareils connectés ou doit se conformer à des directives de sécurité strictes.

Ce modèle permet d'améliorer le niveau de sécurité de votre entreprise en implémentant le end-to-end chiffrement pour les applications exécutées sur Amazon Elastic Kubernetes Service (Amazon EKS). Ce modèle fournit un exemple d'application et de code dans le référentiel de GitHub [End-to-end chiffrement sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) pour montrer comment un microservice fonctionne avec le end-to-end chiffrement sur Amazon EKS. L'approche du modèle utilise [cert-manager](https://cert-manager.io/docs/), un module complémentaire de Kubernetes, avec [Let's Encrypt](https://letsencrypt.org/) comme autorité de certification (CA). Let's Encrypt est une solution rentable pour gérer les certificats et fournit des certificats gratuits valables pendant 90 jours. Cert-Manager automatise le provisionnement à la demande et la rotation des certificats lorsqu'un nouveau microservice est déployé sur Amazon EKS. 

**Public visé**

Ce modèle est recommandé aux utilisateurs qui ont de l'expérience avec Kubernetes, TLS, Amazon Route 53 et le système de noms de domaine (DNS).

## Conditions préalables et limitations
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Un cluster Amazon EKS existant.
+ Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows.
+ L'utilitaire de ligne de `kubectl` commande, installé et configuré pour accéder au cluster Amazon EKS. Pour plus d'informations à ce sujet, consultez la section [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS.
+ Nom DNS existant pour tester l'application. Pour plus d'informations à ce sujet, consultez la section [Enregistrement de noms de domaine à l'aide d'Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) dans la documentation Amazon Route 53. 
+ La dernière version de [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), installée sur votre machine locale. Pour plus d'informations à ce sujet, consultez la section [Utilisation de Helm avec Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) dans la documentation Amazon EKS et dans le référentiel GitHub [Helm](https://github.com/helm/helm). 
+ Le GitHub [End-to-end chiffrement sur le référentiel Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), cloné sur votre machine locale. 
+ Remplacez les valeurs suivantes dans les `trustpolicy.json` fichiers `policy.json` et du référentiel de GitHub [End-to-end chiffrement cloné sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) :
  + `<account number>`— Remplacez-le par l'ID de compte AWS du compte dans lequel vous souhaitez déployer la solution. 
  + `<zone id>`— Remplacez par l'ID de zone Route 53 du nom de domaine. 
  + `<node_group_role>`— Remplacez par le nom du rôle AWS Identity and Access Management (IAM) associé aux nœuds Amazon EKS.
  + `<namespace>`— Remplacez par l'espace de noms Kubernetes dans lequel vous déployez le NGINX Ingress Controller et l'exemple d'application.
  + `<application-domain-name>`— Remplacez par le nom de domaine DNS de Route 53.

**Limites**
+ Ce modèle ne décrit pas comment alterner les certificats et montre uniquement comment utiliser les certificats avec des microservices sur Amazon EKS. 

## Architecture
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail pour configurer le chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un client envoie une demande d'accès à l'application au nom DNS.

1. L'enregistrement Route 53 est un CNAME pour le Network Load Balancer.

1. Le Network Load Balancer transmet la demande au NGINX Ingress Controller configuré avec un écouteur TLS. La communication entre le NGINX Ingress Controller et le Network Load Balancer suit le protocole HTTPS.

1. Le NGINX Ingress Controller effectue un routage basé sur le chemin en fonction de la demande du client au service d'application.

1. Le service d'application transmet la demande au module d'application. L'application est conçue pour utiliser le même certificat en appelant des secrets.

1. Les pods exécutent l'exemple d'application à l'aide des certificats cert-manager. La communication entre le NGINX Ingress Controller et les pods utilise le protocole HTTPS.


| 
| 
| Remarque : Cert-Manager s'exécute dans son propre espace de noms. Il utilise un rôle de cluster Kubernetes pour fournir des certificats sous forme de secrets dans des espaces de noms spécifiques. Vous pouvez associer ces espaces de noms aux modules d'application et au NGINX Ingress Controller.  | 
| --- |

## Outils
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Services AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) est un service géré que vous pouvez utiliser pour exécuter Kubernetes sur AWS sans avoir à installer, exploiter et gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribue automatiquement votre trafic entrant sur plusieurs cibles, conteneurs et adresses IP.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.

**Autres outils**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) est un module complémentaire de Kubernetes qui demande des certificats, les distribue aux conteneurs Kubernetes et automatise le renouvellement des certificats.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) est une solution de gestion du trafic pour les applications cloud natives dans Kubernetes et les environnements conteneurisés.

## Épopées
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Création et configuration d'une zone hébergée publique avec Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une zone hébergée publique sur Route 53. | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon Route 53, choisissez **Hosted zones**, puis **Create hosted zone**. Créez une zone hébergée publique et enregistrez l'ID de zone. Pour plus d'informations à ce sujet, consultez [la section Création d'une zone hébergée publique](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) dans la documentation Amazon Route 53.ACME DNS01 utilise le fournisseur DNS pour demander au gestionnaire de certificats de délivrer le certificat. Ce défi vous demande de prouver que vous contrôlez le DNS de votre nom de domaine en saisissant une valeur spécifique dans un enregistrement TXT sous ce nom de domaine. Une fois que Let's Encrypt a fourni un jeton à votre client ACME, celui-ci crée un enregistrement TXT dérivé de ce jeton et de votre clé de compte, et place cet enregistrement à. `_acme-challenge.<YOURDOMAIN>` Let's Encrypt interroge ensuite le DNS pour cet enregistrement. S'il trouve une correspondance, vous pouvez procéder à l'émission d'un certificat. | AWS DevOps | 

### Configurer un rôle IAM pour autoriser le gestionnaire de certificats à accéder à la zone hébergée publique
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la politique IAM pour cert-manager.  | Une politique IAM est requise pour fournir à cert-manager l'autorisation de valider que vous êtes propriétaire du domaine Route 53. L'`policy.json`exemple de politique IAM est fourni dans le `1-IAMRole` répertoire du référentiel de GitHub [End-to-end chiffrement cloné sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Entrez la commande suivante dans l'AWS CLI pour créer la politique IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Créez le rôle IAM pour cert-manager. | Après avoir créé la politique IAM, vous devez créer un rôle IAM. L'`trustpolicy.json`exemple de rôle IAM est fourni dans le `1-IAMRole` répertoire.Entrez la commande suivante dans l'AWS CLI pour créer le rôle IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Attachez la stratégie au rôle. | Entrez la commande suivante dans l'AWS CLI pour associer la politique IAM au rôle IAM. `AWS_ACCOUNT_ID`Remplacez-le par l'ID de votre compte AWS. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Configurer le contrôleur d'entrée NGINX dans Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le NGINX Ingress Controller. | Installez la version la plus récente d'`nginx-ingress`utilisation de Helm. Vous pouvez modifier la `nginx-ingress` configuration en fonction de vos besoins avant de la déployer. Ce modèle utilise un Network Load Balancer annoté et orienté vers l'interne, disponible dans le répertoire. `5-Nginx-Ingress-Controller` Installez le NGINX Ingress Controller en exécutant la commande Helm suivante depuis le répertoire. `5-Nginx-Ingress-Controller``helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Vérifiez que le NGINX Ingress Controller est installé. | Entrez la commande `helm list`. La sortie doit indiquer que le NGINX Ingress Controller est installé. | AWS DevOps | 
| Créez un enregistrement Route 53 A. | L'enregistrement A pointe vers le Network Load Balancer créé par NGINX Ingress Controller.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Configurer NGINX VirtualServer sur Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez NGINX VirtualServer. | La VirtualServer ressource NGINX est une configuration d'équilibrage de charge qui constitue une alternative à la ressource d'entrée. La configuration permettant de créer la VirtualServer ressource NGINX est disponible dans le `nginx_virtualserver.yaml` fichier du répertoire. `6-Nginx-Virtual-Server` Entrez la commande suivante `kubectl` pour créer la ressource NGINX VirtualServer .`kubectl apply -f  nginx_virtualserver.yaml`Assurez-vous de mettre à jour le nom de domaine de l'application, le secret du certificat et le nom du service de l'application dans le `nginx_virtualserver.yaml` fichier. | AWS DevOps | 
| Vérifiez que NGINX VirtualServer est créé. | Entrez la commande suivante `kubectl` pour vérifier que la VirtualServer ressource NGINX a été créée avec succès.`kubectl get virtualserver`Vérifiez que la `Host` colonne correspond au nom de domaine de votre application. | AWS DevOps | 
| Déployez le serveur Web NGINX avec le protocole TLS activé. | Ce modèle utilise un serveur Web NGINX avec TLS activé comme application pour tester le chiffrement. end-to-end Les fichiers de configuration requis pour déployer l'application de test sont disponibles dans le `demo-webserver` répertoire. Entrez la commande suivante `kubectl` pour déployer l'application de test.`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Vérifiez que les ressources de l'application de test sont créées. | Entrez les commandes suivantes `kubectl` pour vérifier que les ressources requises sont créées pour l'application de test :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validez l'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Ressources connexes
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Ressources AWS**
+ [Création d'enregistrements à l'aide de la console Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (documentation Amazon Route 53)
+ [Utilisation d'un Network Load Balancer avec le contrôleur d'entrée NGINX sur Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (article de blog AWS)

**Autres ressources**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (documentation du gestionnaire de certificats)
+ [Configuration du fournisseur de défis DNS01](https://cert-manager.io/docs/configuration/acme/dns01/) (documentation du gestionnaire de certificats)
+ [Défi DNS Let's Encrypt](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (documentation Let's Encrypt)

# Simplifiez le déploiement d'applications multi-locataires Amazon EKS en utilisant Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate et Shrikant Patil, Amazon Web Services*

## Résumé
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

De nombreuses entreprises proposant des produits et services sont des secteurs réglementés par les données qui doivent maintenir des barrières entre leurs fonctions commerciales internes. Ce modèle décrit comment vous pouvez utiliser la fonctionnalité multi-tenant d'Amazon Elastic Kubernetes Service (Amazon EKS) pour créer une plate-forme de données qui assure une isolation logique et physique entre les locataires ou les utilisateurs qui partagent un seul cluster Amazon EKS. Le modèle fournit une isolation grâce aux approches suivantes :
+ Isolation de l'espace de noms Kubernetes
+ Contrôle d’accès basé sur les rôles (RBAC)
+ Stratégies réseau
+ Quotas de ressources
+ Gestion des identités et des accès AWS Rôles (IAM) pour les comptes de service (IRSA)

En outre, cette solution utilise Flux pour maintenir la configuration du locataire immuable lorsque vous déployez des applications. Vous pouvez déployer vos applications mutualisées en spécifiant le référentiel client qui contient le `kustomization.yaml` fichier Flux dans votre configuration.

Ce modèle implémente les éléments suivants :
+ Un AWS CodeCommit référentiel, AWS CodeBuild des projets et un AWS CodePipeline pipeline, créés en déployant manuellement des scripts Terraform.
+ Composants réseau et informatiques nécessaires à l'hébergement des locataires. Ils sont créés par CodePipeline et CodeBuild en utilisant Terraform.
+ Les espaces de noms des locataires, les politiques réseau et les quotas de ressources, qui sont configurés via un diagramme de Helm.
+ Applications appartenant à différents locataires, déployées à l'aide de Flux.

Nous vous recommandons de planifier et de créer soigneusement votre propre architecture pour la mutualisation en fonction de vos exigences uniques et de vos considérations de sécurité. Ce modèle constitue un point de départ pour votre mise en œuvre.

## Conditions préalables et limitations
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ AWS Command Line Interface [(AWS CLI) version 2.11.4 ou ultérieure, [installée et configurée](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) version 0.12 ou ultérieure installée sur votre machine locale
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) version 3.0.0 ou ultérieure
+ [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) version 2.10 ou ultérieure
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) version 2.8.0 ou ultérieure
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) version 1.14 ou ultérieure

**Limites**
+ **Dépendance à l'égard des déploiements manuels de Terraform :** La configuration initiale du flux de travail, y compris la création de CodeCommit référentiels, de CodeBuild projets et de CodePipeline pipelines, repose sur des déploiements manuels de Terraform. Cela introduit une limite potentielle en termes d'automatisation et d'évolutivité, car cela nécessite une intervention manuelle pour les modifications de l'infrastructure.
+ **CodeCommit dépendance aux référentiels :** le flux de travail repose sur CodeCommit les référentiels en tant que solution de gestion du code source et est étroitement associé Services AWSà.

## Architecture
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Architectures cibles**

Ce modèle déploie trois modules pour créer le pipeline, le réseau et l'infrastructure de calcul d'une plate-forme de données, comme illustré dans les diagrammes suivants.

*Architecture du pipeline :*

![\[Infrastructure de pipeline pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Architecture réseau :*

![\[Infrastructure réseau pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Architecture de calcul :*

![\[Infrastructure de calcul pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Outils
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Services AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)est un hub central qui connecte des clouds privés virtuels (VPCs) et des réseaux sur site.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ Les politiques réseau de [Cilium prennent en charge les politiques réseau](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 et L4. Ils peuvent être étendus avec des politiques L7 afin de fournir une sécurité au niveau de l'API pour HTTP, Kafka et gRPC, ainsi que pour d'autres protocoles similaires.
+ [Flux](https://fluxcd.io/) est un outil de diffusion continue (CD) basé sur Git qui automatise les déploiements d'applications sur Kubernetes.
+ [Helm](https://helm.sh/docs/) est un gestionnaire de packages open source pour Kubernetes qui vous aide à installer et à gérer des applications sur votre cluster Kubernetes.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Bonnes pratiques
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Pour les directives et les meilleures pratiques relatives à l'utilisation de cette implémentation, consultez les rubriques suivantes :
+ [Bonnes pratiques en matière de location multiple Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentation sur les flux](https://fluxcd.io/flux/get-started/)

## Épopées
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Créez des pipelines pour les étapes de construction, de test et de déploiement de Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel du projet. | Clonez le référentiel GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Démarrez le compartiment Terraform S3 et Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Mettez à jour les `locals.tf` fichiers `run.sh` et. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Déployez le module de pipeline. | Pour créer des ressources de pipeline, exécutez manuellement les commandes Terraform suivantes. Il n'existe aucune orchestration pour exécuter ces commandes automatiquement.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Création de l'infrastructure réseau
<a name="create-the-network-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Démarrez le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Après cette première exécution, le pipeline démarre automatiquement chaque fois que vous validez une modification dans la branche principale du CodeCommit référentiel.Le pipeline comprend les [étapes](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages) suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validez les ressources créées via le module réseau. | Vérifiez que les AWS ressources suivantes ont été créées après le déploiement réussi du pipeline :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Création de l'infrastructure informatique
<a name="create-the-compute-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mise `locals.tf` à jour pour permettre l'accès du CodeBuild projet au VPC. | Pour déployer les modules complémentaires pour le cluster privé Amazon EKS, le CodeBuild projet doit être attaché au VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Mettez à jour les `buildspec` fichiers pour créer le module de calcul. | Dans le `templates` dossier, dans tous les fichiers `buildspec` YAML, définissez la valeur de la `TF_MODULE_TO_BUILD` variable de `network` à `compute` :<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Mettez à jour le `values` fichier du diagramme Helm de gestion des locataires. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validez les ressources de calcul. | Après avoir mis à jour les fichiers au cours des étapes précédentes, CodePipeline démarre automatiquement. Vérifiez qu'il a créé les AWS ressources suivantes pour l'infrastructure de calcul :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Vérifiez la gestion des locataires et les autres ressources
<a name="check-tenant-management-and-other-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez les ressources de gestion des locataires dans Kubernetes. | Exécutez les commandes suivantes pour vérifier que les ressources de gestion des locataires ont été créées avec succès à l'aide de Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Vérifiez les déploiements d'applications clientes. | Exécutez les commandes suivantes pour vérifier que les applications clientes ont été déployées.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Résolution des problèmes
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Vous recevez un message d'erreur similaire au suivant :`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Pour résoudre le problème, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Ressources connexes
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Blueprints Amazon EKS pour Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guides des meilleures pratiques Amazon EKS, section sur l'hébergement mutualisé](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Site web de Flux](https://fluxcd.io/)
+ [Site web de Helm](https://helm.sh/)

## Informations supplémentaires
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Voici un exemple de structure de référentiel pour le déploiement d'applications clientes :

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```

# Simplifiez le développement et le déploiement des robots Amazon Lex à l'aide d'un flux de travail automatisé
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam, Attila Dancso, Pavan Dusanapudi, Anand Jumnani et James O'Hara, Amazon Web Services*

## Résumé
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

Le développement et le déploiement de robots conversationnels Amazon Lex peuvent s'avérer difficiles lorsque vous essayez de gérer plusieurs fonctionnalités, développeurs et environnements. Un flux de travail automatisé utilisant les principes de l'infrastructure en tant que code (IaC) peut aider à rationaliser le processus. Ce modèle peut contribuer à améliorer la productivité des développeurs Amazon Lex et à permettre une gestion efficace du cycle de vie des bots de la manière suivante :
+ **Permettre le développement simultané de plusieurs fonctionnalités** - Grâce à un flux de travail automatisé, les développeurs peuvent travailler sur différentes fonctionnalités en parallèle dans des branches distinctes. Les modifications peuvent ensuite être fusionnées et déployées sans bloquer d'autres tâches.
+ **Utilisez l'interface utilisateur de la console Amazon Lex** : les développeurs peuvent utiliser la console conviviale Amazon Lex pour créer et tester des robots. Les robots sont ensuite décrits dans le code d'infrastructure pour le déploiement.
+ **Promouvoir les robots dans tous les environnements** - Le flux de travail automatise la promotion des versions de robots provenant d'environnements inférieurs, tels que le développement, les tests et la production. Cette approche réduit les risques et les frais généraux liés aux promotions manuelles.
+ **Maintenir le contrôle des versions** : la gestion des définitions de bots dans Git, plutôt que uniquement via le service Amazon Lex, vous permet de contrôler les versions et d'établir une piste d'audit. Les modifications sont suivies auprès des développeurs individuels, contrairement à ce qui se passe lorsque vous utilisez AWS Management Console ou APIs modifiez uniquement les robots stockés dans AWS. 

En automatisant le processus de publication du bot Amazon Lex, les équipes peuvent fournir des fonctionnalités plus rapidement, tout en réduisant les risques et les efforts. Les bots restent sous contrôle de version plutôt qu'isolés dans la console Amazon Lex. 

## Conditions préalables et limitations
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**Prérequis**
+ Le flux de travail implique plusieurs Comptes AWS environnements (développement, production et DevOps), ce qui nécessite une gestion des comptes et des configurations d'accès entre comptes.
+ Python 3.9 est disponible dans votre environnement de déploiement ou votre pipeline.
+ Git [est installé](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) et configuré sur un poste de travail local pour le contrôle du code source.
+ AWS Command Line Interface (AWS CLI) [installé](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) et configuré pour s'authentifier à l'aide de la ligne de commande ou de Python.

**Limites**
+ **Accès au référentiel** — Le flux de travail suppose que le pipeline d'intégration continue et de livraison continue (CI/CD) dispose des autorisations nécessaires pour valider les modifications apportées au référentiel de code source. 
+ **Version initiale du bot** : l'outillage nécessite qu'une version initiale du bot soit déployée à l'aide de AWS CloudFormation modèles. Vous devez créer la première itération du bot et la valider dans le dépôt avant que le flux de travail automatisé puisse prendre le relais.
+ **Conflits de fusion** — Bien que le flux de travail vise à permettre le développement simultané, il existe toujours un risque de conflits de fusion lors de l'intégration de modifications provenant de différentes branches. La résolution des conflits dans les configurations des robots peut nécessiter une intervention manuelle.

**Versions du produit**
+ [Python 3.9](https://www.python.org/downloads/) ou supérieur
+ [AWS CDK v2 2.124.0 ou supérieur](https://docs.aws.amazon.com/cdk/api/versions.html)
+ [AWS SDK pour Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/)1,28 ou supérieur

## Architecture
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

Le schéma suivant présente l'architecture de haut niveau et les principaux composants de la solution.

![\[Flux de travail pour automatiser le développement et le déploiement des robots Amazon Lex.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


Les principaux composants sont les suivants :
+ **Repo de bots Lex : référentiel** Git qui stocke les définitions iAc pour les robots Amazon Lex.
+ **DevOps**— Un espace Compte AWS dédié au logement des CI/CD pipelines et des ressources connexes pour le processus de développement et de déploiement.
+ **Pipelines** : AWS CodePipeline instances qui automatisent les différentes étapes du cycle de développement et de déploiement du bot, telles que la création d'un nouveau bot, l'exportation de la définition d'un bot, l'importation d'une définition de bot et la suppression d'un bot.
+ **Bots de tickets et bot principal** : les ressources du bot Amazon Lex, où les bots de ticket sont des robots spécifiques aux fonctionnalités développés par des équipes ou des développeurs individuels et le bot principal est le bot de base qui intègre toutes les fonctionnalités.

Le schéma d'architecture illustre le flux de travail suivant :

1. **Bot principal de référence** : le point de départ du flux de travail consiste à définir la base de référence du bot principal dans l'environnement de développement (Dev). Le bot principal sert de base au développement futur et aux ajouts de fonctionnalités.

1. **Créer un bot de tickets** : lorsqu'une nouvelle fonctionnalité ou une modification est requise, un bot de tickets est créé. Le bot de tickets est essentiellement une copie ou une branche du bot principal sur laquelle les développeurs peuvent travailler sans affecter la version principale.

1. **Exporter le bot de tickets** : une fois le travail sur le bot de tickets terminé, celui-ci est exporté depuis le service Amazon Lex. Ensuite, la branche qui contient le ticket bot est rebasée à partir de la branche principale. Cette étape garantit que toutes les modifications apportées au bot principal pendant le développement du bot de tickets sont incorporées, réduisant ainsi les conflits potentiels.

1. **Importer un bot de tickets rebasé et valider** — Le bot de tickets rebasé est réimporté dans l'environnement de développement et validé pour garantir qu'il fonctionne correctement avec les dernières modifications apportées par la branche principale. Si la validation est réussie, une pull request (PR) est créée pour fusionner les modifications du ticket bot dans la branche principale.

1. **Supprimer le bot de tickets** — Une fois que les modifications ont été fusionnées avec succès dans la branche principale, le bot de tickets n'est plus nécessaire. Le bot de tickets peut être supprimé pour que l'environnement reste propre et gérable.

1. **Déployer le bot principal dans l'environnement de développement et le tester** : le bot principal mis à jour, qui inclut désormais les nouvelles fonctionnalités ou modifications, est déployé dans l'environnement de développement. Ici, il est soumis à des tests approfondis pour s'assurer que toutes les fonctionnalités fonctionnent comme prévu.

1. **Déployer le bot principal dans l'environnement de production** : une fois que les tests dans l'environnement de développement sont terminés et réussis, le bot principal est déployé dans l'environnement de production. Cette étape est la dernière étape du flux de travail, au cours de laquelle les nouvelles fonctionnalités sont mises à la disposition des utilisateurs finaux.

**Automatisation et mise à l'échelle**

Le flux de travail automatisé permet aux développeurs de travailler sur différentes fonctionnalités en parallèle, chacune dans des branches distinctes. Cela facilite le développement simultané, permettant aux équipes de collaborer efficacement et de fournir des fonctionnalités plus rapidement. Les branches étant isolées les unes des autres, les modifications peuvent être fusionnées et déployées sans bloquer ou interférer avec les autres travaux en cours.

Le flux de travail automatise le déploiement et la promotion des versions de bots dans différents environnements, tels que le développement, les tests et la production.

Le stockage des définitions de bots dans un système de contrôle de version tel que Git fournit une piste d'audit complète et permet une collaboration efficace. Les modifications sont suivies auprès des développeurs individuels, ce qui garantit la transparence et la responsabilité tout au long du cycle de développement. Cette approche facilite également les révisions du code, permettant aux équipes d'identifier et de résoudre les problèmes avant le déploiement en production.

En utilisant une autre AWS CodePipeline méthode Services AWS, le flux de travail automatisé peut évoluer pour s'adapter à l'augmentation des charges de travail et à la taille des équipes.

## Outils
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement de logiciels open source permettant de définir AWS Cloud l'infrastructure dans le code en utilisant des langages de programmation familiers et en la provisionnant via. CloudFormation L'exemple d'implémentation de ce modèle utilise Python.
+ [AWS CDK Interface de ligne de commande (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) - Le AWS CDK kit d'outils est le principal outil d'interaction avec votre AWS CDK application. Il exécute votre application, interroge le modèle d'application que vous avez défini, produit et déploie les CloudFormation modèles générés par le CDK.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie, de bout Comptes AWS en bout Régions AWS. Ce modèle est utilisé CloudFormation pour déployer les configurations du bot Amazon Lex et les ressources associées en utilisant l'infrastructure sous forme de code.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés. Ce modèle est utilisé CodeBuild pour créer et empaqueter les artefacts de déploiement.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles. Ce modèle est utilisé CodePipeline pour orchestrer le pipeline de livraison continue.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) permet de créer Service AWS des interfaces conversationnelles (bots) pour les applications utilisant la voix et le texte.
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.

**Autres outils**
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué open source.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex). Le dépôt de code contient les dossiers et fichiers suivants :
+ `prerequisite`dossier — Contient les définitions de CloudFormation pile (à l'aide du AWS CDK) pour configurer les ressources et les environnements requis.
+ `prerequisite/lexmgmtworkflow`dossier — Répertoire principal du projet Lex Management Workflow, y compris les définitions des piles et le code Python.
+ `prerequisite/tests`— Contient des tests unitaires.
+ `src`dossier : répertoire du code source, y compris le wrapper de gestion des robots Amazon Lex et les utilitaires.
+ `src/dialogue_lambda`— Répertoire du code source de la fonction Lambda du crochet de dialogue qui intercepte et traite les entrées des utilisateurs lors d'une conversation avec un bot Amazon Lex.

## Bonnes pratiques
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **Séparation des préoccupations**
  + Maintenez une séparation claire des responsabilités entre DevOps les environnements de développement et de production.
  + Utilisez-les séparément Comptes AWS pour chaque environnement afin de garantir une isolation et des limites de sécurité appropriées.
  + Utilisez les rôles entre comptes et les principes du moindre privilège d'accès pour garantir un accès contrôlé entre les environnements.
+ **L'infrastructure en tant que code**
  + Passez régulièrement en revue et mettez à jour le code d'infrastructure pour l'aligner sur les meilleures pratiques et les exigences en constante évolution.
  + Établissez une stratégie de branchement et de fusion claire pour le référentiel de code source
+ **Tests et validation**
  + Mettez en œuvre des tests automatisés à différentes étapes du pipeline afin de détecter les problèmes dès le début du cycle de développement.
  + Utilisez la console Amazon Lex ou des frameworks de test automatisés pour valider les configurations et les fonctionnalités des robots avant de passer à des environnements supérieurs.
  + Envisagez de mettre en place des portes d'approbation manuelles pour les déploiements dans des environnements de production ou critiques.
+ **Surveillance et journalisation**
  + Configurez des mécanismes de surveillance et de journalisation pour les pipelines, les déploiements et les interactions entre robots.
  + Surveillez les événements du pipeline, les statuts de déploiement et les indicateurs de performance des bots pour identifier et résoudre les problèmes rapidement.
  + Utilisez les services AWS tels qu'Amazon CloudWatch et AWS X-Ray pour une journalisation et une surveillance centralisées. AWS CloudTrail
  + Passez régulièrement en revue et analysez les performances, l'efficience et l'efficacité du flux de travail automatisé.
+ **Sécurité et conformité**
  + Mettez en œuvre des pratiques de codage sécurisées et suivez les meilleures pratiques de AWS sécurité pour le développement et le déploiement de robots Amazon Lex.
  + Passez régulièrement en revue et mettez à jour les rôles, les politiques et les autorisations IAM afin de respecter le principe du moindre privilège.
  + Envisagez d'intégrer l'analyse de sécurité et les contrôles de conformité dans les pipelines.

## Épopées
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### Configurer iAC pour la gestion des bots Amazon Lex
<a name="set-up-iac-for-lex2-bot-management"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'environnement CDK local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| Créez un rôle multicompte dans l'`devops`environnement. | Le `devops` compte est responsable de l'hébergement et de la gestion des CI/CD pipelines. Pour permettre aux CI/CD pipelines d'interagir avec les `prod` environnements `dev` et, exécutez les commandes suivantes pour créer un rôle multi-comptes dans le `devops` compte.<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| Créez un rôle multicompte dans l'`dev`environnement. | Créez un rôle IAM dans le `dev` compte avec les autorisations nécessaires pour permettre au `devops` compte d'assumer ce rôle. Le CI/CD pipeline utilise ce rôle pour effectuer des actions dans le `dev` compte, telles que le déploiement et la gestion des ressources du bot Amazon Lex.Pour créer le rôle IAM, exécutez les commandes suivantes :<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| Créez un rôle multicompte dans l'`prod`environnement. | Créez un rôle IAM dans le `prod` compte avec les autorisations nécessaires pour permettre au `devops` compte d'assumer ce rôle. Le CI/CD pipeline utilise ce rôle pour effectuer des actions dans le `prod` compte, telles que le déploiement et la gestion des ressources du bot Amazon Lex.<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| Créez des pipelines dans l'`devops`environnement. | Pour gérer le flux de travail de développement des robots Amazon Lex, exécutez la commande suivante pour configurer des pipelines dans l'`devops`environnement. <pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### Établir la base de référence pour le bot principal
<a name="establish-the-baseline-for-the-main-bot"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez la version initiale du bot principal. | Pour définir la version initiale du bot principal, [déclenchez](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers) le `BaselineBotPipeline` pipeline.Le pipeline déploie la définition de bot de base définie dans le CloudFormation modèle, exporte la définition principale du bot sous forme de fichiers .json et stocke le code du bot principal dans un système de contrôle de version. | AWS DevOps | 

### Mettre en œuvre le flux de travail de développement des fonctionnalités
<a name="implement-the-feature-development-workflow"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le bot de tickets pour développer et tester une fonctionnalité. | `TicketBot`est une nouvelle instance de bot importée à partir de la définition de bot principale existante dans la branche de fonctionnalités. Cette approche garantit que le nouveau bot dispose de toutes les fonctionnalités et configurations actuelles du bot principal.Pour définir la version initiale du bot de tickets, déclenchez le `CreateTicketBotPipeline` pipeline.Le pipeline crée une nouvelle branche de fonctionnalités dans le système de contrôle de version et crée une nouvelle instance de bot de tickets basée sur le bot principal. | Développeur Lex Bot | 
| Développez et testez la fonctionnalité Ticket Bot.  | Pour développer et tester cette fonctionnalité, connectez-vous à la console Amazon Lex AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/). Pour plus d'informations, consultez [Tester un bot à l'aide de la console](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) dans la documentation Amazon Lex.Avec l'`TicketBot`instance, vous pouvez désormais ajouter, modifier ou étendre les fonctionnalités du bot pour implémenter la nouvelle fonctionnalité. Par exemple, vous pouvez créer ou modifier des intentions, des énoncés, des créneaux et des flux de dialogue. Pour plus d'informations, consultez la section [Ajouter des intentions](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html) dans la documentation Amazon Lex. | Développeur Lex Bot | 
| Exportez la définition du bot de tickets. | La définition du bot exportée est essentiellement une représentation de la configuration et des fonctionnalités du bot au format JSON.Pour exporter la définition du bot de tickets, déclenchez le `ExportTicketBotPipeline` pipeline.Le pipeline exporte la définition du bot de ticket sous forme de fichiers .json et stocke le code du bot de ticket dans une branche de fonctionnalité du système de contrôle de version. | Développeur Lex Bot | 
| Rebasez la branche de fonctionnalités à partir de la dernière branche principale. | Au cours du développement d'une nouvelle fonctionnalité, la branche principale peut avoir reçu d'autres modifications de la part de différents développeurs ou équipes. Pour intégrer ces modifications dans la branche des fonctionnalités, effectuez une `rebase` opération Git. Cette opération reproduit essentiellement les validations de la branche de fonctionnalités en plus des dernières validations de la branche principale, garantissant ainsi que la branche de fonctionnalités inclut toutes les dernières modifications | Développeur Lex Bot | 
| Importez et validez le bot de tickets rebasé. | Après avoir rebasé la branche de fonctionnalités, vous devez l'importer dans l'instance du bot de tickets. Cette importation met à jour le bot de tickets existant avec les dernières modifications apportées par la branche rebasée.Pour importer le bot de tickets rebasé, déclenchez le `ImportTicketBotPipeline` pipeline.Le pipeline importe les fichiers .json de définition du bot ticket situés dans la branche des fonctionnalités du système de contrôle de version dans l'`TicketBot`instance. | Développeur Lex Bot | 
| Validez la définition du bot rebasée. | Après avoir importé la définition du bot rebasée, il est essentiel de valider ses fonctionnalités. Vous devez vous assurer que la nouvelle fonctionnalité fonctionne comme prévu et qu'elle n'entre pas en conflit avec les fonctionnalités existantes. Cette validation implique généralement de tester le bot avec différents scénarios d'entrée, de vérifier les réponses et de vérifier que le bot se comporte comme prévu. Vous pouvez effectuer la validation de l'une des manières suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Développeur Lex Bot | 
| Fusionnez la branche de fonction dans la branche principale. | Après avoir développé et testé la nouvelle fonctionnalité dans l'`TicketBot`instance isolée, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Développeur Lex Bot, administrateur de référentiels | 
| Supprimez la branche de fonctionnalités et le bot de tickets.  | Une fois qu'une branche de fonctionnalités a été fusionnée avec succès dans la branche principale, supprimez la branche de fonctionnalités et le bot de tickets du référentiel de code source. Pour supprimer la branche de fonctionnalités et le bot de tickets, déclenchez le `DeleteTicketBotPipeline` pipeline.Le pipeline supprime les ressources temporaires du bot créées au cours du processus de développement (par exemple, le bot de tickets). Cette action permet de maintenir un dépôt propre et d'éviter toute confusion ou tout conflit avec les futures branches de fonctionnalités.  | Développeur Lex Bot | 

### Maintenir le bot principal
<a name="maintain-the-main-bot"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Importez la dernière définition du bot principal dans l'`dev`environnement. | Pour importer la dernière définition du bot principal de la branche principale dans l'`dev`environnement, déclenchez le `DeployBotDevPipeline` pipeline.Le pipeline crée également une balise git lors de l'approbation. | AWS DevOps | 
| Importez la dernière définition du bot principal dans l'`prod`environnement. | Pour importer dans l'`prod`environnement la dernière définition de bot de la branche principale, fournissez la référence de balise de la tâche précédente en tant que paramètre et déclenchez le `DeployBotProdPipeline` pipeline.Le pipeline importe la dernière définition de bot d'une balise spécifique dans l'`prod`environnement. | AWS DevOps | 

## Résolution des problèmes
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Lorsque vous déployez des robots Amazon Lex sur différents comptes Comptes AWS, les services d'outillage doivent disposer des autorisations nécessaires pour accéder aux ressources de ces comptes. | Pour accorder un accès entre comptes, utilisez les rôles et les politiques IAM. Créez des rôles IAM dans les comptes cibles et associez des politiques aux rôles qui accordent les autorisations requises. Ensuite, assumez ces rôles depuis le compte sur lequel le bot Amazon Lex est déployé.Pour plus d'informations, consultez les [sections Autorisations IAM requises pour importer](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions) et [Autorisations IAM requises pour exporter des robots dans Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions) dans la documentation Amazon Lex. | 

## Ressources connexes
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [Importation de robots dans Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [Démarrer un pipeline dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [Utilisation des robots Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)

# Coordonnez la dépendance des ressources et l'exécution des tâches à l'aide de la structure AWS Fargate WaitCondition hook
<a name="use-the-aws-fargate-waitcondition-hook-construct"></a>

*Stan Fan, Amazon Web Services*

## Résumé
<a name="use-the-aws-fargate-waitcondition-hook-construct-summary"></a>

Ce modèle décrit le package WaitCondition hook (`waitcondition-hook-for-aws-fargate-task`) npm, qui est une solution native pour le cloud conçue pour orchestrer les tâches [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)dans les clusters Amazon Elastic Container Service (Amazon ECS). 

Le WaitCondition crochet est une AWS Cloud Development Kit (AWS CDK) construction spécialement conçue pour être intégrée à AWS CloudFormation. Le WaitCondition hook fournit les fonctionnalités clés suivantes :
+ Agit comme un mécanisme d'attente, interrompant l'exécution de la CloudFormation pile jusqu'à ce qu'une tâche Fargate spécifiée soit terminée, ce qui facilite les déploiements ordonnés et le provisionnement des ressources.
+ Supports TypeScript et Python, ce qui le rend idéal pour les AWS CDK projets.
+ Permet aux développeurs et aux architectes d'orchestrer les déploiements en coordonnant l'exécution des tâches et la gestion des ressources pour les applications conteneurisées sur. AWS
+ Permet d'exécuter des tâches Fargate avec un ou plusieurs conteneurs intégrés dans CloudFormation un cycle de vie, de gérer les échecs de tâches et de rétablir la pile après un échec de tâche. CloudFormation 
+ Offre la flexibilité nécessaire pour ajouter des dépendances entre les ressources et les résultats d'exécution des tâches Fargate, en activant des tâches personnalisées ou en invoquant d'autres points de terminaison. Par exemple, vous pouvez suspendre une CloudFormation pile et attendre une migration de base de données (effectuée par une tâche Fargate) et allouer d'autres ressources qui peuvent dépendre du succès de la migration de base de données.

## Conditions préalables et limitations
<a name="use-the-aws-fargate-waitcondition-hook-construct-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Cloud Development Kit (AWS CDK) Interface de ligne de commande (CLI) installée sur un poste de travail local. Pour plus d'informations, consultez la [référence de la AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) dans la AWS CDK documentation.
+ [Gestionnaire de packages de nœuds (npm), installé sur un poste de travail local et configuré pour l'entrée AWS CDK . TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Pour plus d'informations, consultez la section [Téléchargement et installation de Node.js et de npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) dans la documentation de npm.
+ Yarn installé sur un poste de travail local. Pour plus d'informations, consultez la section [Installation](https://yarnpkg.com/getting-started/install) dans la documentation de Yarn.

**Limites**
+ Cette solution est déployée sur un seul Compte AWS.
+ Le code de retour attendu du conteneur est un gage `0` de réussite. Tout autre code de retour indique un échec et la CloudFormation pile sera annulée. 
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="use-the-aws-fargate-waitcondition-hook-construct-architecture"></a>

Le schéma suivant montre l'architecture de construction.

![\[Flux de travail AWS Step Functions de la construction waitcondition-hook-for-aws -fargate-task.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


Le diagramme montre le flux de travail de `waitcondition-hook-for-aws-fargate-task` :

1. `WaitCondition`et `WaitConditionHandler` sont prévus pour écouter la réponse des AWS Lambda fonctions.

1. En fonction du résultat de la tâche, le `CallbackFunction` ou le `ErrorHandlerFunction` est déclenché à la fin de la tâche Fargate.

1. La fonction Lambda envoie un signal SUCCEED ou FAILURE à. `WaitConditionHandler`

1. `WaitConditionHandler`continue à approvisionner les ressources si le résultat de l'exécution de la tâche Fargate aboutit, ou annule la pile en cas d'échec de la tâche.

Le schéma suivant montre un exemple de flux de travail pour effectuer une migration de base de données.

![\[Flux de travail de migration de base de données Amazon RDS à l'aide de WaitCondition Hook Construct.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


L'exemple de flux de travail utilise `waitcondition-hook-for-aws-fargate-task` cette structure pour effectuer une migration de base de données, comme suit :

1. Une instance Amazon Relational Database Service (Amazon RDS) est mise en service.

1. La `waitcondition-hook-for-aws-fargate-task` construction exécute la tâche de migration de base de données et suspend la pile en tant qu'instance Amazon Elastic Compute Cloud (Amazon EC2).

1. Si la tâche de migration se termine correctement, elle envoie un signal de réussite à CloudFormation. Dans le cas contraire, il envoie un signal d'échec à la pile CloudFormation et l'annule.

## Outils
<a name="use-the-aws-fargate-waitcondition-hook-construct-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir l'infrastructure cloud dans le code et à la provisionner CloudFormation.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS.
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)vous permet d'exécuter des conteneurs sans avoir à gérer de serveurs ou d'instances Amazon EC2. Il est utilisé conjointement avec Amazon ECS.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et autres Services AWS pour créer des applications critiques pour l'entreprise.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages de l'utilisation de l'infrastructure évolutive de AWS. 

**Autres outils**
+ [npm](https://docs.npmjs.com/about-npm) est un registre de logiciels qui s'exécute dans un environnement Node.js et est utilisé pour partager ou emprunter des packages et gérer le déploiement de packages privés.
+ [Yarn](https://yarnpkg.com/) est un gestionnaire de paquets open source que vous pouvez utiliser pour gérer les dépendances dans les JavaScript projets. Yarn peut vous aider à installer, mettre à jour, configurer et supprimer les dépendances des packages.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task).

## Bonnes pratiques
<a name="use-the-aws-fargate-waitcondition-hook-construct-best-practices"></a>
+ Lorsque vous créez votre AWS CDK application, suivez les [meilleures pratiques pour le développement et le déploiement d'une infrastructure cloud AWS CDK dans la](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) documentation de AWS CDK la version 2.
+ Pour AWS Fargate cette tâche, suivez les [meilleures pratiques relatives aux images de conteneurs Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html) dans la documentation Amazon ECS.

## Épopées
<a name="use-the-aws-fargate-waitcondition-hook-construct-epics"></a>

### Configurez le AWS CDK
<a name="set-up-the-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez le AWS CDK. | Pour installer le AWS CDK sur votre machine locale ou dans un autre environnement, exécutez la commande suivante : <pre>npm install -g aws-cdk@latest</pre> | Architecte cloud, développeur d'applications | 
| Bootstrap le. AWS CDK | Le [bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) est le processus de préparation d'un [environnement](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) pour le déploiement. Pour démarrer votre AWS CDK boîte à outils pour la cible Compte AWS Région AWS, exécutez la commande suivante :<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>Cette commande crée une CloudFormation pile nommée`CDKToolkit`.  | Architecte du cloud | 

### Exécutez le WaitCondition crochet pour créer AWS Fargate des tâches
<a name="run-the-waitcondition-hook-for-fargatelong-tasks-construct"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le projet CDK. | Créez un projet CDK dans le langage de votre choix. Ce modèle utilise TypeScript. Pour créer un projet CDK à l'aide de TypeScript, exécutez la commande suivante : `cdk init app —language typescript` | Architecte du cloud | 
| Installez le package . | Exécutez `npm install` sur le chemin racine de votre projet CDK. Une fois la bibliothèque CDK installée, exécutez la commande suivante pour l'installer `waitcondition-hook-for-aws-fargate-task` : `yarn add waitcondition-hook-for-aws-fargate-task` | Architecte du cloud | 
| Créez votre application CDK et les composants Amazon ECS. | Créez votre projet CDK. Une ressource de définition de tâche Amazon ECS est requise. Pour plus d'informations sur la création d'une définition de tâche, consultez [les définitions de tâches Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) ECS dans la documentation Amazon ECS.L'exemple suivant utilise cette construction :<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | Architecte du cloud | 
| Synthétisez et lancez l'application CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)La `waitcondition-hook-for-aws-fargate-task` construction exécute la tâche Fargate.  | Architecte du cloud | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| nettoyer les ressources. | Pour nettoyer les ressources mises en service à partir de l'étape précédente, exécutez la commande suivante :<pre>cdk destroy </pre> | Architecte du cloud | 

## Résolution des problèmes
<a name="use-the-aws-fargate-waitcondition-hook-construct-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Défaillance générale de la CloudFormation pile | Pour aider à résoudre les défaillances générales du CloudFormation stack, ajoutez l'`--no-rollback`indicateur comme indiqué dans l'exemple suivant : <pre>cdk deploy --no-rollback</pre>Cette commande interrompt la restauration de la CloudFormation pile, ce qui vous donne les ressources nécessaires pour résoudre les problèmes. Pour plus d'informations, consultez la section [Choisir le mode de gestion des défaillances lors du provisionnement des ressources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) dans la CloudFormation documentation. | 
| AWS Step Functions échec | Une machine à AWS Step Functions états peut ne pas s'exécuter pour différentes raisons. Une `—disable-rollback` fois configuré, procédez comme suit pour résoudre les problèmes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Pour plus d'informations, consultez les [sections Résolution des problèmes dans Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html) et [Affichage des détails d'exécution dans la console Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details) de la AWS Step Functions documentation. | 
| AWS Lambda échec de fonction | Cette construction fournit deux fonctions Lambda : `CallbackFunction` et. `ErrorhandlerFunction` Ils peuvent échouer pour diverses raisons, telles que des exceptions non gérées. Pour résoudre les problèmes, procédez comme suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Pour plus d'informations, consultez la section [Résolution des problèmes liés à Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) dans la AWS Lambda documentation. | 

## Ressources connexes
<a name="use-the-aws-fargate-waitcondition-hook-construct-resources"></a>

**AWS documentation**
+ [AWS CDK Référence d'API Construct](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [Commencer à utiliser le AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Découvrez comment créer et utiliser les ressources Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Découvrez comment démarrer avec Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [Qu'est-ce que c'est AWS CDK ?](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Autres ressources**
+ [Waitcondition Hook pour la AWS Fargate tâche](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (npm)
+ [waitcondition-hook-for-aws-fargate-task](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) 1.0.6 (pypi.org)

# Utiliser des référentiels sources Git tiers dans AWS CodePipeline
<a name="use-third-party-git-source-repositories-in-aws-codepipeline"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Résumé
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-summary"></a>

Ce modèle décrit comment utiliser AWS CodePipeline avec des référentiels sources Git tiers.

[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) est un service de livraison continue qui automatise les tâches de création, de test et de déploiement de vos logiciels. Le service prend actuellement en charge les référentiels Git gérés par GitHub [AWS CodeCommit](https://aws.amazon.com/codecommit) et Atlassian Bitbucket. Toutefois, certaines entreprises utilisent des référentiels Git tiers intégrés à leur service d'authentification unique (SSO) et à Microsoft Active Directory pour l'authentification. Vous pouvez utiliser ces référentiels Git tiers comme sources en CodePipeline créant des actions personnalisées et des webhooks.

Un webhook est une notification HTTP qui détecte des événements dans un autre outil, tel qu'un GitHub référentiel, et connecte ces événements externes à un pipeline. Lorsque vous créez un webhook dans CodePipeline, le service renvoie une URL que vous pouvez utiliser dans le webhook de votre dépôt Git. **Si vous envoyez du code à une branche spécifique du référentiel Git, le webhook Git initie le CodePipeline webhook via cette URL et définit le stage source du pipeline sur In Progress.** Lorsque le pipeline est dans cet état, un assistant interroge CodePipeline la tâche personnalisée, exécute la tâche et envoie un statut de réussite ou d'échec à CodePipeline. Dans ce cas, étant donné que le pipeline est au stade source, le job worker récupère le contenu du référentiel Git, le compresse et le télécharge dans le bucket Amazon Simple Storage Service (Amazon S3) où sont stockés les artefacts du pipeline, à l'aide de la clé d'objet fournie par le job interrogé. Vous pouvez également associer une transition pour l'action personnalisée à un événement sur Amazon CloudWatch et lancer le job worker en fonction de cet événement. Cette configuration vous permet d'utiliser comme sources des référentiels Git tiers que le service ne prend pas en charge de manière native. CodePipeline

## Conditions préalables et limitations
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un référentiel Git qui prend en charge les webhooks et peut se connecter à l'URL d'un CodePipeline webhook via Internet 
+ Interface de ligne de commande (AWS CLI) (AWS [CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) installée [et](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) configurée pour fonctionner avec le compte AWS

## Architecture
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-architecture"></a>

Le modèle comprend les étapes suivantes :

1. L'utilisateur valide le code dans un dépôt Git.

1. Le webhook Git est appelé.

1. Le CodePipeline webhook s'appelle.

1. Le pipeline est défini sur **En cours** et le stage source sur l'état **En cours**.

1. L'action de l'étape source initie une règle CloudWatch Events, indiquant qu'elle a été démarrée.

1. L' CloudWatch événement initie une fonction Lambda.

1. La fonction Lambda obtient les détails de la tâche d'action personnalisée.

1. La fonction Lambda lance CodeBuild AWS et lui transmet toutes les informations relatives au travail.

1. CodeBuild obtient la clé SSH publique ou les informations d'identification utilisateur pour l'accès HTTPS à Git à partir de Secrets Manager.

1. CodeBuild clone le dépôt Git pour une branche spécifique.

1. CodeBuild compresse l'archive et la télécharge dans le compartiment S3 qui sert de magasin d' CodePipeline artefacts.

![\[Flux de travail qui utilise des dépôts de sources Git tiers comme sources pour AWS CodePipeline.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/84284bec-b39d-466a-9fd9-994be2c953df/images/85555dab-7317-40f5-86a7-ccb8987c5bf3.png)


 

## Outils
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — AWS CodePipeline est un service de [livraison continue](https://aws.amazon.com/devops/continuous-delivery/) entièrement géré qui vous aide à automatiser vos pipelines de publication pour des mises à jour rapides et fiables des applications et de l'infrastructure. CodePipeline automatise les phases de création, de test et de déploiement de votre processus de publication pour chaque modification de code, en fonction du modèle de version que vous définissez. Cela vous permet de fournir des fonctionnalités et des mises à jour de manière rapide et fiable. Vous pouvez intégrer AWS CodePipeline à des services tiers tels que GitHub ou avec votre propre plugin personnalisé.
+ [AWS Lambda](https://aws.amazon.com/lambda/) — AWS Lambda vous permet d'exécuter du code sans provisionner ni gérer de serveurs. Avec Lambda, vous pouvez exécuter du code pour pratiquement n'importe quel type d'application ou de service principal sans qu'aucune administration ne soit nécessaire. Vous téléchargez votre code et Lambda s'occupe de tout ce qui est nécessaire pour exécuter et dimensionner votre code avec une haute disponibilité. Vous pouvez configurer votre code pour qu'il soit lancé automatiquement à partir d'autres services AWS ou l'appeler directement depuis n'importe quelle application Web ou mobile.
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/) — AWS CodeBuild est un service d'[intégration continue](https://aws.amazon.com/devops/continuous-integration/) entièrement géré qui compile le code source, exécute des tests et produit des packages logiciels prêts à être déployés. Grâce à CodeBuild cela, vous n'avez pas besoin de provisionner, de gérer et de dimensionner vos propres serveurs de construction. CodeBuild évolue en continu et traite plusieurs versions simultanément, afin que vos versions ne soient pas laissées en attente dans une file d'attente. Vous pouvez démarrer rapidement en utilisant des environnements de génération prépackagés, ou bien, vous pouvez créer vos propres environnements de génération personnalisés, que vous utiliserez avec vos outils de génération.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) — AWS Secrets Manager vous aide à protéger les secrets nécessaires pour accéder à vos applications, services et ressources informatiques. Le service vous permet de faire pivoter, de gérer et de récupérer les informations d'identification de base de données, les clés d'API et d'autres secrets tout au long de leur cycle de vie. Les utilisateurs et les applications récupèrent les secrets en appelant Secrets Manager APIs, sans avoir à coder en dur les informations sensibles en texte brut. Secrets Manager propose une rotation secrète avec intégration intégrée à Amazon Relational Database Service (Amazon RDS), Amazon Redshift et Amazon DocumentDB. Le service peut être étendu pour prendre en charge d'autres types de secrets, notamment les clés API et les OAuth jetons. En outre, Secrets Manager vous permet de contrôler l'accès aux secrets à l'aide d'autorisations précises et d'auditer la rotation des secrets de manière centralisée pour les ressources du cloud AWS, des services tiers et des environnements sur site.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) — Amazon CloudWatch est un service de surveillance et d'observation conçu pour les DevOps ingénieurs, les développeurs, les ingénieurs de fiabilité des sites (SREs) et les responsables informatiques. CloudWatch vous fournit des données et des informations exploitables pour surveiller vos applications, répondre aux changements de performances à l'échelle du système, optimiser l'utilisation des ressources et obtenir une vue unifiée de l'état de fonctionnement. CloudWatch collecte des données opérationnelles et de surveillance sous forme de journaux, de mesures et d'événements, afin de vous fournir une vue unifiée des ressources, des applications et des services AWS exécutés sur AWS et sur des serveurs sur site. Vous pouvez l'utiliser CloudWatch pour détecter les comportements anormaux dans vos environnements, définir des alarmes, visualiser les journaux et les indicateurs côte à côte, prendre des mesures automatisées, résoudre les problèmes et découvrir des informations permettant de garantir le bon fonctionnement de vos applications.
+ [Amazon S3](https://aws.amazon.com/s3/) — Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets qui vous permet de stocker et de protéger n'importe quel volume de données pour de nombreux cas d'utilisation, tels que les sites Web, les applications mobiles, la sauvegarde et la restauration, l'archivage, les applications d'entreprise, les appareils IoT et l'analyse des mégadonnées. Amazon S3 fournit easy-to-use des fonctionnalités de gestion qui vous aident à organiser vos données et à configurer des contrôles d'accès précis pour répondre à vos exigences commerciales, organisationnelles et de conformité spécifiques.

## Épopées
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-epics"></a>

### Créez une action personnalisée dans CodePipeline
<a name="create-a-custom-action-in-codepipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une action personnalisée à l'aide de l'AWS CLI ou d'AWS CloudFormation. | Cette étape implique la création d'une action source personnalisée qui peut être utilisée dans l'étape source d'un pipeline dans votre compte AWS dans une région donnée. Vous devez utiliser l'AWS CLI ou AWS CloudFormation (et non la console) pour créer l'action source personnalisée. Pour plus d'informations sur les commandes et les étapes décrites dans cette épopée et dans d'autres, consultez la section « Ressources connexes » à la fin de ce modèle. Dans l'AWS CLI, utilisez la create-custom-action-type commande. Utilisez --configuration-properties pour fournir tous les paramètres que le travailleur doit traiter lorsqu'il interroge CodePipeline une tâche. Assurez-vous de noter les valeurs fournies aux options --provider et --action-version, afin de pouvoir utiliser les mêmes valeurs lors de la création du pipeline avec cette étape source personnalisée. Vous pouvez également créer l'action source personnalisée dans AWS en CloudFormation utilisant le type de ressource AWS::CodePipeline::CustomActionType. | AWS général | 

### Configurer l’authentification
<a name="set-up-authentication"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une paire de clés SSH. | Créez une paire de clés Secure Shell (SSH). Pour obtenir des instructions, consultez la GitHub documentation. | Ingénieur systèmes/systèmes DevOps  | 
| Créez un secret dans AWS Secrets Manager. | Copiez le contenu de la clé privée depuis la paire de clés SSH et créez un secret dans AWS Secrets Manager. Ce secret est utilisé pour l'authentification lors de l'accès au dépôt Git. | AWS général | 
| Ajoutez la clé publique au dépôt Git. | Ajoutez la clé publique de la paire de clés SSH aux paramètres du compte du référentiel Git, pour l'authentification par le biais de la clé privée. | Ingénieur systèmes/systèmes DevOps  | 

### Création d'un pipeline et d'un webhook
<a name="create-a-pipeline-and-webhook"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un pipeline qui inclut l'action source personnalisée. | Créez un pipeline dans CodePipeline. Lorsque vous configurez le stage source, choisissez l'action source personnalisée que vous avez créée précédemment. Vous pouvez le faire dans la CodePipeline console AWS ou dans l'interface de ligne de commande AWS. CodePipeline vous invite à saisir les propriétés de configuration que vous avez définies pour l'action personnalisée. Ces informations sont requises pour que le travailleur puisse traiter le travail pour l'action personnalisée. Suivez l'assistant et créez l'étape suivante pour le pipeline. | AWS général | 
| Créez un CodePipeline webhook. | Créez un webhook pour le pipeline que vous avez créé avec l'action source personnalisée. Vous devez utiliser l'AWS CLI ou AWS CloudFormation (et non la console) pour créer le webhook. Dans l'AWS CLI, exécutez la commande put-webhook et fournissez les valeurs appropriées pour les options du webhook. Notez l'URL du webhook renvoyée par la commande. Si vous utilisez AWS CloudFormation pour créer le webhook, utilisez le type AWS::CodePipeline::Webhook de ressource. Assurez-vous de sortir l'URL du webhook à partir de la ressource créée et notez-la. | AWS général | 
| Créez une fonction et CodeBuild un projet Lambda. | Au cours de cette étape, vous utilisez Lambda CodeBuild pour créer un job worker qui interrogera les demandes de travail CodePipeline pour l'action personnalisée, exécutera le travail et renverra le résultat du statut à. CodePipeline Créez une fonction Lambda initiée par une règle Amazon CloudWatch Events lorsque l'étape d'action sur la source personnalisée du pipeline passe à « En cours ». Lorsque la fonction Lambda est lancée, elle doit obtenir les détails des tâches d'action personnalisées en interrogeant les tâches. Vous pouvez utiliser l' PollForJobs API pour renvoyer ces informations. Une fois les informations de travail interrogées obtenues, la fonction Lambda doit renvoyer un accusé de réception, puis traiter les informations avec les données qu'elle obtient à partir des propriétés de configuration pour l'action personnalisée. Lorsque le travailleur est prêt à communiquer avec le dépôt Git, vous pouvez lancer un CodeBuild projet, car il est pratique de gérer les tâches Git à l'aide du client SSH. | AWS général, développeur de code | 

### Créez un événement dans CloudWatch
<a name="create-an-event-in-cloudwatch"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une règle d' CloudWatch événements. | Créez une règle d' CloudWatch événements qui lance la fonction Lambda en tant que cible chaque fois que l'étape d'action personnalisée du pipeline passe à « En cours ». | AWS général | 

## Ressources connexes
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-resources"></a>

**Création d'une action personnalisée dans CodePipeline**
+ [Créez et ajoutez une action personnalisée dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [AWS::CodePipeline::CustomActionType ressource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html)

**Configuration de l'authentification**
+ [Création et gestion de secrets avec AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)

**Création d'un pipeline et d'un webhook**
+ [Créez un pipeline dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html)
+ [référence de commande put-webhook](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/put-webhook.html)
+ [AWS::CodePipeline::Webhook ressource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-webhook.html)
+ [PollForJobs Référence d’API](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html)
+ [Créez et ajoutez une action personnalisée dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [Création d'un projet de génération dans AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)

**Création d'un événement**
+ [Détectez et réagissez aux changements d'état du pipeline avec Amazon CloudWatch Events](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

**Références supplémentaires**
+ [Travailler avec des pipelines dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines.html)
+ [Guide du développeur AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

# Créez un CI/CD pipeline pour valider les configurations Terraform à l'aide d'AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan et Vijesh Vijayakumaran Nair, Amazon Web Services*

## Résumé
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Ce modèle montre comment tester les configurations HashiCorp Terraform à l'aide d'un pipeline d'intégration continue et de livraison continue (CI/CD) déployé par AWS. CodePipeline

Terraform est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud. [La solution fournie dans ce modèle crée un CI/CD pipeline qui vous aide à valider l'intégrité de vos configurations Terraform en exécutant cinq CodePipeline étapes :](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`extrait la configuration Terraform que vous testez à partir d'un référentiel AWS CodeCommit .

1. `"validate"`exécute des outils de validation de l'infrastructure en tant que code (IaC) [TFLint](https://github.com/terraform-linters/tflint), notamment [tfsec](https://github.com/aquasecurity/tfsec) et [checkov](https://www.checkov.io/). Le stage exécute également les commandes de validation Terraform IaC suivantes : `terraform validate` et. `terraform fmt`

1. `"plan"`indique quelles modifications seront appliquées à l'infrastructure si la configuration Terraform est appliquée.

1. `"apply"`utilise le plan généré pour fournir l'infrastructure requise dans un environnement de test.

1. `"destroy"`supprime l'infrastructure de test créée au cours de l'`"apply"`étape.

## Conditions préalables et limitations
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande AWS (AWS CLI)[, installée et](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installé et configuré sur votre machine locale
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), installé et configuré sur votre machine locale

**Limites**
+ L'approche de ce modèle déploie AWS CodePipeline sur un seul compte AWS et dans une seule région AWS. Des modifications de configuration sont nécessaires pour les déploiements multicomptes et multirégions.
+ Le rôle AWS Identity and Access Management (IAM) fourni par ce modèle (**codepipeline\$1iam\$1role**) suit le principe du moindre privilège. Les autorisations de ce rôle IAM doivent être mises à jour en fonction des ressources spécifiques que votre pipeline doit créer. ****

**Versions du produit**
+ AWS CLI version 2.9.15 ou ultérieure
+ Terraform version 1.3.7 ou ultérieure

## Architecture
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Pile technologique cible**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Architecture cible**

Le schéma suivant montre un exemple de flux de travail de CI/CD pipeline pour tester les configurations Terraform dans. CodePipeline

![\[Architecture permettant de tester les configurations Terraform à l'aide d'un pipeline AWS CI/CD .\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


Le schéma suivant illustre le flux de travail suivant :

1. Dans CodePipeline, un utilisateur AWS lance les actions proposées dans un plan Terraform en exécutant la `terraform apply` commande dans l'AWS CLI.

1. AWS CodePipeline assume un rôle de service IAM qui inclut les politiques requises pour accéder CodeCommit à AWS KMS et à Amazon S3. CodeBuild

1. CodePipeline exécute l'étape du `"checkout"` pipeline pour extraire la configuration Terraform d'un CodeCommit référentiel AWS à des fins de test.

1. CodePipeline exécute l'`"validate"`étape pour tester la configuration de Terraform en exécutant les outils de validation IaC et en exécutant les commandes de validation Terraform iAc dans un projet. CodeBuild 

1. CodePipeline exécute l'`"plan"`étape pour créer un plan dans le CodeBuild projet basé sur la configuration Terraform. L'utilisateur AWS peut consulter ce plan avant que les modifications ne soient appliquées à l'environnement de test.

1. Code Pipeline exécute l'`"apply"`étape de mise en œuvre du plan en utilisant le CodeBuild projet pour fournir l'infrastructure requise dans l'environnement de test.

1. CodePipeline exécute la `"destroy"` phase, qui permet CodeBuild de supprimer l'infrastructure de test créée pendant la `"apply"` phase.

1. Un compartiment Amazon S3 stocke les artefacts du pipeline, qui sont chiffrés et déchiffrés à l'aide d'une clé gérée par le [client](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) AWS KMS.

## Outils
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Outils**

*Services AWS*
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

*Autres services*
+ [HashiCorp Terraform](https://www.terraform.io/docs) est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Code**

Le code de ce modèle est disponible dans le GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)référentiel. Le référentiel contient les configurations Terraform requises pour créer l'architecture cible décrite dans ce modèle.

## Épopées
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Fournir les composants de la solution
<a name="provision-the-solution-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le GitHub dépôt. | Clonez le GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)dépôt en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Pour plus d'informations, consultez la section [Clonage d'un dépôt](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) dans la GitHub documentation. | DevOps ingénieur | 
| Créez un fichier de définitions de variables Terraform.  | Créez un `terraform.tfvars` fichier en fonction des exigences de votre cas d'utilisation. Vous pouvez mettre à jour les variables dans le `examples/terraform.tfvars` fichier qui se trouve dans le dépôt cloné.Pour plus d'informations, consultez [Affecter des valeurs aux variables du module racine](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) dans la documentation Terraform.Le `Readme.md` fichier du référentiel contient plus d'informations sur les variables requises. | DevOps ingénieur | 
| Configurez AWS en tant que fournisseur Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Pour plus d'informations, consultez le [fournisseur AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) dans la documentation Terraform. | DevOps ingénieur | 
| Mettez à jour la configuration du fournisseur Terraform pour créer le compartiment de réplication Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)La réplication active la copie automatique et asynchrone des objets dans les compartiments Amazon S3. | DevOps ingénieur | 
| Initialisez la configuration Terraform. | Pour initialiser votre répertoire de travail qui contient les fichiers de configuration Terraform, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform init</pre> | DevOps ingénieur | 
| Créez le plan Terraform. | Pour créer un plan Terraform, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform évalue les fichiers de configuration pour déterminer l'état cible des ressources déclarées. Il compare ensuite l'état cible à l'état actuel et crée un plan. | DevOps ingénieur | 
| Vérifiez le plan Terraform. | Passez en revue le plan Terraform et confirmez qu'il configure l'architecture requise dans votre compte AWS cible. | DevOps ingénieur | 
| Déployez la solution. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform crée, met à jour ou détruit l'infrastructure pour atteindre l'état cible déclaré dans les fichiers de configuration. | DevOps ingénieur | 

### Validez les configurations Terraform en exécutant le pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le référentiel de code source. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps ingénieur | 
| Validez les étapes du pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Pour plus d'informations, consultez [Afficher les détails et l'historique du pipeline (console)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) dans le *guide de CodePipeline l'utilisateur AWS*.Lorsqu'une modification est validée dans la branche principale du référentiel source, le pipeline de test est automatiquement activé. | DevOps ingénieur | 
| Vérifiez le résultat du rapport. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Le `<project_name>-validate` CodeBuild projet génère des rapports de vulnérabilité pour votre code au cours de l'`"validate"`étape. | DevOps ingénieur | 

### Nettoyage de vos ressources
<a name="clean-up-your-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez le pipeline et les ressources associées. | Pour supprimer les ressources de test de votre compte AWS, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps ingénieur | 

## Résolution des problèmes
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Vous recevez un **AccessDenied **message d'erreur au cours de l'`"apply"`étape. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Ressources connexes
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blocs de modules](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentation Terraform)
+ [Comment utiliser pour CI/CD déployer et configurer les services de sécurité AWS avec Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (article de blog AWS)
+ [Utilisation de rôles liés à un service (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) IAM)
+ [create-pipeline](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) (documentation de la CLI AWS)
+ [Configurer le chiffrement côté serveur pour les artefacts stockés dans Amazon S3 pour (documentation CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) AWS CodePipeline )
+ [Quotas pour AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentation AWS)
+ [Protection des données dans AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentation AWS)

## Informations supplémentaires
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Modules Terraform personnalisés**

Voici une liste des modules Terraform personnalisés utilisés dans ce modèle :
+ `codebuild_terraform`crée les CodeBuild projets qui constituent chaque étape du pipeline.
+ `codecommit_infrastructure_source_repo`capture et crée le CodeCommit référentiel source.
+ `codepipeline_iam_role`crée les rôles IAM requis pour le pipeline.
+ `codepipeline_kms`crée la clé AWS KMS requise pour le chiffrement et le déchiffrement des objets Amazon S3.
+ `codepipeline_terraform`crée le pipeline de test pour le CodeCommit référentiel source.
+ `s3_artifacts_bucket`crée un compartiment Amazon S3 pour gérer les artefacts du pipeline.

**Fichiers de spécifications de construction**

Voici une liste des fichiers de spécification de construction (buildspec) que ce modèle utilise pour exécuter chaque étape du pipeline :
+ `buildspec_validate.yml`dirige la `"validate"` scène.
+ `buildspec_plan.yml`dirige la `"plan"` scène.
+ `buildspec_apply.yml`dirige la `"apply"` scène.
+ `buildspec_destroy.yml`dirige la `"destroy"` scène.

*Variables du fichier de spécifications de construction*

Chaque fichier buildspec utilise les variables suivantes pour activer différents paramètres spécifiques à la version :


| 
| 
| Variable | Valeur par défaut | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." | Définit le CodeCommit répertoire source | 
| `TF_VERSION` | « 1,3,7 » | Définit la version Terraform pour l'environnement de construction | 

Le `buildspec_validate.yml` fichier prend également en charge les variables suivantes pour activer différents paramètres spécifiques à la version :


| 
| 
| Variable | Valeur par défaut | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | «. /modèles/scripts » | Définit le répertoire des scripts | 
| `ENVIRONMENT` | « développeur » | Définit le nom de l'environnement | 
| `SKIPVALIDATIONFAILURE` | « Y » | Ignore la validation en cas d'échec | 
| `ENABLE_TFVALIDATE` | « Y » | Active la validation Terraform  | 
| `ENABLE_TFFORMAT` | « Y » | Active le format Terraform | 
| `ENABLE_TFCHECKOV` | « Y » | Active le scan de vérification | 
| `ENABLE_TFSEC` | « Y » | Active le scan TFSEC | 
| `TFSEC_VERSION` | « v1.28.1 » | Définit la version tfsec | 

# Plus de modèles
<a name="devops-more-patterns-pattern-list"></a>

**Topics**
+ [Accédez à des applications de conteneur en privé sur Amazon EKS à l'aide d'AWS PrivateLink et d'un Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Associer un AWS CodeCommit référentiel dans un compte Compte AWS à Amazon SageMaker AI Studio Classic dans un autre compte](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Automatisez la création de comptes en utilisant l'accélérateur Landing Zone sur AWS](automate-account-creation-lza.md)
+ [Automatisez l'ajout ou la mise à jour d'entrées de registre Windows à l'aide d'AWS Systems Manager](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [Automatisez les sauvegardes pour les instances de base de données Amazon RDS for PostgreSQL à l'aide d'AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatisez le déploiement d'applications imbriquées à l'aide d'AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatisez le déploiement du gestionnaire de terminaison de nœuds dans Amazon EKS à l'aide d'un pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Automatisez la configuration de RabbitMQ dans Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.md)
+ [Automatisez la réplication des instances Amazon RDS sur Comptes AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Créez et déployez automatiquement une application Java sur Amazon EKS à l'aide d'un CI/CD pipeline](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Générez automatiquement un modèle PynamoDB et des fonctions CRUD pour Amazon DynamoDB à l'aide d'une application Python](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Validez et déployez automatiquement les politiques et les rôles IAM à l'aide CodePipeline d'IAM Access Analyzer et de macros AWS CloudFormation](automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.md)
+ [Sauvegardez les serveurs Sun SPARC dans l'émulateur Stromasys Charon-SSP sur AWS Cloud](back-up-sun-sparc-servers-in-the-stromasys-charon-ssp-emulator-on-the-aws-cloud.md)
+ [Créez un pipeline de données pour ingérer, transformer et analyser les données Google Analytics à l'aide du kit de AWS DataOps développement](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Créez un PAC de serveur Micro Focus Enterprise avec Amazon EC2 Auto Scaling et Systems Manager](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Créez un pipeline pour les images de conteneurs renforcées à l'aide d' EC2 Image Builder et de Terraform](build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.md)
+ [Créez un MLOps flux de travail à l'aide d'Amazon SageMaker AI et d'Azure DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [Centralisation de la résolution DNS à l'aide AWS Managed Microsoft AD et sur site de Microsoft Active Directory](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Nettoyez les ressources de AWS Account Factory for Terraform (AFT) en toute sécurité après la perte du fichier d'état](clean-up-aft-resources-safely-after-state-file-loss.md)
+ [Configurez la journalisation pour les applications .NET dans Amazon CloudWatch Logs en utilisant NLog](configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.md)
+ [Copiez les images des conteneurs Amazon ECR sur et Comptes AWS Régions AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Créez une image de conteneur Docker personnalisée SageMaker et utilisez-la pour la formation des modèles dans AWS Step Functions](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Créez un pipeline dans les régions AWS qui ne prennent pas en charge AWS CodePipeline](create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.md)
+ [Créez des alarmes pour des métriques personnalisées à l'aide de la détection des CloudWatch anomalies Amazon](create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection.md)
+ [Personnalisez les noms de rôles par défaut en utilisant des AWS CDK aspects et des trappes d'échappement](customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.md)
+ [Déployez un pipeline qui détecte simultanément les problèmes de sécurité dans plusieurs livrables de code](deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.md)
+ [Déployez et gérez un lac de données sans serveur sur le cloud AWS en utilisant l'infrastructure sous forme de code](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Déployez des applications conteneurisées lorsqu'elles AWS IoT Greengrass V2 s'exécutent en tant que conteneur Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Déployez des ressources et des packages Kubernetes à l'aide d'Amazon EKS et d'un référentiel de diagrammes Helm dans Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Déployez des applications à piles multiples à l'aide d'AWS CDK avec TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Déployez la validation de la sécurité du codage en temps réel à l'aide d'un serveur MCP avec Kiro et d'autres assistants de codage](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [Déployez des instances de cluster de basculement SQL Server sur Amazon EC2 et Amazon à l'aide FSx de Terraform](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Déployez les automatisations de sécurité pour la AWS WAF solution à l'aide de Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Développez des assistants avancés basés sur l'IA générative basés sur le chat en utilisant RAG et des instructions ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Activez Amazon de GuardDuty manière conditionnelle à l'aide de modèles AWS CloudFormation](enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.md)
+ [Configurez le dimensionnement automatique piloté par les événements dans Amazon EKS à l'aide d'Amazon EKS Pod Identity et KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Générez des recommandations personnalisées et reclassées à l'aide d'Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Recevez des notifications Amazon SNS lorsque l'état clé d'une clé AWS KMS change](get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.md)
+ [Gérez les ensembles d'autorisations pour plusieurs comptes en utilisant Account Factory pour Terraform](govern-permission-sets-aft.md)
+ [Identifiez automatiquement les images de conteneur dupliquées lors de la migration vers un référentiel Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Implémentez la gestion des versions d'API basée sur les chemins en utilisant des domaines personnalisés dans Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Améliorez les performances opérationnelles en activant Amazon DevOps Guru dans plusieurs régions AWS, sur plusieurs comptes et OUs avec le kit AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Installation de l'agent SSM sur les nœuds de travail Amazon EKS à l'aide de Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Intégrez le contrôleur universel Stonebranch à la modernisation du mainframe AWS](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Modernisation du mainframe : DevOps activée AWS avec Rocket Software Enterprise Suite](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Gérez les ensembles AWS IAM Identity Center d'autorisations sous forme de code en utilisant AWS CodePipeline](manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.md)
+ [Gérez les ensembles AWS d'autorisations de manière dynamique à l'aide de Terraform](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [Gérez les applications de conteneur sur site en configurant Amazon ECS Anywhere avec le kit AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Gérez AWS Organizations les politiques sous forme de code en utilisant AWS CodePipeline Amazon Bedrock](manage-organizations-policies-as-code.md)
+ [Migrer des enregistrements DNS en masse vers une zone hébergée privée Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Migrez les applications hébergées EC2 par IIS vers Amazon à l'aide de appcmd.exe](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Surveillez l'utilisation d'une Amazon Machine Image partagée sur plusieurs Comptes AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Orchestrez un pipeline ETL avec validation, transformation et partitionnement à l'aide de AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Automatisez blue/green les déploiements de bases de données mondiales Amazon Aurora en utilisant les principes IaC](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Préservez l'espace IP routable dans les conceptions VPC multi-comptes pour les sous-réseaux autres que les charges de travail](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Provisionner un produit Terraform à l'aide AWS Service Catalog d'un référentiel de code](provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.md)
+ [Exécutez les tâches d'automatisation d'AWS Systems Manager de manière synchrone depuis AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Configurez un CI/CD pipeline pour les charges de travail hybrides sur Amazon ECS Anywhere à l'aide d'AWS CDK et GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configurer un CI/CD pipeline pour la migration de base de données à l'aide de Terraform](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Configurez une infrastructure multi-AZ pour un SQL Server Always On FCI à l'aide d'Amazon FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [Configurez automatiquement des robots UiPath RPA sur Amazon à l'aide EC2 d'AWS CloudFormation](set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.md)
+ [Simplifiez l'authentification des applications avec le protocole TLS mutuel dans Amazon ECS en utilisant Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Intégration des locataires dans l'architecture SaaS pour le modèle de silo à l'aide de C\$1 et d'AWS CDK](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [Utilisez Terraform pour activer automatiquement Amazon GuardDuty pour une organisation](use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.md)
+ [Utilisez les agents Amazon Bedrock pour automatiser la création de contrôles d'accès dans Amazon EKS via des instructions textuelles](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Validez le code Account Factory pour Terraform (AFT) localement](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Visualisez les résultats AI/ML du modèle à l'aide de Flask et d'AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)