Implementación de ParallelCluster la API con Terraform - AWS ParallelCluster

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementación de ParallelCluster la API con Terraform

En este tutorial, definirá un proyecto sencillo de Terraform para implementar una ParallelCluster API.

Requisitos previos 

  • Terraform v1.5.7+ está instalado.

  • Función de IAM con los permisos para implementar la API. ParallelCluster Consulte Permisos necesarios.

Defina un proyecto de Terraform

  1. Cree un directorio llamadomy-pcluster-api.

    Todos los archivos que cree estarán dentro de este directorio.

  2. Cree el archivo provider.tf para configurar el AWS proveedor.

    provider "aws" { region = var.region profile = var.profile }
  3. Cree el archivo main.tf para definir los recursos mediante el ParallelCluster módulo.

    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. Cree el archivo variables.tf para definir las variables que se pueden inyectar para este proyecto.

    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. Cree el archivo terraform.tfvars para establecer valores arbitrarios para las variables.

    El siguiente archivo implementa una ParallelCluster API 3.10.0 us-east-1 con el nombre de la pila. MyParallelClusterAPI-310 Podrás hacer referencia a esta implementación de ParallelCluster API mediante su nombre de pila.

    region = "us-east-1" api_stack_name = "MyParallelClusterAPI-310" api_version = "3.10.0"
  6. Crea el archivo outputs.tf para definir los resultados devueltos por este proyecto.

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

    El directorio del proyecto es:

    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.

Implementar la API

Para implementar la API, ejecute los comandos estándar de Terraform en orden.

  1. Cree el proyecto:

    terraform init
  2. Defina el plan de despliegue:

    terraform plan -out tfplan
  3. Implemente el plan:

    terraform apply tfplan

Permisos necesarios

Necesita los siguientes permisos para implementar la ParallelCluster API con Terraform:

{ "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" } ] }