You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Batch:如何激活被标记为Inactive的旧JobDefinition版本?

解决方案:AWS Batch旧版本JobDefinition提交任务报错(Inactive状态)

问题原因

AWS Batch在创建同名JobDefinition的新版本时,会自动将旧版本标记为INACTIVE,而只有ACTIVE状态的JobDefinition才能用于提交任务,这就是报错的核心原因。

可行解决方案

方案1:为每个应用版本创建独立的JobDefinition(推荐)

修改Terraform配置,让JobDefinition的名称包含应用版本号,这样每个版本都是独立的ACTIVE资源,不会互相覆盖或被标记为inactive:

resource "aws_batch_job_definition" "test" {
  # 名称包含版本号,确保每个应用版本对应独立的JobDefinition
  name = "sample-${local.version}"
  type = "container"

  platform_capabilities = [
    "FARGATE",
  ]

  container_properties = jsonencode({
    command    = ["echo", "test"]
    image      = "${var.ecr_url_primary}:${local.version}-sample"
    jobRoleArn = aws_iam_role.job_task_role.arn

    fargatePlatformConfiguration = {
      platformVersion = "LATEST"
    }

    resourceRequirements = [
      {
        type  = "VCPU"
        value = "1"
      },
      {
        type  = "MEMORY"
        value = "3072"
      }
    ]
    executionRoleArn = aws_iam_role.execution_role.arn
    environment = [
      {
        name = "SPRING_PROFILES_ACTIVE"
        value = "${tostring(var.env)}"
      }
    ]
  })
  provider = "aws"
}

提交任务时,直接使用包含版本号的JobDefinition名称(无需加revision,因为每个都是独立的v1版本):

// 假设appVersion是你的应用版本号,比如"v1.0.0"
String jobDefName = "sample-" + appVersion;
SubmitJobRequest submitJobRequest =
    SubmitJobRequest.builder()
        .jobName("sample")
        .jobQueue("sample")
        .jobDefinition(jobDefName)
        .containerOverrides(
            ContainerOverrides.builder()
                .command(
                    "java",
                    "-cp",
                    "app.jar",
                    "-Dspring.main.web-application-type=none",
                    "-Dloader.main=com.BatchJob",
                    "org.springframework.boot.loader.PropertiesLauncher")
                .build())
        .build();

SubmitJobResponse submitJobResponse = batchClient.submitJob(submitJobRequest);

方案2:手动激活旧版本JobDefinition(临时应急)

如果必须使用旧的revision,可以在提交任务前调用AWS Batch API将其设为ACTIVE状态。Java SDK示例代码:

// 构造激活旧版本的请求
UpdateJobDefinitionRequest updateRequest = UpdateJobDefinitionRequest.builder()
    .jobDefinition("arn:aws:batch:eu-west-1:123456789123:job-definition/sample:57")
    .status("ACTIVE")
    .build();

// 执行更新操作激活旧版本
batchClient.updateJobDefinition(updateRequest);

// 激活后再提交任务
SubmitJobResponse submitJobResponse = batchClient.submitJob(submitJobRequest);

注意:这种方法仅适合临时应急,每次部署新版本后旧版本仍会被标记为INACTIVE,需要重复执行激活操作,不适合长期生产环境使用。


内容的提问来源于stack exchange,提问作者Zahid Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:23:21