Lancez un CodeBuild projet sur des comptes AWS à l'aide de Step Functions et d'une fonction proxy Lambda - Recommandations AWS

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.

Lancez un CodeBuild projet sur des comptes AWS à l'aide de Step Functions et d'une fonction proxy Lambda

Créée par Richard Milner-Watts (AWS) et Amit Anjarlekar (AWS)

Référentiel de code : Cross-Account Proxy CodeBuild

Environnement : Production

Technologies : DevOps ; Gestion et gouvernance ; Opérations ; Sans serveur

Services AWS : AWS CodeBuild ; AWS Lambda ; AWS Step Functions ; AWS X-Ray ; AWS CloudFormation

Récapitulatif

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

Conditions préalables et limitations

Prérequis

  • 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 entre comptes.

Architecture

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

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.

  2. 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.

  3. À 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

Pile technologique

  • AWS CloudFormation

  • CodeBuild

  • IAM

  • Lambda

  • Step Functions

  • X-Ray

Outils

  • AWS 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 fournit un éditeur JSON et YAML intégré qui vous permet de visualiser et de modifier des CloudFormation modèles.

  • AWS CodeBuild 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) 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 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 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 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. 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).

Bonnes pratiques

  1. Ajustez les valeurs du temps d'attente dans la machine d'état Step Function afin de minimiser le nombre de demandes d'interrogation concernant le statut du travail. Utilisez le temps d'exécution prévu pour le CodeBuild projet.

  2. 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.

  3. 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

TâcheDescriptionCompétences requises

Enregistrez les identifiants de compte AWS.

Les identifiants de compte AWS sont nécessaires 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 dans la documentation IAM.

AWS DevOps

Téléchargez les CloudFormation modèles AWS.

  1. Téléchargez le CloudFormation modèle sample_target_codebuild_template.yaml AWS depuis le GitHub référentiel correspondant à ce modèle.

  2. Téléchargez le CloudFormation modèle codebuild_lambda_proxy_template.yaml AWS depuis le GitHub référentiel correspondant à ce modèle.

Remarque : 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.

  1. Connectez-vous à l'AWS Management Console pour votre compte source, ouvrez la CloudFormation console AWS, puis choisissez Stacks.

  2. Choisissez Créer une pile, puis choisissez Avec de nouvelles ressources (standard).

  3. Pour Source du modèle, choisissez Charger un fichier de modèle.

  4. Pour Télécharger un fichier modèle, choisissez fichier, puis sélectionnez le codebuild_lambda_proxy_template.yaml fichier que vous avez téléchargé. Choisissez Suivant.

  5. Dans Nom de la pile, entrez le nom de la pile (par exemple,codebuild-lambda-proxy).

  6. Remplacez le crossAccountTargetRoleArn paramètre par votre <TargetAccountId> (par exemple,<arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role>). Remarque : Vous n'êtes pas obligé de mettre à jour la valeur par défaut du targetCodeBuildProjectparamètre.

  7. Choisissez Next, acceptez les options de création de pile par défaut, puis choisissez Next.

  8. Cochez la case Je reconnais qu'AWS CloudFormation pourrait créer des ressources IAM avec des noms personnalisés, puis choisissez Create stack.

Remarque : 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.

  1. Attendez que la CloudFormation pile AWS atteigne le statut CREATE_COMPLETE. Cela devrait prendre moins d'une minute.

  2. Ouvrez la console AWS Lambda, choisissez Functions, puis recherchez la lambda-proxy-ProxyLambda-<GUID> fonction.

  3. Ouvrez la console AWS Step Functions, choisissez State Machines, puis recherchez la machine sample-crossaccount-codebuild-state-machine State Machine.

AWS DevOps
TâcheDescriptionCompétences requises

Créez et déployez la CloudFormation pile AWS.

  1. Connectez-vous à l'AWS Management Console pour votre compte cible, ouvrez la CloudFormation console AWS, puis choisissez Stacks.

  2. Choisissez Create Stack, puis choisissez Avec de nouvelles ressources (standard).

  3. Pour Source du modèle, choisissez Charger un fichier de modèle.

  4. Pour Télécharger un fichier modèle, choisissez Choisir un fichier, puis sélectionnez le sample_target_codebuild_template.yaml fichier. Choisissez Suivant.

  5. Dans Nom de la pile, entrez le nom de la pile (par exemple :sample-codebuild-stack).

  6. Remplacez le crossAccountSourceRoleArn paramètre par votre <SourceAccountId> (par exemple,<arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role>).

  7. Choisissez Next, acceptez les options de création de pile par défaut, puis choisissez Next.

  8. Cochez la case Je reconnais qu'AWS CloudFormation pourrait créer des ressources IAM avec des noms personnalisés, puis choisissez Create stack.

AWS DevOps

Vérifiez la création de l'exemple de CodeBuild projet.

  1. Attendez que la CloudFormation pile AWS atteigne le statut CREATE_COMPLETE. Cela devrait prendre moins d'une minute.

  2. Ouvrez la CodeBuild console AWS, puis recherchez le sample-codebuild-project projet.

AWS DevOps
TâcheDescriptionCompétences requises

Lancez la machine à états.

  1. Connectez-vous à l'AWS Management Console pour votre compte source, ouvrez la console AWS Step Functions, puis choisissez State machines.

  2. Choisissez la machine à sample-crossaccount-codebuild-state-machine états, puis choisissez Démarrer l'exécution.

  3. Dans l'éditeur d'entrée, entrez le code JSON suivant et <TargetAccountID> remplacez-le par l'ID de compte AWS du compte contenant le CodeBuild projet.

    { "crossAccountTargetRoleArns": [ { "arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role", "region": "eu-west-1", "codeBuildProject": "sample-codebuild-project", "SampleValue1": "Value1", "SampleValue2": "Value2" } ] }

    Remarque : Les paires clé-valeur sont transmises en tant que variables d'environnement de la fonction du compte source au CodeBuild projet du compte cible.

  4. Choisissez Start execution (Démarrer l'exécution).

  5. Dans l'onglet Détails de la page State Machine, vérifiez si le statut d'exécution est défini sur Successed. Cela confirme que votre machine d'état est en cours d'exécution. Remarque : environ 30 secondes peuvent être nécessaires pour que la machine à états atteigne le statut Successed.

  6. Pour voir la sortie et l'entrée d'une étape dans la machine à états, développez cette étape dans la section Historique des événements d'exécution. Par exemple, développez l'étape Lambda - CodeBuild Proxy — Start. La sortie inclut des détails sur les variables d'environnement remplacées, la charge utile d'origine et l' CodeBuild ID de tâche.

AWS DevOps

Validez les variables d'environnement.

  1. Connectez-vous à l'AWS Management Console pour votre compte cible.

  2. Ouvrez la CodeBuild console AWS, développez Build, puis choisissez Build projects.

  3. Choisissez le sample-codebuild-project projet, puis cliquez sur Afficher les détails.

  4. Dans l'onglet Historique des constructions, choisissez la version la plus récente du projet, puis choisissez Afficher les journaux.

  5. Dans la sortie du journal, vérifiez que les variables d'environnement imprimées sur STDOUT correspondent aux variables d'environnement de l'exemple de machine d'état Step Functions.

AWS DevOps

Résolution des problèmes

ProblèmeSolution

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.

  1. Ajustez les valeurs du temps d'attente dans la machine d'état Step Functions afin de minimiser le nombre de demandes d'interrogation concernant le statut du travail. Utilisez le temps d'exécution prévu pour le CodeBuild projet.

  2. Déterminez si CodeBuild c'est l'outil approprié à utiliser. Par exemple, le temps nécessaire pour initialiser une CodeBuild tâche peut être nettement plus long que celui d'AWS Lambda. Si un débit élevé et des délais d'exécution rapides sont nécessaires, envisagez de migrer la logique métier vers AWS Lambda et d'utiliser une architecture ventilée.