Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

265
Vistas
¿Terraform puede duplicar el contenido de un cubo s3?

Estoy usando terraform para administrar entornos aws para nuestra aplicación. Los entornos tienen cubos s3 para varias cosas. Y cuando configuro un nuevo entorno, solo quiero copiar los cubos de un cubo de origen base o de un entorno existente.

Pero no puedo encontrar nada que proporcione una copia. La interfaz de AWS le permite duplicar la configuración al crear (que no necesito), pero no los objetos, por lo que es posible que Terraform no pueda hacer algo directamente.

Si es así, ¿qué tal indirectamente?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No hay ningún recurso que permita copiar objetos de un depósito S3 a otro. Si desea incluir esto en su configuración de Terraform, necesitará usar un aprovisionador local-exec .

Tendría que ejecutar el siguiente comando, con el soporte de la CLI de AWS para ejecutar aws s3 cp .

 resource "null_resource" "s3_objects" { provisioner "local-exec" { command = "aws s3 cp s3://bucket1 s3://bucket2 --recursive" } }

Para que esto se ejecute, el servidor local necesitaría tener la CLI de AWS instalada con un rol (o credenciales válidas) para habilitar la copia.

over 4 years ago · Santiago Trujillo Denunciar

0

En términos generales, los proveedores de Terraform reflejan operaciones que son compatibles de forma nativa con las API subyacentes, pero en algunos casos podemos usar varios tipos de recursos de Terraform juntos para lograr la funcionalidad de la que carece el proveedor subyacente.

Creo que no existe una operación nativa de S3 para copiar objetos de forma masiva de un depósito a otro, por lo que resolver esto con Terraform requiere descomponer el problema en pasos más pequeños, que creo que en este caso serían:

  • Declarar un nuevo cubo, el objetivo
  • Enumerar todos los objetos en el depósito de origen
  • Declare un objeto en el depósito nuevo por objeto en el depósito de origen.

En principio, el proveedor de AWS puede realizar estas tres operaciones: tiene tipos de recursos administrados para depósitos y objetos de depósito, y tiene una fuente de datos aws_s3_bucket_objects que puede enumerar algunos o todos los objetos de un depósito.

Podemos combinar esas piezas en una configuración de Terraform como esta:

 resource "aws_s3_bucket" "target" { bucket = "copy-example-target" } data "aws_s3_bucket_objects" "source" { bucket = "copy-example-source" } data "aws_s3_bucket_object" "source" { for_each = toset(data.aws_s3_bucket_objects.source.keys) bucket = data.aws_s3_bucket_objects.source.bucket key = each.key } resource "aws_s3_bucket_object" "target" { for_each = aws_s3_bucket_object.source bucket = aws_s3_bucket.target.bucket key = each.key content = each.value.body }

Dicho esto, es probable que Terraform no sea la mejor herramienta para esta situación por las siguientes razones:

  • La configuración anterior hará que Terraform lea todos los objetos en el depósito en la memoria, lo que llevaría mucho tiempo y usaría mucha RAM para depósitos más grandes, y luego, finalmente, los almacenaría en el estado de Terraform, lo que haría que el estado en sí mismo muy grande.
  • Debido a que la fuente de datos aws_s3_bucket_object está diseñada principalmente para recuperar pequeños objetos basados en texto, lo anterior funcionará solo si todo en el depósito cumple con las limitaciones descritas en la documentación de aws_s3_bucket_object : todos los objetos deben tener tipos MIME que indiquen texto y deben contener Texto codificado en UTF-8.

Entonces, en este caso, preferiría usar una herramienta especializada para el trabajo que está diseñada para explotar todas las características de la API S3 para hacer que la copia sea lo más eficiente posible, como transmitir la lista de objetos y transmitir el contenido de cada objeto en fragmentos para evitar la necesidad de tener todos los datos en la memoria a la vez. Una de estas herramientas se encuentra en la propia CLI de AWS, en forma de comando aws s3 cp con la opción --recursive .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda