Lanzamiento del plugin Terraform Provider de Transloadit
Este anuncio y su recorrido datan de 2020 y usan Terraform 0.12 con las versiones del proveedor
fijadas más abajo. Para infraestructura nueva, sigue la
documentación actual del proveedor.
¡Hoy estamos muy contentos de anunciar el Provider Plugin propio de Transloadit para Terraform! En esta publicación de blog explicaremos por qué nos entusiasma tanto y cómo puedes configurarlo tú mismo.
¿Qué es Transloadit?
Transloadit es un servicio de procesamiento de archivos para empresas. Los desarrolladores describen los resultados de medios que desean con una receta JSON declarativa y, a continuación, Transloadit codifica video, redimensiona y describe imágenes, normaliza audio, crea miniaturas de documentos o capturas de pantalla de sitios web, y mucho más.
¿Qué es Terraform?
Terraform es una herramienta basada en código para aprovisionar infraestructura (Infrastructure as Code (IaC)). Los desarrolladores describen la infraestructura que desean con una receta declarativa de HCL y, después, Terraform compara y modifica el estado real de la infraestructura para asegurarse de que se ajuste al estado deseado que se describió. Puede crear un bucket de S3, renombrar un balanceador de carga, etc.
Uso de Terraform en Transloadit
Hemos estado usando Terraform internamente para aprovisionar 460 recursos de AWS en tres regiones y
mantenerlos sincronizados. Ha funcionado bien. Si un colega descuidado (o, más probablemente, yo
mismo) cambia algo por accidente u olvida sincronizar también los cambios previstos con nuestro
centro de datos de Asia,
Terraform lo detectará y lo corregirá cuando yo ejecute terraform apply. Es más, como las recetas están
en Git, podemos ver cómo era nuestra infraestructura para software hace seis años y, si hiciera
falta, incluso podemos volver a ese estado. ¡Algo muy potente!
Uso de Transloadit en Terraform
Hay una verdadera abundancia de Provider Plugins disponibles, así que hoy en día incluso puedes configurar una 1Password Vault con Terraform. Nos pareció buena idea ofrecer también un Transloadit Terraform Provider que te permitiera aprovisionar recetas de Transloadit (Templates) con Terraform. Y este es el motivo.
Supongamos que usas Transloadit para codificar automáticamente los videos que se suben. Tendrás que guardar los resultados en algún lugar, normalmente en un bucket de un servicio de almacenamiento en la nube como S3. Esto significa que Transloadit necesita acceso de escritura a ese bucket. Si ya usabas Terraform para crear y configurar ese bucket y los permisos de IAM asociados, ahora puedes, desde la misma receta de infraestructura, aprovisionar y configurar Transloadit para que guarde archivos en ese bucket, y configurar AWS para que nos permita hacerlo.
Con un Transloadit Terraform Provider Plugin, podrías orquestar de forma declarativa todos tus pipelines de procesamiento de medios. Esto te permite:
- revisar los cambios en las PR y colaborar en ellos
- volver a configuraciones anteriores de tu infraestructura
- corregir automáticamente errores de configuración
- sincronizar los cambios con otras regiones
- garantizar la compatibilidad entre componentes de infraestructura vecinos
Nos propusimos construir el Transloadit Terraform Provider
Tras probar el poder de Terraform y con ganas de ofrecer su funcionalidad también a los clientes de nuestro servicio, decidimos construir un Transloadit Terraform Provider.
Por desgracia, nunca habíamos escrito un Terraform Provider nosotros mismos, y además hemos estado bastante ocupados. Así que preguntamos en Hacker News para ver si algún freelance externo se animaba con el trabajo. Y, efectivamente, Etienne Carriere se puso en contacto con nosotros. Etienne no solo estaba dispuesto a ayudar, sino que además pidió que sus honorarios se donaran a la Cruz Roja en su lugar 🏥

Etienne, ¡muchísimas gracias por hacer un trabajo fenomenal! No sabemos qué nos impresiona más: la minuciosidad, la velocidad de ejecución o el hecho de que no aceptes ni un centavo. Si todavía no tenías un club de fans, ¡puedes estar seguro de que ahora sí lo tienes!
Sin más preámbulos, veamos qué construyó Etienne y cómo usarlo.
Recorrido paso a paso
Instalación
Después de registrarte en Transloadit y anotar tu Auth Key y tu Auth Secret, tendrás que instalar:
Cada una de estas dos herramientas es, por sí sola, un único archivo binario, y debes colocar cada uno de esos archivos en el lugar adecuado.
Definición
Después de eso, puedes añadir la receta de tus Templates de Transloadit, por ejemplo en un archivo
llamado main.tf:
cd ~/code
mkdir transloadit-infra
cd transloadit-infra
$EDITOR main.tf
Con el siguiente contenido:
provider "aws" {
# This needs AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in your env
version = "2.62.0"
}
provider "transloadit" {
# This needs TRANSLOADIT_AUTH_KEY and TRANSLOADIT_AUTH_SECRET in your env
version = "0.1.0"
}
resource "aws_s3_bucket" "uploads" {
bucket = "uploads.example.com"
acl = "private"
}
data "aws_iam_policy_document" "transloadit-policy" {
statement {
sid = "AllowTransloaditToStoreFilesInUploadsExampleComBucket"
effect = "Allow"
actions = [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl",
]
resources = [
"arn:aws:s3:::${aws_s3_bucket.uploads.id}",
"arn:aws:s3:::${aws_s3_bucket.uploads.id}/*",
]
}
}
resource "aws_iam_user_policy" "transloadit-policy" {
name = "transloadit-policy"
user = aws_iam_user.transloadit.name
policy = data.aws_iam_policy_document.transloadit-policy.json
}
resource "aws_iam_user" "transloadit" {
name = "transloadit"
}
resource "aws_iam_access_key" "transloadit" {
user = aws_iam_user.transloadit.name
}
resource "transloadit_template" "to-ipad-with-thumbnails" {
name = "to-ipad-with-thumbnails"
template = <<EOT
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"encoded": {
"use": ":original",
"robot": "/video/encode",
"preset": "ipad-high",
"ffmpeg_stack": "v7"
},
"thumbed": {
"use": ":original",
"robot": "/video/thumbs",
"count": 4,
"ffmpeg_stack": "v7"
},
"exported": {
"use": [ ":original", "encoded", "thumbed"],
"bucket": "${aws_s3_bucket.uploads.id}",
"key": "${aws_iam_access_key.transloadit.id}",
"secret": "${aws_iam_access_key.transloadit.secret}",
"acl": "bucket-default",
"robot": "/s3/store"
}
}
}
EOT
}
output "to-ipad-with-thumbnails-id" {
value = transloadit_template.to-ipad-with-thumbnails.id
}
Ten en cuenta que esto escribirá la clave de acceso secreta del usuario de IAM en el archivo de estado, así que protege con criterio tu archivo de estado del back-end. Como alternativa, puedes proporcionar un
pgp_key, lo que evitará que el secreto se almacene en texto plano, a costa de impedir el uso de la clave secreta en la automatización. De https://www.terraform.io/docs/providers/aws/r/iam_access_key.html.
Aprovisionamiento
Ahora, de vuelta en la CLI, ejecuta:
# Use your workspace Auth Key and Auth Secret, not storage Template Credentials.
export TRANSLOADIT_AUTH_KEY="********"
export TRANSLOADIT_AUTH_SECRET="********"
# You can get your AWS key & secret from https://console.aws.amazon.com/iam/home
# Under users->user->security credentials
export AWS_ACCESS_KEY_ID="********"
export AWS_SECRET_ACCESS_KEY="********"
terraform init # only required on the first run after using a new Provider (version)
terraform apply
Terraform propondrá ahora realizar cambios en tu infraestructura.
Suponiendo que lo revisaste con cuidado y elegiste yes, ya has aprovisionado un back-end capaz
de gestionar la subida de cualquier video por parte de los usuarios. Codificará esos videos para una
visualización óptima en iPads, extraerá cuatro imágenes en miniatura de vista previa y guardará
todos los resultados en tu bucket de S3: uploads.example.com
(querrás cambiar el nombre de este bucket).
Del lado de AWS, se han aprovisionado todos los usuarios y las políticas de IAM para que Transloadit pueda guardar los archivos en S3.
Puedes referenciar el valor de la salida to-ipad-with-thumbnails-id como tu template_id (por
ejemplo, en tu integración de subida de archivos en el navegador web con Uppy), y ya está 😄
💡 Si te interesa la receta JSON de encoding de medios que se usa aquí, puedes consultar nuestra documentación de integración.
Hay ejemplos más detallados del Transloadit Terraform Provider en el directorio website del proveedor.
Prueba
Podrás ver tu Template to-ipad-with-thumbnails aquí.
Puedes hacer clic en él, activar el área de pruebas y subir un video para ver cómo se procesa todo.
¿Qué sigue?
Estamos intentando que este proveedor figure como Plugin oficial en HashiCorp. Si lo conseguimos,
será más fácil descubrir el Provider Plugin, leer su documentación e incluso instalarlo
automáticamente con solo referenciar transloadit en tu HCL y ejecutar terraform init.
Esperamos que este plugin ya te resulte útil y estamos deseando ver qué logras construir con él. ¡Cuéntanos!
