As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tutorial: usando o índice de trabalho de matriz para controle de diferenciação de trabalhos
Este tutorial descreve instruções de uso da variável de ambiente AWS_BATCH_JOB_ARRAY_INDEX
para diferenciar os trabalhos filho. Cada trabalho filho é atribuído a essa variável. O exemplo utiliza o número de índice do trabalho filho para ler uma linha específica em um arquivo. Em seguida, ele substitui o parâmetro associado a esse número de linha por um comando dentro do contêiner do trabalho. O resultado é que você pode ter vários AWS Batch trabalhos que executam a mesma imagem do Docker e argumentos de comando. No entanto, os resultados serão diferentes porque o índice de trabalho da matriz é usado como um modificador.
Neste tutorial, um arquivo de texto é criado com todas as cores do arco-íris, cada uma em sua própria linha. Em seguida, você cria um script de ponto de entrada para um contêiner do Docker que converte o índice em um valor, que pode ser usado para um número de linha no campo do arquivo de cores. O índice inicia em zero, mas os números da linha iniciam em um. Crie um Dockerfile que copie os arquivos de cores e índice na imagem de contêiner, e defina o ENTRYPOINT
da imagem como o script de ponto de entrada. O Dockerfile e os recursos são criados em uma imagem do Docker que é enviada para a Amazon. ECR Em seguida, você registra uma definição de tarefa que usa sua nova imagem de contêiner, envia uma tarefa de AWS Batch matriz com essa definição de tarefa e visualiza os resultados.
Pré-requisitos
Este tutorial tem os seguintes pré-requisitos:
-
Um ambiente AWS Batch computacional. Para obter mais informações, consulte Criação de um ambiente de computação.
-
Uma fila AWS Batch de trabalhos e um ambiente computacional associado. Para obter mais informações, consulte Como criar uma fila de tarefas.
-
O AWS CLI instalado em seu sistema local. Para obter mais informações, consulte Instalando AWS Command Line Interface no AWS Command Line Interface Manual do Usuário.
-
Docker instalado em seu sistema local. Para obter mais informações, consulte Sobre o Docker CE
no campo de documentação do Docker.
Etapa 1: criar uma imagem de contêiner
Você pode usar o AWS_BATCH_JOB_ARRAY_INDEX
em uma definição de trabalho no parâmetro de comando. No entanto, recomendamos criar uma imagem de contêiner que use a variável em um script de ponto de entrada. Esta seção descreve instruções para criação essa imagem de contêiner.
Para criar sua imagem de contêiner do Docker
-
Crie novo diretório, a ser usado como seu workspace de imagem do Docker, e navegue até ele.
-
Crie um arquivo de nome
colors.txt
em seu diretório do workspace e cole o conteúdo a seguir.red orange yellow green blue indigo violet
-
Crie um arquivo de nome
print-color.sh
em seu diretório do workspace e cole o conteúdo a seguir.nota
A variável
LINE
é definida comoAWS_BATCH_JOB_ARRAY_INDEX
+1, pois o índice de matriz inicia em 0, mas os números de linha iniciam em com 1. A variávelCOLOR
é definida como a cor nocolors.txt
associado ao número de linha.#!/bin/sh LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) COLOR=$(sed -n ${LINE}p /tmp/colors.txt) echo My favorite color of the rainbow is $COLOR.
-
Crie um arquivo de nome
Dockerfile
em seu diretório do workspace e cole nele o conteúdo a seguir. Esse Dockerfile copia os arquivos anteriores em seu contêiner e define o script de ponto de entrada a ser executado quando o contêiner for iniciado.FROM busybox COPY print-color.sh /tmp/print-color.sh COPY colors.txt /tmp/colors.txt RUN chmod +x /tmp/print-color.sh ENTRYPOINT /tmp/print-color.sh
-
Compile sua imagem do Docker.
$
docker build -t print-color .
-
Teste seu contêiner com o script a seguir. Esse script define a variável
AWS_BATCH_JOB_ARRAY_INDEX
como 0 localmente e, em seguida, a acrescenta, para simular o que um trabalho de matriz com sete filhos faz.$
AWS_BATCH_JOB_ARRAY_INDEX=0 while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ] do docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) done
A saída vem a seguir.
My favorite color of the rainbow is red. My favorite color of the rainbow is orange. My favorite color of the rainbow is yellow. My favorite color of the rainbow is green. My favorite color of the rainbow is blue. My favorite color of the rainbow is indigo. My favorite color of the rainbow is violet.
Etapa 2: envie sua imagem para a Amazon ECR
Agora que você criou e testou o contêiner do Docker, envie-o para um repositório de imagens. Este exemplo usa a AmazonECR, mas você pode usar outro registro, como DockerHub.
-
Crie um repositório de ECR imagens da Amazon para armazenar sua imagem de contêiner. Este exemplo usa somente AWS CLI o. mas você também pode usar AWS Management Console o. Para obter mais informações, consulte Criando um Repositório no campo do Manual do Usuário do Amazon Elastic Container Registry.
$
aws ecr create-repository --repository-name print-color
-
Marque sua
print-color
imagem com seu ECR repositório da Amazon URI que foi retornado da etapa anterior.$
docker tag print-color
aws_account_id
.dkr.ecr.region
.amazonaws.com/print-color -
Faça login no seu ECR registro da Amazon. Para obter mais informações, consulte Autenticação de Registro no campo do Manual do Usuário do Amazon Elastic Container Registry.
$
aws ecr get-login-password \ --region
region
| docker login \ --username AWS \ --password-stdinaws_account_id
.dkr.ecr.region
.amazonaws.com -
Envie sua imagem para a AmazonECR.
$
docker push
aws_account_id
.dkr.ecr.region
.amazonaws.com/print-color
Etapa 3: criar e registrar uma definição de trabalho
Agora que sua imagem do Docker está em um registro de imagem, você pode especificá-la em uma definição de AWS Batch tarefa. Assim, você pode usá-la posteriormente para executar um trabalho de matriz. Este exemplo usa apenas o AWS CLI. No entanto, você também pode usar o AWS Management Console. Para obter mais informações, consulte Como criar uma definição de tarefa de nó único .
Para criar uma definição de trabalho
-
Crie um arquivo de nome
print-color-job-def.json
em seu diretório do workspace e cole o conteúdo a seguir. Substitua o repositório URI de imagens pelas suas próprias imagens. URI{ "jobDefinitionName": "print-color", "type": "container", "containerProperties": { "image": "
aws_account_id
.dkr.ecr.region
.amazonaws.com/print-color", "resourceRequirements": [ { "type": "MEMORY", "value": "250" }, { "type": "VCPU", "value": "1" } ] } } -
Registre a definição do trabalho com AWS Batch.
$
aws batch register-job-definition --cli-input-json file://print-color-job-def.json
Etapa 4: enviar um trabalho AWS Batch de matriz
Depois de registrar sua definição de tarefa, você pode enviar uma tarefa de AWS Batch matriz que usa sua nova imagem de contêiner.
Para enviar um trabalho AWS Batch de matriz
-
Crie um arquivo de nome
print-color-job.json
em seu diretório do workspace e cole o conteúdo a seguir.nota
Este exemplo usa a fila de trabalhos mencionada na seção Pré-requisitos.
{ "jobName": "print-color", "jobQueue": "
", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }existing-job-queue
-
Envie o trabalho para sua fila de AWS Batch trabalhos. Anote a ID do trabalho retornado na saída.
$
aws batch submit-job --cli-input-json file://print-color-job.json
-
Descreva o status do trabalho e espere até que o trabalho seja movido para
SUCCEEDED
.
Etapa 5: visualizar seus logs de trabalhos de matriz
Depois que seu trabalho atingir o SUCCEEDED
status, você poderá visualizar os CloudWatch registros no contêiner do trabalho.
Para ver os registros do seu trabalho em CloudWatch Registros
Abra o AWS Batch console em https://console.aws.amazon.com/batch/
. -
No painel de navegação à esquerda, escolha Trabalhos.
-
Para Fila de Trabalhos, selecione uma fila.
-
Na seção Status, escolha bem-sucedido.
-
Para exibir todas os trabalhos filho de seu trabalho matriz, selecione a ID do trabalho que foi retornado na seção anterior.
-
Para consultar os logs do contêiner do trabalho, selecione um dos trabalhos filho e escolha Visualizar Logs.
-
Visualize os outros logs de trabalho filho. Cada trabalho retorna uma cor diferente do arco-íris.