

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 à l'aide AWS Service Catalog d'un référentiel de code
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad et Tamilselvan P, Amazon Web Services*

## Résumé
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog prend en charge le provisionnement en libre-service avec gouvernance de vos configurations [HashiCorp Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started). Si vous utilisez Terraform, vous pouvez utiliser Service Catalog comme outil unique pour organiser, gérer et distribuer vos configurations Terraform à grande échelle. AWS 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 personnes 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 aide à déployer AWS des ressources à 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 AWS Launch Wizard des produits à 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 vers GitHub ou GitLab. Vous pouvez apporter des modifications au produit directement via le référentiel.

Pour plus d'informations sur les avantages généraux de AWS Service Catalog, voir [Qu'est-ce que Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) ?

## Conditions préalables et limitations
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Un GitHub ou un autre référentiel contenant les fichiers de configuration Terraform au format ZIP. BitBucket
+ AWS Serverless Application Model Interface de ligne de commande (AWS SAM CLI), [installée](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).
+ 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).
+ Allez-y, [installé](https://go.dev/doc/install).
+ Python version 3.9, [installé](https://www.python.org/downloads/release/python-3913/). AWS SAM La CLI nécessite cette version de Python.
+ Autorisations pour écrire et exécuter AWS Lambda des fonctions et autorisations pour accéder aux produits et aux portefeuilles Service Catalog et les gérer.

## Architecture
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Schéma d'architecture du provisionnement d'un produit Terraform dans Service Catalog à partir d'un dépôt de code\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


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.

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

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

## Outils
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

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

**Autres services**
+ [Go](https://go.dev/doc/install) est un langage de programmation open source pris en charge par Google.
+ [Python](https://www.python.org/) 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](https://github.com/aws-samples/aws-macie-customization-terraform-samples) Using Terraform. L'utilisation des exemples de code de ce référentiel n'est pas obligatoire.

## Bonnes pratiques
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ 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](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 Gestion des identités et des accès AWS (IAM).

## Épopées
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Configurez votre poste de travail local
<a name="set-up-your-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| (Facultatif) Installez Docker. | Si vous souhaitez exécuter les AWS Lambda fonctions dans votre environnement de développement, installez Docker. Pour connaître la marche à suivre, consultez la rubrique [Installer Docker Engine](https://docs.docker.com/engine/install/) de la documentation Docker. | DevOps ingénieur | 
| Installez le AWS Service Catalog moteur pour Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingénieur, administrateur AWS | 

### Connect le GitHub référentiel
<a name="connect-the-github-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une connexion au GitHub référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 

### Créer un produit Terraform dans Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le produit Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Créez un portefeuille. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Ajoutez le produit Terraform au portefeuille. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Créez la stratégie d'accès. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Créez une politique de confiance personnalisée. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Ajoutez une contrainte de lancement au produit Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Accordez l'accès au produit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 
| Lancez le produit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.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. | Il existe deux machines AWS Step Functions d'état pour le flux de travail de provisionnement du Service Catalog :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Vous consultez les journaux de la machine `ManageProvisionedProductStateMachine` d'état pour confirmer que le produit a été approvisionné.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingénieur | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les produits approvisionnés. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingénieur | 
| Supprimez le AWS Service Catalog moteur de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrateur AWS | 

## Ressources connexes
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS documentation**
+ [Commencer à utiliser un produit Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Documentation Terraform**
+ [Installation de Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Configuration du backend Terraform](https://developer.hashicorp.com/terraform/language/backend)
+ [Documentation du fournisseur Terraform AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informations supplémentaires
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**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*"
                    ]
                }
            }
        }
    ]
}
```