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

267
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
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