Los ejemplos de definiciones de trabajo a continuación ilustran cómo utilizar patrones comunes como, por ejemplo, variables de entorno, sustituciones de parámetros y montajes de volúmenes.
Utilización de variables de entorno
En el siguiente ejemplo, la definición de trabajo utiliza variables de entorno para especificar un tipo de archivo y un URL de Amazon S3. El script fetch_and_run.sh
que se describe en el artículo utiliza estas variables de entorno para descargar el script myjob.sh
de S3 y declarar su tipo de archivo.
Si bien en este ejemplo el comando y las variables de entorno están codificadas de forma rígida en la definición de trabajo, es posible enviar un trabajo con esta definición y especificar sustituciones de comandos y de variables de entorno para que la definición de trabajo más versátil.
{
"jobDefinitionName": "fetch_and_run",
"type": "container",
"containerProperties": {
"image": "012345678910.dkr.ecr.us-east-1.amazonaws.com/fetch_and_run",
"vcpus": 2,
"memory": 2000,
"command": [
"myjob.sh",
"60"
],
"jobRoleArn": "arn:aws:iam::012345678910:role/AWSBatchS3ReadOnly",
"environment": [
{
"name": "BATCH_FILE_S3_URL",
"value": "s3://my-batch-scripts/myjob.sh"
},
{
"name": "BATCH_FILE_TYPE",
"value": "script"
}
],
"user": "nobody"
}
}
Cómo usar la sustitución de parámetros
El siguiente ejemplo de definición de trabajo ilustra cómo permitir la sustitución de parámetros y cómo establecer valores predeterminados.
Las declaraciones Ref::
de la sección command
se utilizan para definir marcadores de posición para sustituir parámetros. Al enviar un trabajo con esta definición de trabajo, se especifican las sustituciones de parámetros que ocuparán dichos valores, como inputfile
y outputfile
. La sección parameters
a continuación establece un valor predeterminado para codec
, pero es posible invalidar ese parámetro si fuera necesario.
{
"jobDefinitionName": "ffmpeg_parameters",
"type": "container",
"containerProperties": {
"image": "my_repo/ffmpeg",
"vcpus": 2,
"memory": 2000,
"command": [
"ffmpeg",
"-i",
"Ref::inputfile",
"-c",
"Ref::codec",
"-o",
"Ref::outputfile"
],
"jobRoleArn": "arn:aws:iam::012345678910:role/ECSTask-S3FullAccess",
"parameters": {"codec": "mp4"},
"user": "nobody"
}
}
Funcionalidad de GPU de prueba
En el siguiente ejemplo, la definición de trabajo prueba si la AMI de carga de trabajo de GPU que se ha configurado correctamente. Las secciones volumes
y mountPoints
deben configurarse para crear un volumen de Docker que monte a ruta de host /var/lib/nvidia-docker/volumes/nvidia_driver/latest
en /usr/local/nvidia
en el contenedor. El contenedor debe tener privilegios de acceso al hardware de GPU.
{
"containerProperties": {
"mountPoints": [{
"sourceVolume": "nvidia",
"readOnly": false,
"containerPath": "/usr/local/nvidia"
}],
"image": "nvidia/cuda:9.0-cudnn7-devel",
"vcpus": 2,
"command": ["nvidia-smi"],
"volumes": [{
"host": {"sourcePath": "/var/lib/nvidia-docker/volumes/nvidia_driver/latest"},
"name": "nvidia"
}],
"memory": 2000,
"privileged": true,
"ulimits": []
},
"type": "container",
"jobDefinitionName": "nvidia-smi"
}
Es posible crear un archivo con el texto JSON indicado arriba, que se denomine nvidia-smi.json
y, a continuación, registrar una definición de trabajo de AWS Batch con el siguiente comando:
aws batch register-job-definition --cli-input-json file://nvidia-smi.json
La imagen a continuación muestra cómo se verían el volumen y los puntos de montaje en la Consola de administración de AWS.
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.