Provisionner un produit Terraform dans AWS Service Catalog à l'aide d'un référentiel de code - 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.

Provisionner un produit Terraform dans AWS Service Catalog à l'aide d'un référentiel de code

Créée par le Dr Rahul Sharad Gaikwad (AWS) et Tamilselvan (AWS)

Environnement : PoC ou pilote

Technologies : infrastructure ; DevOps

Charge de travail : toutes les autres charges de travail

Services AWS : AWS Service Catalog ; Amazon EC2

Récapitulatif

AWS Service Catalog prend en charge le provisionnement en libre-service avec gouvernance pour vos configurations HashiCorp Terraform. Si vous utilisez Terraform, vous pouvez utiliser Service Catalog comme outil unique pour organiser, gérer et distribuer vos configurations Terraform au sein d'AWS à grande échelle. Vous pouvez accéder aux principales fonctionnalités de Service Catalog, notamment le catalogage de modèles d'infrastructure en tant que code (iAc) standardisés et préapprouvés, le contrôle d'accès, le provisionnement des ressources cloud avec un accès minimal, le versionnement, le partage avec des milliers de comptes AWS et le balisage. Les utilisateurs finaux, tels que les ingénieurs, les administrateurs de bases de données et les scientifiques des données, consultent la liste des produits et des versions auxquels ils ont accès, et ils peuvent les déployer en une seule action.

Ce modèle vous permet de déployer des ressources AWS à l'aide du code Terraform. Le code Terraform du GitHub référentiel est accessible via Service Catalog. En utilisant cette approche, vous intégrez les produits à vos flux de travail Terraform existants. Les administrateurs peuvent créer des portefeuilles Service Catalog et y ajouter des produits AWS Launch Wizard à l'aide de Terraform.

Les avantages de cette solution sont les suivants :

  • Grâce à la fonctionnalité de restauration de Service Catalog, en cas de problème lors du déploiement, vous pouvez rétablir une version précédente du produit.

  • Vous pouvez facilement identifier les différences entre les versions du produit. Cela vous permet de résoudre les problèmes lors du déploiement.

  • Vous pouvez configurer une connexion au référentiel dans Service Catalog, par exemple à GitHub GitLab, ou AWS CodeCommit. Vous pouvez apporter des modifications au produit directement via le référentiel.

Pour plus d'informations sur les avantages généraux d'AWS Service Catalog, consultez What is Service Catalog.

Conditions préalables et limitations

Prérequis

  • Un compte AWS actif.

  • Un GitHub ou un autre référentiel contenant les fichiers de configuration Terraform au format ZIP. BitBucket

  • Interface de ligne de commande du modèle d'application sans serveur AWS (CLI AWS SAM), installée.

  • Interface de ligne de commande AWS (AWS CLI), installée et configurée.

  • Allez-y, installé.

  • Python version 3.9, installé. La CLI AWS SAM nécessite cette version de Python.

  • Autorisations pour écrire et exécuter des fonctions AWS Lambda et autorisations pour accéder aux produits et aux portefeuilles Service Catalog et les gérer.

Architecture

Pile technologique cible

  • AWS Service Catalog

  • AWS Lambda

Architecture cible

Schéma d'architecture du provisionnement d'un produit Terraform dans Service Catalog à partir d'un dépôt de code

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

  1. Lorsqu'une configuration Terraform est prête, un développeur crée un fichier .zip contenant tout le code Terraform. Le développeur télécharge le fichier .zip dans le référentiel de code connecté à Service Catalog.

  2. Un administrateur associe le produit Terraform à un portefeuille dans Service Catalog. L'administrateur crée également une contrainte de lancement qui permet aux utilisateurs finaux de fournir le produit.

  3. Dans Service Catalog, les utilisateurs finaux lancent les ressources AWS à l'aide de la configuration Terraform. Ils peuvent choisir la version du produit à déployer.

Outils

Services et outils AWS

  • 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 Service Catalog 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.

Autres services

  • Go est un langage de programmation open source pris en charge par Google.

  • Python est un langage de programmation informatique polyvalent.

Référentiel de code

Si vous avez besoin d'exemples de configurations Terraform que vous pouvez déployer via Service Catalog, vous pouvez utiliser les configurations du référentiel Amazon GitHub Macie Organization Setup Using Terraform. L'utilisation des exemples de code de ce référentiel n'est pas obligatoire.

Bonnes pratiques

  • Au lieu de fournir les valeurs des variables dans le fichier de configuration Terraform (terraform.tfvars), configurez les valeurs des variables lors du lancement du produit via Service Catalog.

  • N'accordez l'accès au portefeuille qu'à des utilisateurs ou administrateurs spécifiques.

  • 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 et Bonnes pratiques en matière de sécurité dans la documentation IAM.

Épopées

TâcheDescriptionCompétences requises

(Facultatif) Installez Docker.

Si vous souhaitez exécuter les fonctions AWS Lambda dans votre environnement de développement, installez Docker. Pour connaître la marche à suivre, consultez la rubrique Installer Docker Engine de la documentation Docker.

DevOps ingénieur

Installez le moteur AWS Service Catalog pour Terraform.

  1. Entrez la commande suivante pour cloner le moteur de catalogue AWS Service Catalog pour le référentiel Terraform.

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. Accédez au répertoire racine du référentiel cloné.

  3. Entrez la commande suivante. Cela permet d'installer le moteur.

    run ./bin/bash/deploy-tre.sh -r

    La région AWS définie dans votre profil par défaut n'est pas utilisée lors de l'installation automatique. Au lieu de cela, vous indiquez la région lorsque vous exécutez cette commande.

DevOps ingénieur, administrateur AWS
TâcheDescriptionCompétences requises

Créez une connexion au GitHub référentiel.

  1. Connectez-vous à l'AWS Management Console, puis ouvrez la console Developer Tools. Vous pouvez accéder à la console Developer Tools en choisissant un service tel qu'AWS CodePipeline CodeCommit, AWS ou AWS CodeDeploy.

  2. Dans le volet de navigation de gauche, choisissez Paramètres, puis Connections.

  3. Choisissez Créer une connexion.

  4. Sélectionnez le référentiel dans lequel vous conservez le code source de Terraform. Par exemple, vous pouvez choisir Bitbucket ou GitHub Enterprise Server. GitHub

  5. Entrez le nom de la connexion, puis choisissez Connect.

  6. Lorsque vous y êtes invité, authentifiez le référentiel.

    Une fois l'authentification terminée, la connexion est créée et le statut devient actif.

Administrateur AWS
TâcheDescriptionCompétences requises

Créez le produit Service Catalog.

  1. Ouvrez la console AWS Service Catalog.

  2. Accédez à la section Administration, puis sélectionnez Liste des produits.

  3. Choisissez Créer un produit.

  4. Sur la page Créer un produit dans la section Détails du produit, choisissez le type de produit externe. Service Catalog utilise ce type de produit pour prendre en charge les produits Terraform Community Edition.

  5. Entrez le nom et le propriétaire du produit Service Catalog.

  6. Sélectionnez Spécifiez votre référentiel de code à l'aide d'un CodeStar fournisseur.

  7. Entrez les informations suivantes pour votre référentiel :

    • Connectez-vous à votre fournisseur en utilisant AWS CodeConnections — Sélectionnez la connexion que vous avez créée précédemment.

    • Référentiel — Sélectionnez le référentiel.

    • Branche : sélectionnez la branche.

    • Chemin du fichier modèle : choisissez le chemin dans lequel le fichier modèle de code est stocké. Le nom du fichier doit se terminer partar.gz.

  8. Sous Nom et description de la version, fournissez des informations sur la version du produit.

  9. Choisissez Créer un produit.

Administrateur AWS

Créez un portefeuille.

  1. Ouvrez la console AWS Service Catalog.

  2. Accédez à la section Administration, puis choisissez Portfolios.

  3. Choisissez Créer un portfolio

  4. Entrez les valeurs suivantes :

    • Nom du portefeuilleSample terraform

    • Description du portefeuilleSample portfolio for Terraform configurations

    • Propriétaire — Vos coordonnées, telles que votre adresse e-mail

  5. Choisissez Créer.

Administrateur AWS

Ajoutez le produit Terraform au portefeuille.

  1. Ouvrez la console AWS Service Catalog.

  2. Accédez à la section Administration, puis sélectionnez Liste des produits.

  3. Sélectionnez le produit Terraform que vous avez créé précédemment.

  4. Choisissez Actions, puis sélectionnez Ajouter un produit au portefeuille.

  5. Choisissez le Sample terraform portefeuille.

  6. Choisissez Ajouter un produit au portefeuille.

Administrateur AWS

Créez la stratégie d'accès.

  1. Ouvrez la console AWS Identity and Access Management (IAM).

  2. Dans le panneau de navigation, sélectionnez Policies (Politiques).

  3. Dans le panneau de contenu, sélectionnez Créer une politique.

  4. Choisissez l'option JSON.

  5. Entrez l'exemple de politique JSON dans Politique d'accès dans la section Informations supplémentaires de ce modèle.

  6. Choisissez Suivant.

  7. Sur la page Réviser et créer, dans le champ Nom de la politique, entrezTerraformResourceCreationAndArtifactAccessPolicy.

  8. Choisissez Créer une politique.

Administrateur AWS

Créez une politique de confiance personnalisée.

  1. Ouvrez la console AWS Identity and Access Management (IAM).

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Sélectionnez Create role (Créer un rôle).

  4. Sous Type d'entité fiable, choisissez Politique de confiance personnalisée.

  5. Dans l'éditeur de stratégie JSON, entrez l'exemple de politique JSON dans Politique de confiance dans la section Informations supplémentaires de ce modèle.

  6. Choisissez Suivant.

  7. Sous Politiques d'autorisations, choisissez celles TerraformResourceCreationAndArtifactAccessPolicy que vous avez créées précédemment.

  8. Choisissez Suivant.

  9. Sous Détails du rôle, dans la zone Nom du rôle, entrezSCLaunch-product

    Important : le nom du rôle doit commencer parSCLaunch.

  10. Sélectionnez Créer un rôle.

Administrateur AWS

Ajoutez une contrainte de lancement au produit Service Catalog.

  1. Connectez-vous à l'AWS Management Console en tant qu'utilisateur disposant d'autorisations administratives.

  2. Ouvrez la console AWS Service Catalog.

  3. Dans le volet de navigation, sélectionnez Portfolios.

  4. Choisissez le portfolio que vous avez créé précédemment.

  5. Sur la page des détails du portefeuille, choisissez l'onglet Contraintes, puis sélectionnez Créer une contrainte.

  6. Pour Produit, sélectionnez le produit Terraform que vous avez créé précédemment.

  7. Sous Contrainte de lancement, pour Méthode, choisissez Enter role name.

  8. Dans le champ Nom du rôle, entrezSCLaunch-product.

  9. Choisissez CREATE.

Administrateur AWS

Accordez l'accès au produit.

  1. Ouvrez la console AWS Service Catalog.

  2. Dans le volet de navigation, sélectionnez Portfolios.

  3. Choisissez le portfolio que vous avez créé précédemment.

  4. Choisissez l'onglet Accès, puis choisissez Accorder l'accès.

  5. Choisissez l'onglet Rôles, puis sélectionnez le rôle qui doit avoir accès pour déployer ce produit.

  6. Choisissez Grant access (Accorder l'accès).

Administrateur AWS

Lancez le produit.

  1. Connectez-vous à l'AWS Management Console en tant qu'utilisateur autorisé à déployer le produit Service Catalog.

  2. Ouvrez la console AWS Service Catalog.

  3. Dans le volet de navigation, sélectionnez Products.

  4. Choisissez le produit que vous avez créé précédemment, puis choisissez Launch product.

  5. Entrez le nom du produit et définissez les paramètres requis.

  6. Choisissez Launch product.

DevOps ingénieur
TâcheDescriptionCompétences requises

Validez le déploiement.

Il existe deux machines d'état AWS Step Functions pour le flux de travail de mise en service du Service Catalog :

  • ManageProvisionedProductStateMachine—Service Catalog invoque cette machine d'état lors du provisionnement d'un nouveau produit Terraform et lors de la mise à jour d'un produit fourni par Terraform existant.

  • TerminateProvisionedProductStateMachine—Service Catalog invoque cette machine d'état lors de la résiliation d'un produit approvisionné par Terraform existant.

Vous consultez les journaux de la machine ManageProvisionedProductStateMachine d'état pour confirmer que le produit a été approvisionné.

  1. Connectez-vous à l'AWS Management Console, puis ouvrez la console AWS Step Functions.

  2. Dans le volet de navigation de gauche, sélectionnez State machines.

  3. ChoisissezManageProvisionedProductStateMachine.

  4. Dans la liste des exécutions, entrez l'ID de produit fourni pour localiser l'exécution.

    Remarque : Les noms des compartiments principaux du fichier d'état commencent sc-terraform-engine-state- par.

  5. Vérifiez que toutes les ressources requises ont été créées dans le compte.

DevOps ingénieur
TâcheDescriptionCompétences requises

Supprimez les produits approvisionnés.

  1. Connectez-vous à l'AWS Management Console en tant qu'utilisateur autorisé à déployer le produit Service Catalog.

  2. Ouvrez la console AWS Service Catalog.

  3. Dans le menu de navigation de gauche, choisissez Provisioned products.

  4. Sélectionnez le produit que vous avez créé.

  5. Dans la liste Actions, choisissez Terminate.

  6. Dans la zone de texte de confirmation, entrezterminate, puis choisissez Terminer le produit approvisionné.

  7. Répétez ces étapes pour mettre fin à tous les produits approvisionnés.

DevOps ingénieur

Supprimez le moteur AWS Service Catalog pour Terraform.

  1. Connectez-vous à l'AWS Management Console en tant qu'utilisateur disposant d'autorisations administratives.

  2. Ouvrez la console Amazon S3.

  3. Dans le volet de navigation, choisissez Compartiments.

  4. Sélectionnez le sc-terraform-engine-logging-XXXX compartiment.

  5. Choisissez Vide.

  6. Répétez les étapes 4 à 5 pour les compartiments suivants :

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. Ouvrez la CloudFormation console AWS, puis vérifiez que vous vous trouvez dans la bonne région AWS.

  8. Dans le menu de navigation de gauche, choisissez Stacks.

  9. SélectionnezSAM-TRE, puis choisissez Supprimer. Patientez jusqu'à ce que la pile soit supprimée.

  10. SélectionnezBootstrap-TRE, puis choisissez Supprimer. Patientez jusqu'à ce que la pile soit supprimée.

Administrateur AWS

Ressources connexes

Documentation AWS

Documentation Terraform

Informations supplémentaires

Politique d'accès

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

Politique d’approbation

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }