Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

332
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!