如何使用aws_cloudwatch_event_target覆盖resourceRequirements?

0

【以下的问题经过翻译处理】 我在Terraform中定义了一个AWS Batch作业,并在AWS中正常运行。我使用cronExpression()创建了几个覆盖规则,以便在特定时间调用作业。我正在使用aws_cloudwatch_event_targetaws_cloudwatch_event_rule。大部分功能都正常工作。我使用正确的名称、arn等触发规则,即使是正确的命令。我的TF代码如下:

resource "aws_cloudwatch_event_rule" "batchjob" {
  name       = "foo"
  is_enabled = true
  # runs on the first of every month at 15:00 UTC 
  # https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html
  schedule_expression = "cron(0 15 1 * ? *)"
}

resource "aws_cloudwatch_event_target" "batchjob_target" {
  rule     = "foo"
  arn      = "<queue arn>"
  role_arn = "<role arn>"
  input = jsonencode({
    # https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerOverrides.html
    "ContainerOverrides" : {
      "Command" : [
        "/bin/java",
        "-jar",
        "/batch-jobs.jar",
        "foobar"
      ],
      # VCPU and MEMORY are linked: https://docs.aws.amazon.com/batch/latest/APIReference/API_ResourceRequirement.html
      # https://repost.aws/questions/QUP1kkGbDrT1uC4jTW6DXZ4A/set-cpu-and-memory-requirements-for-a-fargate-aws-batch-job-from-an-aws-cloudwatch-event
      "ResourceRequirements" : [
        {
          "Type"  = "VCPU"
          "Value" = "4"
        },
        {
          "Type"  = "MEMORY"
          "Value" = "8192"
        }
      ]
    }
    }
  )
}
batch_target {
  job_name       = "foo"
  job_definition = aws_batch_job_definition.job_definition.arn
}

我已确认“ContainerOverrides”和“Command”必须是pascal大小写才能正常工作。如果使用camel大小写,则看不到这些覆盖选项。

profile picture
EXPERTE
gefragt vor 5 Monaten48 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 嗨Eric,感谢您联系我们!

经过调查,我确认了在将Batch Job配置为EventBridge规则目标时,ContainerOverrides下的ResourceRequirement参数将不被处理。Command下的参数将被接受,但是ResourceRequirements不会从EventBridge Target传递到Batch Job。此外我还可以确认,有一个功能请求可以支持这个需求,但我无法提供何时可用的具体时间。

不过,我可以建议您使用一个比较新的EventBridge Scheduler功能(https://docs.aws.amazon.com/eventbridge/latest/userguide/scheduler.html)而不是使用cron表达式的EventBridge规则来完成您的用例。此功能TerraForm是支持的,将允许您按计划直接调用Batch SubmitJob调用并传递所有要传递的参数,包括带有ResourceRequirement字段的Container Override参数。

我在控制台中使用Scheduler调度测试了这个功能,VCPU和内存ResourceRequirements,并传递了以下JSON进行API调用:

{ "JobDefinition":"arn:aws:batch:us-west-1:123456789012:<definition>", "JobName":"MyData", "JobQueue":"arn:aws:batch:us-west-1:123456789012:<queue>", "ContainerOverrides":{ "ResourceRequirements":[ { "Type":"VCPU", "Value":"4" }, { "Type":"MEMORY", "Value":"8192" } ] } }

可以看到,在ContainerOverride字段中指定的VCPU和MEMORY的情况下,作业可以成功启动。

我希望这些信息有所帮助!

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt