要求:考虑到对能够处理持续超过 15 分钟的任务的计算资源的要求,我们确定 AWS Batch 是最佳解决方案。
问题:我们支持应用程序的版本控制。但是,AWS Batch 不支持 AWS Lambda 等版本控制。不过,它会在每次部署后创建一个新的
JobDefinition
以及新的增量 revision
。
示例:
这里,
revision = 58
。
但是,它会将
revision
中的前一个 JobDefinition
标记为 inactive
,并且可以自动删除。
喜欢:
当我们尝试使用 aws sdk 提交
Job
到任何之前的 revision
时。
喜欢:
SubmitJobRequest submitJobRequest =
SubmitJobRequest.builder()
.jobName("sample")
.jobQueue("sample")
.jobDefinition("sample:"+ revision)
.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);
例外:
JobDefinition arn:aws:batch:eu-west-1:123456789123:job-definition/sample:57 is not in ACTIVE status. (Service: Batch, Status Code: 400, Request ID: bd6199a1-3978-458c-a84e-19de4c1acb62)
答案已读:
我已阅读 Stack Overflow 上的以下答案,但没有一个答案回答了我的问题:
任何帮助将不胜感激!
研究总结:如果您检查CloudTrail中的事件,您可以轻松找到被触发的
deregister-job-definition
事件。这会导致 job-definition
的最新修订版进入 inactive
状态,并且可以在 90 天后删除。
此外,CloudTrail Event 可以帮助您追踪来自 terraform 的问题。
修复方法是在 terraform 的
deregister_on_new_revision
资源块中显式添加 aws_batch_job_definition
,如下所示:
resource "aws_batch_job_definition" "test" {
name = "tf_test_batch_job_definition"
type = "container"
..
deregister_on_new_revision = false
}
描述:
-(可选)更新作业定义时,会创建新的修订版本。该参数决定之前的版本是注销(deregister_on_new_revision
)还是离开INACTIVE
。默认为 true。ACTIVE