Wir starten das Terraform-Provider-Plugin von Transloadit
Diese Ankündigung und die Anleitung stammen aus dem Jahr 2020 und verwenden Terraform
0.12 mit den unten fixierten Provider-Versionen. Für neue Infrastruktur
folgen Sie bitte der aktuellen Provider-Dokumentation.
Heute freuen wir uns sehr, Transloadits ganz eigenes Provider-Plugin für Terraform anzukündigen! In diesem Blogpost erklären wir, warum uns das so begeistert und wie Sie es selbst einrichten können.
Was ist Transloadit?
Transloadit ist ein Dateiverarbeitungsdienst für Unternehmen. Entwicklerinnen und Entwickler beschreiben die gewünschten Medienausgaben mit einem deklarativen JSON-Rezept, und Transloadit codiert dann Videos, ändert die Größe von Bildern und beschreibt sie, normalisiert Audio, erstellt Thumbnails von Dokumenten oder Screenshots von Websites und noch vieles mehr.
Was ist Terraform?
Terraform ist ein codebasiertes Werkzeug zur Bereitstellung von Infrastruktur (Infrastructure as Code (IaC)). Entwicklerinnen und Entwickler beschreiben ihre gewünschte Infrastruktur mit einem deklarativen HCL-Rezept, und Terraform vergleicht und verändert daraufhin den tatsächlichen Zustand der Infrastruktur, damit dieser dem beschriebenen Zielzustand entspricht. Dabei kann es einen S3-Bucket anlegen, einen Load Balancer umbenennen usw.
Terraform bei Transloadit einsetzen
Wir setzen Terraform intern ein, um 460 AWS-Ressourcen über drei Regionen hinweg bereitzustellen und
synchron zu halten. Das funktioniert gut. Wenn ein unachtsamer Kollege (oder, wahrscheinlicher, ich
selbst) versehentlich etwas ändert oder vergisst, beabsichtigte Änderungen auch in unser
Rechenzentrum in Asien zu übertragen, bemerkt Terraform das und
korrigiert es, sobald ich terraform apply ausführe. Da die Rezepte zudem in Git
liegen, können wir sehen, wie unsere Infrastruktur für Software vor sechs Jahren aussah – und bei
Bedarf sogar zu diesem Zustand zurückkehren. Starke Sache!
Transloadit in Terraform einsetzen
Es gibt eine wahre Fülle an Provider-Plugins, sodass Sie heute sogar einen 1Password Vault mit Terraform einrichten können. Wir fanden, es wäre eine gute Idee, auch einen Transloadit Terraform Provider anzubieten, mit dem Sie Transloadit-Rezepte (Templates) über Terraform bereitstellen können. Und hier ist der Grund dafür.
Angenommen, Sie nutzen Transloadit, um hochgeladene Videos automatisch zu codieren. Die Ergebnisse müssen Sie irgendwo speichern, typischerweise in einem Bucket bei einem Cloud-Storage-Dienst wie S3. Das bedeutet, dass Transloadit Schreibzugriff auf diesen Bucket benötigt. Wenn Sie Terraform bereits genutzt haben, um diesen Bucket und die zugehörigen IAM-Berechtigungen zu erstellen und zu konfigurieren, können Sie nun aus demselben Infrastruktur-Rezept heraus Transloadit so bereitstellen und konfigurieren, dass Dateien in diesem Bucket gespeichert werden, und AWS so konfigurieren, dass es uns dies erlaubt.
Mit einem Transloadit Terraform Provider Plugin könnten Sie all Ihre Pipelines zur Medienverarbeitung deklarativ orchestrieren. Damit können Sie:
- Änderungen in PRs prüfen und gemeinsam daran arbeiten
- zu früheren Konfigurationen Ihrer Infrastruktur zurückkehren
- Konfigurationsfehler automatisch beheben
- Änderungen in andere Regionen synchronisieren
- die Kompatibilität zwischen benachbarten Infrastrukturkomponenten sicherstellen
Wir bauen den Transloadit Terraform Provider
Nachdem wir die Stärke von Terraform erlebt hatten und die Funktionalität von Terraform auch den Kundinnen und Kunden unseres Dienstes anbieten wollten, entschieden wir uns, einen Transloadit Terraform Provider zu bauen.
Leider hatten wir selbst noch nie einen Terraform Provider geschrieben, und außerdem waren wir ziemlich ausgelastet. Deshalb haben wir auf Hacker News nachgefragt, ob eine externe freiberufliche Person die Aufgabe übernehmen möchte. Und tatsächlich meldete sich Etienne Carriere bei uns. Etienne war nicht nur bereit zu helfen, er bat auch darum, sein Honorar stattdessen an das Rote Kreuz zu spenden 🏥

Etienne, vielen Dank für diese phänomenale Arbeit! Wir wissen nicht, was uns mehr beeindruckt: die Gründlichkeit, das Tempo der Umsetzung oder die Tatsache, dass Sie keinen Cent dafür nehmen. Falls Sie noch keine Fangemeinde hatten, haben Sie jetzt mit Sicherheit eine!
Ohne weitere Umschweife: Werfen wir einen Blick darauf, was Etienne gebaut hat und wie Sie es verwenden.
Anleitung
Installation
Nachdem Sie sich bei Transloadit registriert und Ihren Auth Key sowie Ihr Auth Secret notiert haben, müssen Sie Folgendes installieren:
Beides sind einzelne Binaries, die Sie nur an der passenden Stelle ablegen müssen.
Definieren
Danach können Sie das Rezept für Ihre Transloadit Templates hinzufügen, zum Beispiel in einer
Datei namens main.tf:
cd ~/code
mkdir transloadit-infra
cd transloadit-infra
$EDITOR main.tf
Mit folgendem Inhalt:
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
}
Beachten Sie, dass dabei der geheime Zugriffsschlüssel des IAM-Benutzers in die State-Datei geschrieben wird. Schützen Sie Ihre Back-End-State-Datei daher sorgfältig. Alternativ können Sie einen Wert für
pgp_keyangeben, wodurch der Schlüssel nicht im Klartext gespeichert wird, allerdings um den Preis, dass sich der geheime Schlüssel dann nicht mehr in Automatisierungen verwenden lässt. Aus https://www.terraform.io/docs/providers/aws/r/iam_access_key.html.
Bereitstellen
Führen Sie nun wieder auf der CLI aus:
# 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 schlägt Ihnen jetzt Änderungen an Ihrer Infrastruktur vor.
Vorausgesetzt, Sie haben sorgfältig geprüft und yes gewählt, haben Sie nun
ein Back-End bereitgestellt, das den Upload beliebiger Videos durch Nutzerinnen und Nutzer
verarbeiten kann. Es codiert diese Videos für eine optimale Darstellung auf iPads, extrahiert vier
Vorschau-Thumbnails und speichert alle Ergebnisse in Ihrem S3-Bucket:
uploads.example.com (diesen Bucket-Namen werden Sie anpassen wollen).
Auf AWS-Seite wurden alle IAM-Benutzer und Policies bereitgestellt, damit Transloadit die Dateien in S3 speichern kann.
Den Wert der Ausgabe to-ipad-with-thumbnails-id können Sie als Wert für
template_id verwenden (zum Beispiel in Ihrer Datei-Upload-Integration mit
Uppy im Webbrowser), und das war's 😄
💡 Wenn Sie sich für das hier verwendete JSON-Rezept zum Encoding von Medien interessieren, werfen Sie einen Blick in unsere Integrationsdokumentation.
Ausführlichere Beispiele für den Transloadit Terraform Provider finden Sie im Website-Verzeichnis des Providers.
Testen
Ihr Template namens to-ipad-with-thumbnails können Sie sich hier
ansehen. Sie können es anklicken, den Testbereich einblenden und ein Video hochladen, um zu sehen,
wie alles verarbeitet wird.
Wie geht es weiter?
Wir arbeiten daran, diesen Provider als offizielles Plugin bei HashiCorp listen zu lassen. Wenn uns
das gelingt, lässt sich das Provider-Plugin leichter finden, seine Dokumentation leichter lesen und
es sogar automatisch installieren, indem Sie einfach transloadit in Ihrem HCL
referenzieren und terraform init ausführen.
Wir hoffen, dass Ihnen dieses Plugin schon jetzt nützlich ist, und sind gespannt, was Sie damit bauen. Lassen Sie es uns wissen!
