我有一个应用程序,它向AWS发出启动批处理作业的请求。作业各不相同,因此每个作业的资源需求也不同。
很清楚如何改变cpu和内存,但是我不知道如何指定根卷大小,或者如果它甚至是可能的
下面是我正在运行的代码示例:import boto3
client = boto3.client('batch')
JOB_QUEUE = "job-queue"
JOB_DEFINITION="job-definition"
container_overrides = {
'vcpus': 1,
'memory': 1024,
'command': ['echo', 'Hello World'],
# 'volume_size': 50 # this is not valid
'environment': [ # this just creates env variables
{
'name': 'volume_size',
'value': '50'
}
]
}
response = client.submit_job(
jobName="volume-size-test",
jobQueue=JOB_QUEUE,
jobDefinition=JOB_DEFINITION,
containerOverrides=container_overrides)
我的问题与此类似,但我特别问这是否可能在运行时。我可以更改启动模板,但这并不能解决在发出请求时能够指定所需资源的问题。除非解决方案是创建多个启动模板,然后在运行时选择它,尽管这似乎不必要地复杂
您可以使用AWS弹性文件系统。EFS卷可以挂载到为作业定义创建的容器中。EFS不需要您提供特定的卷大小,因为它会根据使用情况自动增大和缩小。
您需要通过efsVolumeConfiguration属性在作业定义中指定一个Amazon EFS文件系统
{
"containerProperties": [
{
"image": "amazonlinux:2",
"command": [
"ls",
"-la",
"/mount/efs"
],
"mountPoints": [
{
"sourceVolume": "myEfsVolume",
"containerPath": "/mount/efs",
"readOnly": true
}
],
"volumes": [
{
"name": "myEfsVolume",
"efsVolumeConfiguration": {
"fileSystemId": "fs-12345678",
"rootDirectory": "/path/to/my/data",
"transitEncryption": "ENABLED",
"transitEncryptionPort": integer,
"authorizationConfig": {
"accessPointId": "fsap-1234567890abcdef1",
"iam": "ENABLED"
}
}
}
]
}
]
}
参考:https://docs.aws.amazon.com/batch/latest/userguide/efs-volumes.html