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.
Définir un projet Terraform
Dans ce didacticiel, vous allez définir un projet Terraform simple pour déployer un cluster.
Créez un répertoire appelé
my-clusters
.Tous les fichiers que vous créez se trouveront dans ce répertoire.
Créez le fichier
terraform.tf
pour importer le ParallelCluster fournisseur.terraform { required_version = ">= 1.5.7" required_providers { aws-parallelcluster = { source = "aws-tf/aws-parallelcluster" version = "~> 1.0" } } }
Créez le fichier
providers.tf
pour configurer les AWS fournisseurs ParallelCluster et.provider "aws" { region = var.region profile = var.profile } provider "aws-parallelcluster" { region = var.region profile = var.profile api_stack_name = var.api_stack_name use_user_role = true }
Créez le fichier
main.tf
pour définir les ressources à l'aide du ParallelCluster module.module "pcluster" { source = "aws-tf/parallelcluster/aws" version = "1.1.0" region = var.region api_stack_name = var.api_stack_name api_version = var.api_version deploy_pcluster_api = false template_vars = local.config_vars cluster_configs = local.cluster_configs config_path = "config/clusters.yaml" }
Créez le fichier
clusters.tf
pour définir plusieurs clusters en tant que variables locales Terraform.Note
Vous pouvez définir plusieurs clusters au sein de l'
cluster_config
élément. Pour chaque cluster, vous pouvez définir explicitement les propriétés du cluster dans les variables locales (voirDemoCluster01
) ou référencer un fichier externe (voirDemoCluster02
).Pour consulter les propriétés du cluster que vous pouvez définir dans l'élément de configuration, reportez-vous àFichier de configuration du cluster.
Pour consulter les options que vous pouvez définir pour la création de clusters, consultezpcluster create-cluster.
locals { cluster_configs = { DemoCluster01 : { region : local.config_vars.region rollbackOnFailure : false validationFailureLevel : "WARNING" suppressValidators : [ "type:KeyPairValidator" ] configuration : { Region : local.config_vars.region Image : { Os : "alinux2" } HeadNode : { InstanceType : "t3.small" Networking : { SubnetId : local.config_vars.subnet } Iam : { AdditionalIamPolicies : [ { Policy : "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" } ] } } Scheduling : { Scheduler : "slurm" SlurmQueues : [{ Name : "queue1" CapacityType : "ONDEMAND" Networking : { SubnetIds : [local.config_vars.subnet] } Iam : { AdditionalIamPolicies : [ { Policy : "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" } ] } ComputeResources : [{ Name : "compute" InstanceType : "t3.small" MinCount : "1" MaxCount : "4" }] }] SlurmSettings : { QueueUpdateStrategy : "TERMINATE" } } } } DemoCluster02 : { configuration : "config/cluster_config.yaml" } } }
Créez le fichier
config/clusters.yaml
pour définir plusieurs clusters en tant que configuration YAML.DemoCluster03: region: ${region} rollbackOnFailure: true validationFailureLevel: WARNING suppressValidators: - type:KeyPairValidator configuration: config/cluster_config.yaml DemoCluster04: region: ${region} rollbackOnFailure: false configuration: config/cluster_config.yaml
Créez le fichier
config/cluster_config.yaml
, qui est un fichier de ParallelCluster configuration standard dans lequel les variables Terraform peuvent être injectées.Pour consulter les propriétés du cluster que vous pouvez définir dans l'élément de configuration, reportez-vous àFichier de configuration du cluster.
Region: ${region} Image: Os: alinux2 HeadNode: InstanceType: t3.small Networking: SubnetId: ${subnet} Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 CapacityType: ONDEMAND Networking: SubnetIds: - ${subnet} Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore ComputeResources: - Name: compute InstanceType: t3.small MinCount: 1 MaxCount: 5 SlurmSettings: QueueUpdateStrategy: TERMINATE
Créez le fichier
clusters_vars.tf
pour définir les variables qui peuvent être injectées dans les configurations de cluster.Ce fichier vous permet de définir des valeurs dynamiques qui peuvent être utilisées dans les configurations de cluster, telles que la région et le sous-réseau.
Cet exemple extrait des valeurs directement à partir des variables du projet, mais vous devrez peut-être utiliser une logique personnalisée pour les déterminer.
locals { config_vars = { subnet = var.subnet_id region = var.cluster_region } }
Créez le fichier
variables.tf
pour définir les variables qui peuvent être injectées pour ce projet.variable "region" { description = "The region the ParallelCluster API is deployed in." type = string default = "us-east-1" } variable "cluster_region" { description = "The region the clusters will be deployed in." type = string default = "us-east-1" } variable "profile" { type = string description = "The AWS profile used to deploy the clusters." default = null } variable "subnet_id" { type = string description = "The id of the subnet to be used for the ParallelCluster instances." } variable "api_stack_name" { type = string description = "The name of the CloudFormation stack used to deploy the ParallelCluster API." default = "ParallelCluster" } variable "api_version" { type = string description = "The version of the ParallelCluster API." }
Créez le fichier
terraform.tfvars
pour définir des valeurs arbitraires pour les variables.Le fichier ci-dessous déploie les clusters
eu-west-1
au sein du sous-réseausubnet-123456789
, en utilisant l' ParallelCluster API 3.11.1 existante, qui est déjà déployée avec le nom de la pile.us-east-1
MyParallelClusterAPI-3111
region = "us-east-1" api_stack_name = "MyParallelClusterAPI-3111" api_version = "3.11.1" cluster_region = "eu-west-1" subnet_id = "subnet-123456789"
Créez le fichier
outputs.tf
pour définir les sorties renvoyées par ce projet.output "clusters" { value = module.pcluster.clusters }
Le répertoire du projet est le suivant :
my-clusters ├── config │ ├── cluster_config.yaml - Cluster configuration, where terraform variables can be injected.. │ └── clusters.yaml - File listing all the clusters to deploy. ├── clusters.tf - Clusters defined as Terraform local variables. ├── clusters_vars.tf - Variables that can be injected into cluster configurations. ├── main.tf - Terraform entrypoint where the ParallelCluster module is configured. ├── outputs.tf - Defines the cluster as a Terraform output. ├── providers.tf - Configures the providers: ParallelCluster and AWS. ├── terraform.tf - Import the ParallelCluster provider. ├── terraform.tfvars - Defines values for variables, e.g. region, PCAPI stack name. └── variables.tf - Defines the variables, e.g. region, PCAPI stack name.