Присоединение FSX PERSISTENT_2 к экземпляру AWS Batch Compute с помощью Terraform

У меня есть код Terraform , который почти успешно создает среду пакетных вычислений AWS с подключением к ней общего файлового ресурса Fsx.

Однако, несмотря на прохождениеaws_fsx_lustre_file_systemмодуль типа развертыванияPERSISTENT_2:

      resource "aws_fsx_lustre_file_system" "storage" {
  storage_capacity = 1200
  subnet_ids       = [var.subnet_id]
  deployment_type  = "PERSISTENT_2"
  per_unit_storage_throughput = 250
}

Fsx запускается только на чистом диске (просматривается через консоль управления AWS).

Какую дополнительную информацию я могу опубликовать здесь, чтобы помочь отладить, почему этот код Terraform не соблюдает deployment_typeпараметр?

Полный код:

      // ==========================================================
//   Module input variables
// ---------------------------------------------------------- 
variable "region" {
  type = string
}

variable "compute_environment_name" {
  type = string
}

variable "job_queue_name" {
  type = string
}

variable "max_vcpus" {
  type = number
}

variable "vpc_id" {
  type = string
}

variable "subnet_id" {
  type = string
}

variable "security_group_id" {
  type = string
}

variable "mounted_storage_bucket" {
  type = string
}

// ==========================================================
//   Components for batch processing for AWS Batch
// ---------------------------------------------------------- 
resource "aws_iam_role" "batch_role" {
  name = "batch_role"
  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement":
    [
      {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": "batch.amazonaws.com"
          }
      },
      {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          }
      },
      {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": "ecs.amazonaws.com"
          }
      },
      {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": "ecs-tasks.amazonaws.com"
          }
      }
    ]
}
EOF
tags = {
    created-by = "Terraform"
  }
}

# Attach the Batch policy to the Batch role
resource "aws_iam_role_policy_attachment" "batch_service_role" {
  role = aws_iam_role.batch_role.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole"
}

resource "aws_iam_role_policy_attachment" "elastic_container_service_role" {
  role = aws_iam_role.batch_role.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
}

# Security Group for batch processing
resource "aws_security_group" "batch_security_group" {
  name = "batch_security_group"
  description = "AWS Batch Security Group for batch jobs"
  vpc_id = var.vpc_id
egress {
    from_port   = 0
    to_port = 65535
    protocol = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
tags = {
    created-by = "Terraform"
  }
}

# IAM Role for underlying EC2 instances
resource "aws_iam_role" "ec2_role" {
  name = "ec2_role"
assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
tags = {
    created-by = "Terraform"
  }
}

# Assign the EC2 role to the EC2 profile
resource "aws_iam_instance_profile" "ec2_profile" {
  name = "ec2_profile"
  role = aws_iam_role.ec2_role.name
}

# Attach the EC2 container service policy to the EC2 role
resource "aws_iam_role_policy_attachment" "ec2_policy_attachment" {
  role = aws_iam_role.ec2_role.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
}

# IAM Role for jobs
resource "aws_iam_role" "job_role" {
  name = "job_role"
  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement":
    [
      {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": "ecs-tasks.amazonaws.com"
          }
      }
    ]
}
EOF
tags = {
    created-by = "Terraform"
  }
}

# S3 read/write policy
resource "aws_iam_policy" "s3_policy" {
  name   = "s3_policy"
  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:List*",
            "s3:Put*"
        ],
        "Resource": [
          "arn:aws:s3:::${var.mounted_storage_bucket}",
          "arn:aws:s3:::${var.mounted_storage_bucket}/*"
        ]
    }
  ]
}
EOF
}


resource "aws_iam_policy" "ecs_policy" {
  name   = "ecs_policy"
  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "ecs:*"
        ],
        "Resource": [
          "*"
        ]
      }
  ]
}
EOF
}

# Attach the policy to the job role
resource "aws_iam_role_policy_attachment" "job_policy_attachment_s3" {
  role = aws_iam_role.job_role.name
  policy_arn = aws_iam_policy.s3_policy.arn
}

resource "aws_iam_role_policy_attachment" "job_policy_attachment_ecs" {
  role = aws_iam_role.job_role.name
  policy_arn = aws_iam_policy.ecs_policy.arn
}

resource "aws_fsx_lustre_file_system" "storage" {
  storage_capacity = 1200
  subnet_ids       = [var.subnet_id]
  deployment_type  = "PERSISTENT_2"
  per_unit_storage_throughput = 250
}

resource "aws_fsx_data_repository_association" "storage_association" {
  file_system_id       = aws_fsx_lustre_file_system.storage.id
  data_repository_path = "s3://${var.mounted_storage_bucket}"
  file_system_path     = "/data/fsx"

  s3 {
    auto_export_policy {
      events = ["NEW", "CHANGED", "DELETED"]
    }

    auto_import_policy {
      events = ["NEW", "CHANGED", "DELETED"]
    }
  }
}


resource "aws_launch_template" "launch_template" {
  name = "launch_template"
  update_default_version = true


  user_data = base64encode(<<EOF
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

runcmd:
- region=${var.region}
- amazon-linux-extras install -y lustre2.10
- mkdir -p /data/fsx
- mount -t lustre ${aws_fsx_lustre_file_system.storage.dns_name}@tcp:fsx" /data/fsx

--==MYBOUNDARY==--
EOF
)
}

// ==========================================================
//   Batch setup
//    - compute environment
//    - job queue
// ----------------------------------------------------------
resource "aws_iam_role" "ecs_instance_role" {
  name = "ecs_instance_role"

  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": "ec2.amazonaws.com"
        }
    }
    ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "ecs_instance_role" {
  role       = "${aws_iam_role.ecs_instance_role.name}"
  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
}

resource "aws_iam_instance_profile" "ecs_instance_role" {
  name = "ecs_instance_role"
  role = "${aws_iam_role.ecs_instance_role.name}"
}

resource "aws_iam_role" "aws_batch_service_role" {
  name = "aws_batch_service_role"

  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": "batch.amazonaws.com"
        }
    }
    ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "aws_batch_service_role" {
  role       = "${aws_iam_role.aws_batch_service_role.name}"
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole"
}

resource "aws_batch_compute_environment" "batch_environment" {
  compute_environment_name = var.compute_environment_name

  compute_resources {
    instance_role = "${aws_iam_instance_profile.ecs_instance_role.arn}"

    launch_template {
      launch_template_name = aws_launch_template.launch_template.name
      version = "$Latest"
    }

    instance_type = [
      "c6g.large",
      "c6g.xlarge",
      "c6g.2xlarge",
      "c6g.4xlarge",
      "c6g.8xlarge",
      "c6g.12xlarge"
    ]

    max_vcpus = 16
    min_vcpus = 0

    security_group_ids = [
      aws_security_group.batch_security_group.id,
    ]

    subnets = [
      var.subnet_id
    ]

    type = "EC2"
  }

  service_role = "${aws_iam_role.aws_batch_service_role.arn}"
  type         = "MANAGED"
  depends_on   = [aws_iam_role_policy_attachment.aws_batch_service_role]
  tags = {
    created-by = "Terraform"
  }
}

resource "aws_batch_job_queue" "job_queue" {
  name = "job_queue"
  state = "ENABLED"
  priority = 1
  compute_environments = [
    aws_batch_compute_environment.batch_environment.arn
  ]
  depends_on = [aws_batch_compute_environment.batch_environment]
tags = {
    created-by = "Terraform"
  }
}

output "batch_compute_environment_id" {
    value = aws_batch_compute_environment.batch_environment.id
}

output "batch_job_queue_id" {
    value = aws_batch_job_queue.job_queue.id
}

output "batch_storage_mount_target" {
    value = aws_fsx_lustre_file_system.storage.arn
}

output "batch_storage_mount_target_mount" {
    value = aws_fsx_lustre_file_system.storage.mount_name
}

0 ответов

Другие вопросы по тегам