Lancement du plugin provider Terraform de Transloadit
Cette annonce et ce tutoriel datent de 2020 et utilisent Terraform 0.12 avec les versions du
provider épinglées ci-dessous. Pour une nouvelle infrastructure, suivez la
documentation actuelle du provider.
Aujourd’hui, nous sommes très heureux d’annoncer notre propre plugin provider Terraform pour Transloadit ! Dans cet article, nous allons expliquer pourquoi cela nous enthousiasme autant, et comment vous pouvez le configurer vous-même.
Qu’est-ce que Transloadit ?
Transloadit est un service de traitement de fichiers destiné aux entreprises. Les développeurs décrivent les résultats médias souhaités avec une recette JSON déclarative, puis Transloadit encode des vidéos, redimensionne et décrit des images, normalise l’audio, crée des miniatures de documents ou des captures d’écran de sites web, et bien plus encore.
Qu’est-ce que Terraform ?
Terraform est un outil basé sur du code pour provisionner une infrastructure (Infrastructure as Code (IaC)). Les développeurs décrivent l’infrastructure souhaitée avec une recette HCL déclarative, puis Terraform compare et modifie l’état réel de l’infrastructure pour s’assurer qu’il correspond à l’état souhaité décrit. Il peut créer un bucket S3, renommer un répartiteur de charge, etc.
Utiliser Terraform chez Transloadit
Nous utilisons Terraform en interne pour provisionner 460 ressources AWS dans trois régions tout en
les gardant synchronisées. Cela fonctionne bien. Si un collègue maladroit (ou, plus probablement,
moi-même) modifie quelque chose par accident, ou oublie de synchroniser aussi les modifications
prévues vers notre datacenter en Asie,
Terraform le remarquera et corrigera lorsque j’exécuterai terraform apply. De plus, comme les
recettes sont dans Git, nous pouvons voir à quoi ressemblait notre infrastructure logicielle il y a
six ans — et si nécessaire, nous pouvons même revenir à cet état. Puissant !
Utiliser Transloadit dans Terraform
Il existe une véritable profusion de plugins provider disponibles, si bien que vous pouvez même configurer un coffre 1Password avec Terraform de nos jours. Nous avons pensé qu’il serait judicieux de proposer aussi un provider Terraform pour Transloadit qui vous permettrait de provisionner des recettes Transloadit (Templates) avec Terraform. Et voici pourquoi.
Supposons que vous utilisiez Transloadit pour encoder automatiquement des vidéos téléversées. Vous devrez enregistrer les résultats quelque part, généralement dans un bucket d’un service de stockage cloud comme S3. Cela signifie que Transloadit a besoin d’un accès en écriture à ce bucket. Si vous utilisiez déjà Terraform pour créer et configurer ce bucket et les permissions IAM associées, vous pouvez désormais, depuis la même recette d’infrastructure, provisionner et configurer Transloadit pour enregistrer des fichiers dans ce bucket, et configurer AWS pour nous autoriser à le faire.
Avec un plugin provider Terraform pour Transloadit, vous pourriez orchestrer tous vos pipelines de traitement de médias de manière déclarative. Cela vous permet de :
- relire les modifications et collaborer dessus dans des PR
- revenir à des configurations précédentes de votre infrastructure
- corriger automatiquement les erreurs de configuration
- synchroniser les modifications vers d’autres régions
- garantir la compatibilité entre composants d’infrastructure voisins
Se lancer dans la création du provider Terraform pour Transloadit
Après avoir goûté à la puissance de Terraform, et souhaitant offrir aussi ses fonctionnalités aux clients de notre service, nous avons décidé de créer un provider Terraform pour Transloadit.
Malheureusement, nous n’avions jamais écrit de provider Terraform nous-mêmes, et nous avons aussi été plutôt occupés. Nous avons donc demandé autour de nous sur Hacker News si un freelance externe serait partant pour la mission. Et effectivement, Etienne Carriere nous a contactés. Etienne était non seulement prêt à nous aider, mais il a aussi demandé que ses honoraires soient plutôt reversés à la Croix-Rouge 🏥

Etienne, merci infiniment pour ce travail phénoménal ! Nous ne savons pas ce qui nous impressionne le plus : la rigueur, la rapidité d’exécution ou le fait que vous ne vouliez pas toucher un centime. Si vous n’aviez pas encore de fans, soyez-en sûr, vous en avez maintenant !
Sans plus attendre, voyons ce qu’Etienne a créé et comment l’utiliser.
Tutoriel
Installer
Après votre inscription à Transloadit et après avoir noté vos Auth Key et Auth Secret, vous devrez installer :
Il s’agit dans les deux cas d’un simple binaire qu’il suffit de placer au bon endroit.
Définir
Ensuite, vous pouvez ajouter la recette de vos Templates Transloadit, par exemple
dans un fichier nommé main.tf :
cd ~/code
mkdir transloadit-infra
cd transloadit-infra
$EDITOR main.tf
Avec le contenu suivant :
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
}
Notez que cela écrira la clé d’accès secrète de l’utilisateur IAM dans le fichier d’état ; veuillez donc protéger soigneusement votre fichier d’état back-end. Vous pouvez aussi fournir
pgp_key, ce qui empêchera le stockage de la clé secrète en clair, au prix de l’impossibilité d’utiliser la clé secrète dans l’automatisation. Source : https://www.terraform.io/docs/providers/aws/r/iam_access_key.html.
Provisionner
De retour dans la CLI, exécutez :
# 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 va maintenant proposer d’apporter des modifications à votre infrastructure.
En supposant que vous ayez examiné attentivement les changements et choisi yes, vous avez
maintenant provisionné un back-end capable de gérer le téléversement de n’importe quelle vidéo par
vos utilisateurs. Il encodera ces vidéos pour un affichage optimal sur iPad, extraira quatre
miniatures d’aperçu et enregistrera tous les résultats dans votre bucket S3 : uploads.example.com
(vous voudrez changer ce nom de bucket).
Du côté d’AWS, tous les utilisateurs et stratégies IAM ont été provisionnés afin que Transloadit puisse enregistrer les fichiers sur S3.
Vous pouvez référencer la valeur de la sortie to-ipad-with-thumbnails-id comme votre template_id (par
exemple dans votre intégration de téléversement de fichiers dans le navigateur avec
Uppy), et c’est tout 😄
💡 Si la recette JSON d’encodage de médias utilisée ici vous intéresse, vous pouvez consulter notre documentation d’intégration.
Des exemples plus détaillés du provider Terraform pour Transloadit sont disponibles dans le répertoire website du provider.
Tester
Vous pourrez voir votre Template to-ipad-with-thumbnails ici. Vous
pouvez cliquer dessus, afficher la zone de test et téléverser une vidéo pour voir comment tout est
traité.
Et ensuite ?
Nous essayons de faire référencer ce provider comme plugin officiel auprès de HashiCorp. Si nous y
parvenons, il sera plus facile de découvrir le plugin provider, de lire sa documentation et même de
l’installer automatiquement en référençant simplement transloadit dans votre HCL et en exécutant
terraform init.
Nous espérons que ce plugin vous sera déjà utile et nous avons hâte de voir ce que vous parviendrez à créer avec. N’hésitez pas à nous le faire savoir !
