Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

334
Visualizações
Agregue metadatos a S3 Object, manteniendo los metadatos y ACL existentes

Estoy buscando una manera de agregar mediante programación metadatos específicos a un conjunto de objetos S3. Recientemente actualicé el código en mi proyecto para configurar el 'Control de caché: edad máxima' y 'Caduca' al cargar objetos en S3, pero ahora estoy tratando de configurar esos valores para mis objetos S3 existentes. No quiero que cambie nada más, como la ACL o cualquier otro metadato.

Intenté usar la AWS CLI para lograr esto, pero me encontré con un par de problemas. Mi depósito tiene objetos públicos y no públicos, por lo que no puedo configurar la ACL en "lectura pública". Quiero que la ACL permanezca sin cambios, pero si no configuro nada, todos se vuelven privados. Además, quiero agregar metadatos, pero mantener intactos los metadatos existentes. Aquí está la llamada cli que había intentado:

aws s3 cp s3://my-bucket s3://my-bucket --acl public-read --recursive --metadata-directive=REPLACE --cache-control max-age=2592000 --expires 'Wed, 29 July 2020 00:00:01 GMT'

Estoy usando el SDK de PHP de AWS, pero estoy abierto a otros métodos.

Para mantener los mismos metadatos, intenté usar headObject para obtener datos de encabezado existentes... pero devuelve muchos valores. Puedo iterar sobre ellos, pero no sé cuáles necesitaría volver a configurar para mantener todo.

Para mantener la misma ACL, intenté usar getObjectAcl seguido de putObjectAcl ... pero estoy bastante seguro de que esto no funcionará en todos los casos (estoy bastante seguro de que mi lógica para establecer el valor de ACL como public-read o private no es lo suficientemente robusto para todos los casos...).

 $acl_result = $s3->getObjectAcl([ 'Bucket' => $bucket, 'Key' => $object_key ]); $grants = $acl_result->get('Grants'); $owner = $acl_result->get('Owner'); ... $public = false; foreach($grants as $grant){ if(isset($grant['Grantee']['URI']) && $grant['Grantee']['URI'] == 'http://acs.amazonaws.com/groups/global/AllUsers' && $grant['Permission'] == 'READ'){ $public = true; } } $object = [ 'Bucket' => $bucket, 'Key' => $object_key, 'ACL' => ($public ? 'public-read' : 'private'), 'AccessControlPolicy' => [ 'Owner' => $owner, 'Grants' => $grants, ], ]; $s3->putObjectAcl($object);

Cualquier ayuda es apreciada. ¡Gracias!

over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda