Membuat cluster dengan Terraform - AWS ParallelCluster

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat cluster dengan Terraform

Saat menggunakan AWS ParallelCluster, Anda hanya membayar AWS sumber daya yang dibuat saat Anda membuat atau memperbarui AWS ParallelCluster gambar dan cluster. Untuk informasi selengkapnya, lihat AWS Layanan yang digunakan oleh AWS ParallelCluster.

Prasyarat

Tentukan proyek Terraform

Dalam tutorial ini, Anda akan mendefinisikan proyek Terraform sederhana untuk menyebarkan cluster.

  1. Buat direktori yang disebutmy-clusters.

    Semua file yang Anda buat akan berada di dalam direktori ini.

  2. Buat file terraform.tf untuk mengimpor ParallelCluster penyedia.

    terraform { required_version = ">= 1.5.7" required_providers { aws-parallelcluster = { source = "aws-tf/aws-parallelcluster" version = "1.0.0" } } }
  3. Buat file providers.tf untuk mengkonfigurasi ParallelCluster dan AWS penyedia.

    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 }
  4. Buat file main.tf untuk menentukan sumber daya menggunakan ParallelCluster modul.

    module "pcluster" { source = "aws-tf/parallelcluster/aws" version = "1.0.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" }
  5. Buat file clusters.tf untuk mendefinisikan beberapa cluster sebagai variabel lokal Terraform.

    catatan

    Anda dapat menentukan beberapa cluster dalam cluster_config elemen. Untuk setiap cluster, Anda dapat secara eksplisit mendefinisikan properti cluster dalam variabel lokal (lihatDemoCluster01) atau referensi file eksternal (lihatDemoCluster02).

    Untuk meninjau properti cluster yang dapat Anda atur dalam elemen konfigurasi, lihatFile konfigurasi cluster.

    Untuk meninjau opsi yang dapat Anda atur untuk pembuatan klaster, lihatpcluster 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" } } }
  6. Buat file config/clusters.yaml untuk mendefinisikan beberapa cluster sebagai konfigurasi YAMG.

    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
  7. Buat fileconfig/cluster_config.yaml, yang merupakan file ParallelCluster konfigurasi standar tempat variabel Terraform dapat disuntikkan.

    Untuk meninjau properti cluster yang dapat Anda atur dalam elemen konfigurasi, lihatFile konfigurasi 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
  8. Buat file clusters_vars.tf untuk menentukan variabel yang dapat disuntikkan ke dalam konfigurasi cluster.

    File ini memungkinkan Anda untuk menentukan nilai dinamis yang dapat digunakan dalam konfigurasi cluster, seperti wilayah dan subnet.

    Contoh ini mengambil nilai langsung dari variabel proyek, tetapi Anda mungkin perlu menggunakan logika khusus untuk menentukannya.

    locals { config_vars = { subnet = var.subnet_id region = var.cluster_region } }
  9. Buat file variables.tf untuk menentukan variabel yang dapat disuntikkan untuk proyek ini.

    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." }
  10. Buat file terraform.tfvars untuk menetapkan nilai arbitrer untuk variabel.

    File di bawah ini menyebarkan cluster di eu-west-1 dalam subnetsubnet-123456789, menggunakan ParallelCluster API 3.10.0 yang ada, yang sudah diterapkan dengan nama tumpukan. us-east-1 MyParallelClusterAPI-310

    region = "us-east-1" api_stack_name = "MyParallelClusterAPI-310" api_version = "3.10.0" cluster_region = "eu-west-1" subnet_id = "subnet-123456789"
  11. Buat file outputs.tf untuk menentukan output yang dikembalikan oleh proyek ini.

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

    Direktori proyek adalah:

    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.

Menyebarkan cluster

Untuk menerapkan cluster, jalankan perintah Terraform standar secara berurutan.

catatan

Contoh ini mengasumsikan bahwa Anda telah menerapkan ParallelCluster API di akun Anda.

  1. Membangun proyek:

    terraform init
  2. Tentukan rencana penyebaran:

    terraform plan -out tfplan
  3. Menyebarkan rencana:

    terraform apply tfplan

Menerapkan ParallelCluster API dengan cluster

Jika Anda belum menerapkan ParallelCluster API dan ingin menerapkannya dengan cluster, ubah file berikut:

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

Izin yang diperlukan

Anda memerlukan izin berikut untuk menerapkan cluster dengan Terraform:

  • asumsikan peran ParallelCluster API, yang bertugas berinteraksi dengan API ParallelCluster

  • jelaskan AWS CloudFormation tumpukan ParallelCluster API untuk memverifikasi keberadaannya dan mengambil parameter dan outputnya

{ "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Resource": "arn:PARTITION:iam::ACCOUNT:role/PCAPIUserRole-*", "Effect": "Allow", "Sid": "AssumePCAPIUserRole" }, { "Action": [ "cloudformation:DescribeStacks" ], "Resource": "arn:PARTITION:cloudformation:REGION:ACCOUNT:stack/*", "Effect": "Allow", "Sid": "CloudFormation" } ] }