

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Einen Cluster mit Terraform erstellen
<a name="tutorial-create-cluster-terraform"></a>

Bei der Nutzung AWS ParallelCluster zahlen Sie nur für die AWS Ressourcen, die beim Erstellen oder Aktualisieren von AWS ParallelCluster Images und Clustern erstellt werden. Weitere Informationen finden Sie unter [AWS Dienste verwendet von AWS ParallelCluster](aws-services-v3.md).

**Voraussetzungen**
+ Terraform v1.5.7\$1 ist installiert. 
+ [AWS ParallelCluster API](api-reference-v3.md)v3.8.0\$1 ist in Ihrem Konto bereitgestellt. Siehe [ParallelCluster API mit Terraform bereitstellen](tutorial-deploy-terraform.md). 
+ IAM-Rolle mit den Berechtigungen zum Aufrufen der API. ParallelCluster Siehe [Erforderliche Berechtigungen]

# Definieren Sie ein Terraform-Projekt
<a name="tutorial-create-cluster-terraform-define"></a>

In diesem Tutorial definieren Sie ein einfaches Terraform-Projekt zur Bereitstellung eines Clusters.

1. Erstellen Sie ein Verzeichnis namens. `my-clusters` 

   Alle Dateien, die Sie erstellen, befinden sich in diesem Verzeichnis.

1. Erstellen Sie die Datei`terraform.tf`, um den ParallelCluster Anbieter zu importieren.

   ```
   terraform {
     required_version = ">= 1.5.7"
     required_providers {
       aws-parallelcluster = {
         source  = "aws-tf/aws-parallelcluster"
         version = "~> 1.0"
       }
     }
   }
   ```

1. Erstellen Sie die Datei`providers.tf`, um die AWS Anbieter ParallelCluster und zu konfigurieren.

   ```
   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
   }
   ```

1. Erstellen Sie die Datei`main.tf`, um die Ressourcen mithilfe des ParallelCluster Moduls zu definieren.

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

1. Erstellen Sie die Datei`clusters.tf`, um mehrere Cluster als lokale Terraform-Variablen zu definieren. 
**Anmerkung**  
Sie können mehrere Cluster innerhalb des `cluster_config` Elements definieren. Für jeden Cluster können Sie die Cluster-Eigenschaften innerhalb der lokalen Variablen explizit definieren (siehe`DemoCluster01`) oder auf eine externe Datei verweisen (siehe`DemoCluster02`).

   Informationen zu den Clustereigenschaften, die Sie innerhalb des Konfigurationselements festlegen können, finden Sie unter[Cluster-Konfigurationsdatei](cluster-configuration-file-v3.md).

   Informationen zu den Optionen, die Sie für die Clustererstellung festlegen können, finden Sie unter[`pcluster create-cluster`](pcluster.create-cluster-v3.md).

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

1. Erstellen Sie die Datei`config/clusters.yaml`, um mehrere Cluster als YAML-Konfiguration zu definieren.

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

1. Erstellen Sie die Datei`config/cluster_config.yaml`, bei der es sich um eine ParallelCluster Standardkonfigurationsdatei handelt, in die Terraform-Variablen eingefügt werden können.

   Informationen zu den Cluster-Eigenschaften, die Sie innerhalb des Konfigurationselements festlegen können, finden Sie unter. [Cluster-Konfigurationsdatei](cluster-configuration-file-v3.md)

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

1. Erstellen Sie die Datei`clusters_vars.tf`, um die Variablen zu definieren, die in Clusterkonfigurationen eingefügt werden können.

   Mit dieser Datei können Sie dynamische Werte definieren, die in Clusterkonfigurationen verwendet werden können, z. B. Region und Subnetz.

   In diesem Beispiel werden Werte direkt aus den Projektvariablen abgerufen. Möglicherweise müssen Sie jedoch benutzerdefinierte Logik verwenden, um sie zu ermitteln.

   ```
   locals {
     config_vars = {
       subnet = var.subnet_id
       region = var.cluster_region
     }
   }
   ```

1. Erstellen Sie die Datei`variables.tf`, um die Variablen zu definieren, die für dieses Projekt eingefügt werden können.

   ```
   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."
   }
   ```

1. Erstellen Sie die Datei`terraform.tfvars`, um beliebige Werte für die Variablen festzulegen. 

   In der folgenden Datei werden die Cluster `eu-west-1` innerhalb des `subnet-123456789` Subnetzes mithilfe der vorhandenen ParallelCluster API 3.11.1 bereitgestellt, die bereits mit dem Stacknamen bereitgestellt wurde. `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"
   ```

1. Erstellen Sie die Datei`outputs.tf`, um die von diesem Projekt zurückgegebenen Ausgaben zu definieren.

   ```
   output "clusters" {
     value = module.pcluster.clusters
   }
   ```

   Das Projektverzeichnis ist:

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

# Bereitstellen des Clusters
<a name="tutorial-create-cluster-terraform-deploy"></a>

Um den Cluster bereitzustellen, führen Sie die Terraform-Standardbefehle der Reihe nach aus.

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Sie die ParallelCluster API bereits in Ihrem Konto bereitgestellt haben.

1. Erstellen Sie das Projekt:

   ```
   terraform init
   ```

1. Definieren Sie den Bereitstellungsplan:

   ```
   terraform plan -out tfplan
   ```

1. Stellen Sie den Plan bereit:

   ```
   terraform apply tfplan
   ```

## Stellen Sie die ParallelCluster API mit Clustern bereit
<a name="tutorial-create-cluster-terraform-deploy-api"></a>

Wenn Sie die ParallelCluster API nicht bereitgestellt haben und sie mit den Clustern bereitstellen möchten, ändern Sie die folgenden Dateien:
+ `main.tf`

  ```
  module "pcluster" {
    source  = "aws-tf/aws/parallelcluster"
    version = "1.0.0"
  
    region                = var.region
    api_stack_name        = var.api_stack_name
    api_version           = var.api_version
    deploy_pcluster_api   = true
    parameters = {
      EnableIamAdminAccess = "true"
    }
    
    template_vars         = local.config_vars
    cluster_configs       = local.cluster_configs
    config_path           = "config/clusters.yaml"
  }
  ```
+ `providers.tf`

  ```
  provider "aws-parallelcluster" {
    region   = var.region
    profile  = var.profile
    endpoint = module.pcluster.pcluster_api_stack_outputs.ParallelClusterApiInvokeUrl
    role_arn = module.pcluster.pcluster_api_stack_outputs.ParallelClusterApiUserRole
  }
  ```

# Erforderliche Berechtigungen
<a name="tutorial-create-cluster-terraform-permissions"></a>

Sie benötigen die folgenden Berechtigungen, um einen Cluster mit Terraform bereitzustellen:
+ übernehme die ParallelCluster API-Rolle, die für die Interaktion mit der API zuständig ist ParallelCluster 
+ Beschreiben Sie den CloudFormation ParallelCluster API-Stack, um zu überprüfen, ob er existiert, und rufen Sie seine Parameter und Ausgaben ab

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:sts::111122223333:role/PCAPIUserRole-*",
            "Effect": "Allow",
            "Sid": "AssumePCAPIUserRole"
        },
        {
            "Action": [
                "cloudformation:DescribeStacks"
            ],
            "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/*",
            "Effect": "Allow",
            "Sid": "CloudFormation"
        }
    ]
}
```

------