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.tfpour 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.tfpour 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.tfpour 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.tfpour 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, consultezFichier 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.yamlpour 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.yamlCré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, consultezFichier 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: TERMINATECréez le fichier
clusters_vars.tfpour 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.tfpour 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.tfvarspour définir des valeurs arbitraires pour les variables.Le fichier ci-dessous déploie les clusters
eu-west-1au 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-1MyParallelClusterAPI-3111region = "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.tfpour 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.