Terraform Параметры определения пакетного задания AWS (aws_batch_job_definition)

#terraform #terraform-provider-aws #aws-batch

#terraform #terraform-provider-aws #aws-batch

Вопрос:

Я пытаюсь понять, как выполнять замену параметров при выполнении пакетных заданий AWS. Что мне нужно сделать, так это предоставить ключ объекта S3 для моего пакетного задания AWS. Мне не удалось найти пример Terraform, в котором параметры передаются в пакетное задание, и, похоже, я не могу заставить его работать.

Документация для aws_batch_job_definition содержит следующий пример:

 resource "aws_batch_job_definition" "test" {
  name = "tf_test_batch_job_definition"
  type = "container"

  container_properties = <<CONTAINER_PROPERTIES
{
    "command": ["ls", "-la"],
    "image": "busybox",
    "memory": 1024,
    "vcpus": 1,
    "volumes": [
      {
        "host": {
          "sourcePath": "/tmp"
        },
        "name": "tmp"
      }
    ],
    "environment": [
        {"name": "VARNAME", "value": "VARVAL"}
    ],
    "mountPoints": [
        {
          "sourceVolume": "tmp",
          "containerPath": "/tmp",
          "readOnly": false
        }
    ],
    "ulimits": [
      {
        "hardLimit": 1024,
        "name": "nofile",
        "softLimit": 1024
      }
    ]
}
CONTAINER_PROPERTIES
}
 

Допустим, я хотел бы VARNAME , чтобы параметр был параметром, чтобы при запуске задания через AWS Batch API я указывал его значение. Как это достигается? Согласно документации для aws_batch_job_definition ресурса, есть параметр, который называется parameters . Однако это карта, а не список, чего я ожидал. Какие ключи и значения указаны в этой карте?

Ответ №1:

Документация Terraform по aws_batch_job_definition.parameters ссылке в настоящее время довольно скудна.

Но при выполнении aws batch describe-jobs --jobs $job_id существующего задания в AWS кажется, что объект параметров ожидает отображение:

 {
    "jobs": [
        {
            "parameters": {},
            "container": {
                "image": "",
                "command": []
            }
        }
    ]
}

 

Таким образом, вы можете использовать Terraform для определения пакетных параметров с помощью переменной map, а затем использовать синтаксис CloudFormation в определении команды пакетного ресурса, например Ref::myVariableKey , который правильно интерполируется после отправки задания AWS. Пример:

 variable "batch_params" {
  type  = map
  default = {
    bucketName = "defaultBucketName",
  }
}

resource "aws_batch_job_definition" "test" {
  name = "tf_test_batch_job_definition"
  type = "container"

  parameters = var.batch_params

  container_properties = <<CONTAINER_PROPERTIES
{
    "command": ["Ref::bucketName"],
    "image": "busybox",
    "memory": 1024,
    "vcpus": 1,
    "volumes": [
      {
        "host": {
          "sourcePath": "/tmp"
        },
        "name": "tmp"
      }
    ],
    "environment": [
        {"name": "VARNAME", "value": "VARVAL"}
    ],
    "mountPoints": [
        {
          "sourceVolume": "tmp",
          "containerPath": "/tmp",
          "readOnly": false
        }
    ],
    "ulimits": [
      {
        "hardLimit": 1024,
        "name": "nofile",
        "softLimit": 1024
      }
    ]
}
CONTAINER_PROPERTIES
}