ParallelCluster API mit Terraform bereitstellen - AWS ParallelCluster

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.

ParallelCluster API mit Terraform bereitstellen

In diesem Tutorial definieren Sie ein einfaches Terraform-Projekt zur Bereitstellung einer API. ParallelCluster

Voraussetzungen

  • Terraform v1.5.7+ ist installiert.

  • IAM-Rolle mit den Berechtigungen zur Bereitstellung der API. ParallelCluster Siehe Erforderliche Berechtigungen.

Definieren Sie ein Terraform-Projekt

  1. Erstellen Sie ein Verzeichnis namens. my-pcluster-api

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

  2. Erstellen Sie die Dateiprovider.tf, um den AWS Anbieter zu konfigurieren.

    provider "aws" { region = var.region profile = var.profile }
  3. Erstellen Sie die Dateimain.tf, um die Ressourcen mithilfe des ParallelCluster Moduls zu definieren.

    module "parallelcluster_pcluster_api" { source = "aws-tf/parallelcluster/aws//modules/pcluster_api" 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" } }
  4. Erstellen Sie die Dateivariables.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 "profile" { type = string description = "The AWS profile used to deploy the clusters." default = null } 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." }
  5. Erstellen Sie die Dateiterraform.tfvars, um beliebige Werte für die Variablen festzulegen.

    Die folgende Datei stellt eine ParallelCluster API 3.10.0 unter us-east-1 Verwendung des Stack-Namens bereit. MyParallelClusterAPI-310 Sie können diese ParallelCluster API-Bereitstellung anhand ihres Stack-Namens referenzieren.

    region = "us-east-1" api_stack_name = "MyParallelClusterAPI-310" api_version = "3.10.0"
  6. Erstellen Sie die Dateioutputs.tf, um die von diesem Projekt zurückgegebenen Ausgaben zu definieren.

    output "pcluster_api_stack_outputs" { value = module.parallelcluster_pcluster_api.stack_outputs }

    Das Projektverzeichnis ist:

    my-pcluster-api ├── main.tf - Terraform entrypoint to define the resources using the ParallelCluster module. ├── outputs.tf - Defines the outputs returned by Terraform. ├── providers.tf - Configures the AWS provider. ├── terraform.tfvars - Set the arbitrary values for the variables, i.e. region, PCAPI version, PCAPI stack name └── variables.tf - Defines the variables, e.g. region, PCAPI version, PCAPI stack name.

Bereitstellen der API

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

  1. Erstellen Sie das Projekt:

    terraform init
  2. Definieren Sie den Bereitstellungsplan:

    terraform plan -out tfplan
  3. Stellen Sie den Plan bereit:

    terraform apply tfplan

Erforderliche Berechtigungen

Sie benötigen die folgenden Berechtigungen, um die ParallelCluster API mit Terraform bereitzustellen:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudformation:DescribeStacks", "cloudformation:GetTemplate" ], "Resource": "arn:PARTITION:cloudformation:REGION:ACCOUNT:stack/*", "Effect": "Allow", "Sid": "CloudFormationRead" }, { "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:CreateChangeSet" ], "Resource": "arn:PARTITION:cloudformation:REGION:ACCOUNT:stack/MyParallelClusterAPI*", "Effect": "Allow", "Sid": "CloudFormationWrite" }, { "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:PARTITION:cloudformation:REGION:aws:transform/Include", "arn:PARTITION:cloudformation:REGION:aws:transform/Serverless-2016-10-31" ], "Effect": "Allow", "Sid": "CloudFormationTransformWrite" }, { "Action": [ "s3:GetObject" ], "Resource": [ "arn:PARTITION:s3:::*-aws-parallelcluster/parallelcluster/*/api/ParallelCluster.openapi.yaml", "arn:PARTITION:s3:::*-aws-parallelcluster/parallelcluster/*/layers/aws-parallelcluster/lambda-layer.zip" ], "Effect": "Allow", "Sid": "S3ParallelClusterArtifacts" }, { "Action": [ "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:CreatePolicy", "iam:DeletePolicy", "iam:GetPolicy", "iam:GetRolePolicy", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:ListPolicyVersions" ], "Resource": [ "arn:PARTITION:iam::ACCOUNT:role/*", "arn:PARTITION:iam::ACCOUNT:policy/*" ], "Effect": "Allow", "Sid": "IAM" }, { "Action": [ "iam:PassRole" ], "Resource": [ "arn:PARTITION:iam::ACCOUNT:role/ParallelClusterLambdaRole-*", "arn:PARTITION:iam::ACCOUNT:role/APIGatewayExecutionRole-*" ], "Effect": "Allow", "Sid": "IAMPassRole" }, { "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:PublishLayerVersion", "lambda:DeleteLayerVersion", "lambda:GetLayerVersion", "lambda:TagResource", "lambda:UntagResource" ], "Resource": [ "arn:PARTITION:lambda:REGION:ACCOUNT:layer:PCLayer-*", "arn:PARTITION:lambda:REGION:ACCOUNT:function:*-ParallelClusterFunction-*" ], "Effect": "Allow", "Sid": "Lambda" }, { "Action": [ "logs:CreateLogGroup", "logs:DeleteLogGroup", "logs:DescribeLogGroups", "logs:PutRetentionPolicy", "logs:TagLogGroup", "logs:UntagLogGroup" ], "Resource": [ "arn:PARTITION:logs:REGION:ACCOUNT:log-group:/aws/lambda/*-ParallelClusterFunction-*" ], "Effect": "Allow", "Sid": "Logs" }, { "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT", "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:PARTITION:apigateway:REGION::/restapis", "arn:PARTITION:apigateway:REGION::/restapis/*", "arn:PARTITION:apigateway:REGION::/tags/*" ], "Effect": "Allow", "Sid": "APIGateway" } ] }