#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
}