Glue_version и python_version не работают в terraform - PullRequest
0 голосов
/ 01 октября 2019

Привет всем, я использую terraform, чтобы создать работу клея. Теперь AWS Glue теперь поддерживает возможность запуска заданий ETL в Apache Spark 2.4.3 (с Python 3). Я хочу использовать эту функцию. но всякий раз, когда я делаю изменения, это ошибка. Я использую aws-cli / 1.16.184. Terraform v0.12.6 aws провайдер 2.29

resource "aws_glue_job" "aws_glue_job_foo" {
glue_version = "1"
name = "job-name"
description = "job-desc"
role_arn = data.aws_iam_role.aws_glue_iam_role.arn
max_capacity = 1
max_retries = 1
connections = [aws_glue_connection.connection.name]
timeout = 5

command {
name = "pythonshell"
script_location = "s3://bucket/script.py"
python_version = "3"
}

default_arguments = {
"--job-language" = "python"
"--ENV" = "env"
"--ROLE_ARN" = data.aws_iam_role.aws_glue_iam_role.arn
}

execution_property {
max_concurrent_runs = 1
}
}

Но он выдает ошибку,

Ошибка: неподдерживаемый аргумент Аргумент с именем "glue_version" здесь не ожидается.

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Эта проблема Terraform была решена .

Terraform aws_glue_job теперь принимает аргумент glue_version .

Предыдущий ответ

С или без python_version в Terraform commandБлок, я должен перейти на консоль AWS, чтобы отредактировать работу и установить «Версия клея». Моя работа не выполняется без этого шага вручную.

Обходной путь # 1

Эта проблема была сообщена и обсуждена , а включает обходной путь .

resource "aws_glue_job" "etl" {
  name     = "${var.job_name}"
  role_arn = "${var.iam_role_arn}"

  command {
    script_location = "s3://${var.bucket_name}/${aws_s3_bucket_object.script.key}"
  }

  default_arguments = {
    "--enable-metrics" = ""
    "--job-language" = "python"
    "--TempDir" = "s3://${var.bucket_name}/TEMP"
  }

  # Manually set python 3 and glue 1.0
  provisioner "local-exec" {
    command = "aws glue update-job --job-name ${var.job_name} --job-update 'Command={ScriptLocation=s3://${var.bucket_name}/${aws_s3_bucket_object.script.key},PythonVersion=3,Name=glueetl},GlueVersion=1.0,Role=${var.iam_role_arn},DefaultArguments={--enable-metrics=\"\",--job-language=python,--TempDir=\"s3://${var.bucket_name}/TEMP\"}'"
  }
}

Обходной путь # 2

Вот другой обходной путь .

resource "aws_cloudformation_stack" "network" {
  name = "${local.name}-glue-job"

  template_body = <<STACK
{
  "Resources" : {
    "MyJob": {
      "Type": "AWS::Glue::Job",
      "Properties": {
        "Command": {
          "Name": "glueetl",
          "ScriptLocation": "s3://${local.bucket_name}/jobs/${var.job}"
        },
        "ExecutionProperty": {
         "MaxConcurrentRuns": 2
        },
        "MaxRetries": 0,
        "Name": "${local.name}",
        "Role": "${var.role}"
      }
    }
  }
}
STACK
}
0 голосов
/ 02 октября 2019

Похоже, что Terraform использует python_version вместо glue_version

Используя python_version = "3", вы должны использовать клей версии 1.0. Версия 0.9 Glue не поддерживает Python 3.

...