From b6ff07f74ae4ded61edf752d9612dfaf88b3156a Mon Sep 17 00:00:00 2001 From: C MARSTON Date: Wed, 12 Jun 2024 14:51:24 +0100 Subject: [PATCH] feat(terraform): vol5504 add single batch job test --- infra/terraform/environments/dev/main.tf | 6 + infra/terraform/modules/service/batch.tf | 143 +++++++++++++++++++ infra/terraform/modules/service/variables.tf | 5 + 3 files changed, 154 insertions(+) create mode 100644 infra/terraform/modules/service/batch.tf diff --git a/infra/terraform/environments/dev/main.tf b/infra/terraform/environments/dev/main.tf index c30664cad7..c533436f62 100644 --- a/infra/terraform/environments/dev/main.tf +++ b/infra/terraform/environments/dev/main.tf @@ -235,3 +235,9 @@ module "service" { } } } + +module "batchjob" { + source = "../../modules/service" + + job_command = "/opt/dvsa/olcs/api/vendor/bin/laminas --container=/opt/dvsa/olcs/api/config/container-cli.php queue:process-queue" +} \ No newline at end of file diff --git a/infra/terraform/modules/service/batch.tf b/infra/terraform/modules/service/batch.tf new file mode 100644 index 0000000000..1de4bda8a5 --- /dev/null +++ b/infra/terraform/modules/service/batch.tf @@ -0,0 +1,143 @@ + +module "batch" { + source = "terraform-aws-modules/batch/aws" + + instance_iam_role_name = "${var.environment}-batch-test-ecs-instance-role" + instance_iam_role_path = "/batch/" + instance_iam_role_description = "IAM instance role/profile for AWS Batch ECS instance(s)" + instance_iam_role_tags = { + ModuleCreatedRole = "Yes" + } + + service_iam_role_name = "${var.environment}-batch-test-batch-role" + service_iam_role_path = "/batch/" + service_iam_role_description = "IAM service role for AWS Batch" + service_iam_role_tags = { + ModuleCreatedRole = "Yes" + } + + create_spot_fleet_iam_role = false + spot_fleet_iam_role_name = "${var.environment}-batch-test-spot-role" + spot_fleet_iam_role_path = "/batch/" + spot_fleet_iam_role_description = "IAM spot fleet role for AWS Batch" + spot_fleet_iam_role_tags = { + ModuleCreatedRole = "Yes" + } + + compute_environments = { + a_fargate = { + name_prefix = "batch-test-fargate" + + compute_resources = { + type = "FARGATE" + max_vcpus = 4 + + security_group_ids = ["${aws_security_group.api.id}"] + subnets = values(module.subnets_asg_api.subnet_ids_az) + + # `tags = {}` here is not applicable for spot + } + } + + b_fargate_spot = { + name_prefix = "batch-test-fargate_spot" + + compute_resources = { + type = "FARGATE_SPOT" + max_vcpus = 4 + + security_group_ids = ["${aws_security_group.api.id}"] + subnets = values(module.subnets_asg_api.subnet_ids_az) + + # `tags = {}` here is not applicable for spot + } + } + } + + # Job queus and scheduling policies + job_queues = { + low_priority = { + name = "BatchTestLowPriorityFargate" + state = "ENABLED" + priority = 1 + + tags = { + JobQueue = "Low priority job queue" + } + } + + high_priority = { + name = "BatchTestHighPriorityFargate" + state = "ENABLED" + priority = 99 + + fair_share_policy = { + compute_reservation = 1 + share_decay_seconds = 3600 + + share_distribution = [{ + share_identifier = "A1*" + weight_factor = 0.1 + }, { + share_identifier = "A2" + weight_factor = 0.2 + }] + } + + tags = { + JobQueue = "High priority job queue" + } + } + } + + job_definitions = { + example = { + name = "batch-test-job" + propagate_tags = true + platform_capabilities = ["FARGATE"] + + container_properties = jsonencode({ + command = "${var.job_command}" + image = "054614622558.dkr.ecr.eu-west-1.amazonaws.com/vol-app/cli:latest" + fargatePlatformConfiguration = { + platformVersion = "LATEST" + }, + resourceRequirements = [ + { type = "VCPU", value = "1" }, + { type = "MEMORY", value = "2048" } + ], + executionRoleArn = module.iam_assumable_role_vol_api_task_exec_role.iam_role_arn + #### CW Log group to be created later +/* logConfiguration = { + logDriver = "awslogs" + options = { + awslogs-group = local.vol_api_log_group + awslogs-region = var.region + awslogs-stream-prefix = "ecs" + } + }*/ + }) + + attempt_duration_seconds = 60 + retry_strategy = { + attempts = 3 + evaluate_on_exit = { + retry_error = { + action = "RETRY" + on_exit_code = 1 + } + exit_success = { + action = "EXIT" + on_exit_code = 0 + } + } + } + + tags = { + JobDefinition = "BatchTest" + } + } + } + +// tags = local.default_tags +} \ No newline at end of file diff --git a/infra/terraform/modules/service/variables.tf b/infra/terraform/modules/service/variables.tf index fb729bac13..3b8e2172d6 100644 --- a/infra/terraform/modules/service/variables.tf +++ b/infra/terraform/modules/service/variables.tf @@ -40,3 +40,8 @@ variable "services" { description = "The services to deploy" default = {} } + +variable "job_command" { + type = string + description = "The application command to run" +} \ No newline at end of file