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
-
Terraform v1.5.7+ diinstal.
-
AWS ParallelCluster APIv3.8.0+ digunakan di akun Anda. Lihat Menerapkan ParallelCluster API dengan Terraform.
-
Peran IAM dengan izin untuk memanggil API. ParallelCluster Lihat [Izin yang diperlukan]
Tentukan proyek Terraform
Dalam tutorial ini, Anda akan mendefinisikan proyek Terraform sederhana untuk menyebarkan cluster.
Buat direktori yang disebut
my-clusters
.Semua file yang Anda buat akan berada di dalam direktori ini.
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" } } }
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 }
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" }
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" } } }
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
Buat file
config/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
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 } }
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." }
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"
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.
Membangun proyek:
terraform init
Tentukan rencana penyebaran:
terraform plan -out tfplan
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" } ] }