Ir para o conteúdo

Como soluciono problemas das Operações em Lote do Amazon S3?

8 minuto de leitura
0

Quando eu crio um trabalho das Operações em Lote do Amazon Simple Storage Service (Amazon S3) para objetos em um bucket, o Amazon S3 retorna um erro. Ou então, o trabalho de Operações em Lote do Amazon S3 falhará.

Resolução

Para monitorar falhas na tarefa, solicite os detalhes da tarefa ou um relatório de conclusão. Depois de determinar a causa e resolver o problema, reenvie a tarefa de Operações em Lote do S3.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

O formato do arquivo de manifesto .csv ou .json está incorreto

As Operações em Lote do S3 oferecem suporte a arquivos de manifesto de inventário .csv e .json. Se você não formatar corretamente o arquivo de manifesto, deverá criar uma nova tarefa em lote no Amazon S3 e especificar o formato correto.

Ao especificar o manifesto, execute as seguintes ações:

  • Para o relatório de inventário do Amazon S3, use um relatório no formato .csv e especifique o arquivo manifest.json associado ao relatório de inventário.
  • Para arquivos .csv, inclua o nome do bucket e a chave do objeto em cada linha do arquivo de manifesto. Também é possível incluir a versão do objeto. Se você incluir IDs de versão no manifesto, será preciso especificar os IDs de todos os objetos.
    Observação: você deve codificar chaves de objeto por URL.
  • Se os objetos estiverem em um bucket versionado, você deverá especificar os IDs de versão dos objetos. Caso contrário, o trabalho em lote falhará. Ou o Amazon S3 pode aplicar o trabalho em lote à versão incorreta do objeto.

O arquivo de manifesto especifica vários nomes de bucket ou contém várias linhas de cabeçalho

Se todos os objetos que o arquivo de manifesto lista não existirem no mesmo bucket, você receberá a seguinte mensagem de erro:

“Reasons for failure: Cannot have more than 1 bucket per Job. JOB_ID”

Certifique-se de que seu arquivo de manifesto especifique somente um nome de bucket e não contenha nenhuma linha de cabeçalho.

Exemplo de arquivo de manifesto que contém várias linhas de cabeçalho:

bucket,keymy-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

O perfil do IAM não tem permissões para ler o arquivo de manifesto

Se o perfil do AWS Identity and Access Management (AWS IAM) não tiver permissão para ler o manifesto, você receberá um dos seguintes erros:

“Reason for failure Reading the manifest is forbidden: AccessDenied” da AWS CLI.

-or-

“Warning: Unable to get the manifest object's ETag. Specify a different object to continue” no console do Amazon S3.

O perfil do IAM que cria o trabalho das Operações em Lote do S3 deve ter permissão de leitura GetObject sobre o arquivo de manifesto. Verifique os metadados do objeto em busca de incompatibilidade de acesso com a Propriedade do Objeto do S3. Além disso, verifique se há chaves incompatíveis do AWS Key Management Service (AWS KMS) que criptografem o arquivo de manifesto.

Observação: as Operações em Lote do S3 oferecem suporte a relatórios de inventário .csv criptografados pelo AWS KMS. As Operações em Lote do S3 não oferecem suporte a arquivos de manifesto .csv criptografados pelo AWS KMS. Para mais informações, consulte Configurar um inventário usando o console do Amazon S3.

O trabalho em lotes está em uma região diferente

Os trabalhos de cópia das Operações em Lote do S3 devem estar na mesma região da AWS do bucket de destino. Por exemplo, se o bucket de destino estiver na região us-west-2, selecione us-west-2 como a região ao criar o trabalho em lote.

O bucket de destino do relatório de inventário do S3 está ausente

Deve haver um bucket de destino para o manifesto gerado pelas Operações em Lote do S3. A política de bucket do Amazon S3 também deve permitir a ação s3:PutObject. Se o trabalho enviar o relatório para outra conta da AWS, confirme se o bucket de destino permite que o perfil do IAM execute a ação s3:PutObject.

A política de confiança do perfil do IAM está ausente

A política de confiança do perfil do IAM define as condições necessárias para que outras entidades principais assumam o perfil. Para permitir que a entidade principal das Operações em Lote do S3 assuma o perfil do IAM, anexe uma política de confiança ao perfil.

Exemplo de política:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "batchoperations.s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Observação: certifique-se de especificar um perfil do IAM e não um usuário do IAM.

O perfil do IAM não tem as permissões para criar um trabalho em lote

Para criar uma tarefa das Operações em Lote do S3, conceda ao perfil do IAM a permissão s3:CreateJob. A entidade que cria a tarefa também precisa ter a permissão iam:PassRole para transmitir o perfil do IAM especificado para a tarefa em lote. Para mais informações, consulte Elementos de política JSON do IAM: Resource.

O perfil do IAM não tem as permissões para executar operações de trabalho em lote

Certifique-se de conceder ao perfil do IAM as permissões corretas para realizar operações específicas em um trabalho em lote.

Exemplo de política do IAM com as permissões necessárias para a operação de cópia:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::{{SourceBucket}}",
                "arn:aws:s3:::{{SourceBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::{{ManifestBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{{ReportBucket}}/*"
            ]
        }
    ]
}

A SCP da AWS Organizations nega acesso

Se você usa a Organizations, confirme se não há instruções Deny na política de controle de serviços (SCP) que neguem o acesso ao Amazon S3. Caso contrário, é possível receber um erro de Acesso negado ao criar um trabalho em lote.

Exemplo de SCP que nega explicitamente todas as ações do S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Para aplicar uma política restritiva, adicione o perfil do IAM assumido pelas Operações em Lote do S3 à lista de permissões.

Exemplo de política restritiva:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AROAEXAMPLEID:*",
                        "AIDAEXAMPLEID",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}

O ID de versão de um objeto está ausente no manifesto

Se uma tarefa de Operações em Lote do S3 encontrar um objeto no manifesto que tenha um campo de ID de versão vazio, você receberá o seguinte erro:

"Error: BUCKET_NAME,prefix/file_name,failed,400,InvalidRequest,Task failed due to missing VersionId"

Se o formato do manifesto usar IDs de versão durante a operação, o campo ID da versão não poderá ser uma string vazia. Em vez disso, o campo ID de versão deve ser uma string nula. Para resolver esse problema, converta os IDs de versão vazios em strings nulas.

Observação: as Operações em Lote do S3 falham somente para o objeto especificado, não para a tarefa inteira.

O Amazon S3 não entrega o relatório do trabalho porque você usa a retenção de Bloqueio de Objetos

Se você configurar a retenção do Bloqueio de Objetos do S3 em um bucket de destino no modo de governança ou no modo de conformidade, receberá o seguinte erro:

"Error: Reasons for failure. The job report could not be written to your bucket. Check your permissions.”

O Amazon S3 não oferece suporte ao bloqueio de objetos para buckets de destino com configurações de modo de retenção. Quando o modo de retenção é configurado, o bucket é protegido por gravação única e várias leituras (WORM). Para resolver esse problema, escolha um bucket de destino que não tenha retenção de Bloqueio de Objeto.

Observação: somente o relatório de conclusão falha, não o trabalho. O trabalho é concluído com êxito e todos os objetos são processados.

As versões de ETag não coincidem

Se o valor de ETag no console do Amazon S3 ou na AWS CLI não corresponder à ETag no bucket, você receberá o seguinte erro:

"Error reading the manifest. Caused by: ETag mismatch. Expected ETag: 69f52a4e9f797e987155d9c8f5880897”

Ao selecionar o manifesto na tarefa de Operações em Lote do S3, é possível especificar a chave do objeto do manifesto, a ETag e o ID de versão opcional. Certifique-se de que o valor da ETag corresponda à ETag da versão mais recente do objeto do manifesto no bucket do S3. Na guia Operações em lote do console do Amazon S3, verifique a ETag do objeto do manifesto nas propriedades do arquivo de manifesto. Na AWS CLI, verifique o valor da ETag transmitido pela especificação do manifesto.

Observação: se você criar uma tarefa de Operações em Lote do S3 como um clone de uma tarefa existente, atualize a ETag no manifesto clonado.

Erros HTTP 500 e 503

Se o Amazon S3 não conseguir processar a solicitação, você receberá um código de status 500 Internal Error. Se o número de solicitações para seu bucket do S3 for alto, você receberá o código de status 503 Slow Down. Para solucionar esses problemas, consulte Como solucionar um erro HTTP 500 ou 503 do Amazon S3?

Observação: é uma prática recomendada criar uma lógica de nova tentativa em aplicações que fazem solicitações ao Amazon S3.

AWS OFICIALAtualizada há 4 meses