Lançamento do plugin Terraform Provider da Transloadit
Este anúncio e o passo a passo são de 2020 e usam o Terraform 0.12 com as versões do provider
fixadas abaixo. Para uma nova infraestrutura, siga a
documentação atual do provider.
Hoje temos o prazer de anunciar o nosso próprio Provider Plugin do Terraform da Transloadit! Neste post, vamos explicar por que isso nos deixou tão animados e como você pode configurá-lo por conta própria.
O que é a Transloadit?
A Transloadit é um serviço de processamento de arquivos para empresas. Os desenvolvedores descrevem os resultados de mídia desejados com uma receita JSON declarativa, e a Transloadit então codifica vídeos, redimensiona e descreve imagens, normaliza áudio, gera miniaturas de documentos ou capturas de tela de sites, e muito mais.
O que é o Terraform?
O Terraform é uma ferramenta baseada em código para provisionar infraestrutura (infraestrutura como código (IaC)). Os desenvolvedores descrevem a infraestrutura desejada com uma receita HCL declarativa, e o Terraform então compara e modifica o estado real da infraestrutura para garantir que ele corresponda ao estado desejado descrito. Ele pode criar um bucket S3, renomear um load balancer etc.
Usando o Terraform na Transloadit
Usamos o Terraform internamente para provisionar 460 recursos da AWS em três regiões, mantendo-os
sincronizados. Tem funcionado bem. Se um colega distraído (ou, mais provavelmente, eu) alterar algo
por acidente, ou esquecer de sincronizar também as mudanças pretendidas com o nosso
datacenter na Ásia,
o Terraform vai perceber e corrigir quando eu executar terraform apply. Além disso, como as receitas
estão no Git, podemos ver como era a nossa infraestrutura de software seis anos atrás e, se
necessário, podemos até voltar para aquele estado. Coisa poderosa!
Usando a Transloadit no Terraform
Existe uma verdadeira riqueza de Provider Plugins disponíveis, a ponto de hoje em dia ser possível até configurar um cofre do 1Password com o Terraform. Achamos que seria uma boa ideia oferecer também um Terraform Provider da Transloadit que permitisse provisionar receitas da Transloadit (Templates) com o Terraform. E explicamos o motivo.
Digamos que você use a Transloadit para codificar automaticamente vídeos enviados. Você vai precisar salvar os resultados em algum lugar, normalmente em um bucket de um serviço de armazenamento em nuvem como o S3. Isso significa que a Transloadit precisa de acesso de escrita a esse bucket. Se você já usava o Terraform para criar e configurar esse bucket e as permissões IAM associadas, agora pode, a partir da mesma receita de infraestrutura, provisionar e configurar a Transloadit para salvar arquivos nesse bucket e configurar a AWS para nos permitir fazer isso.
Com um Provider Plugin do Terraform da Transloadit, você pode orquestrar todos os seus pipelines de processamento de mídia de forma declarativa. Isso permite:
- revisar mudanças e colaborar nelas em PRs
- voltar a configurações anteriores da sua infraestrutura
- corrigir automaticamente erros de configuração
- sincronizar mudanças com outras regiões
- garantir a compatibilidade entre componentes de infraestrutura vizinhos
Partindo para criar o Terraform Provider da Transloadit
Depois de experimentar o poder do Terraform e querendo oferecer essa funcionalidade também aos clientes do nosso serviço, decidimos criar um Terraform Provider da Transloadit.
Infelizmente, nunca tínhamos escrito um Terraform Provider e também andávamos bastante ocupados. Então, perguntamos no Hacker News se algum freelancer externo toparia o trabalho. E, como esperado, Etienne Carriere entrou em contato. Etienne não só se dispôs a ajudar, como também pediu que o pagamento fosse doado à Cruz Vermelha 🏥

Etienne, agradecemos muito pelo trabalho fenomenal! Não sabemos o que mais nos impressionou: o cuidado, a velocidade de execução ou o fato de você não aceitar um centavo. Se você ainda não tinha fãs, pode ter certeza de que agora tem!
Sem mais delongas, vamos ver o que Etienne construiu e como usar.
Passo a passo
Instalação
Depois de criar sua conta na Transloadit e anotar sua Auth Key e seu Auth Secret, você vai precisar instalar:
Ambos são binários únicos que você só precisa colocar no lugar apropriado.
Definição
Depois disso, você pode adicionar a receita dos seus Templates da Transloadit, por exemplo em um
arquivo chamado main.tf:
cd ~/code
mkdir transloadit-infra
cd transloadit-infra
$EDITOR main.tf
Com o seguinte conteúdo:
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
}
Observe que isso grava a chave de acesso secreta do usuário IAM no arquivo de estado, então proteja com cuidado o seu arquivo de estado do back-end. Como alternativa, você pode fornecer uma
pgp_key, o que impede que o segredo seja armazenado em texto simples, ao custo de impedir o uso da chave secreta em automações. Fonte: https://www.terraform.io/docs/providers/aws/r/iam_access_key.html.
Provisionamento
Agora, de volta à CLI, execute:
# 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
O Terraform vai propor mudanças na sua infraestrutura.
Supondo que você tenha revisado tudo com atenção e escolhido yes, você agora provisionou um
back-end capaz de lidar com o upload de qualquer vídeo pelos usuários. Ele vai codificar esses
vídeos para exibição ideal em iPads, extrair quatro miniaturas de pré-visualização e salvar todos os
resultados no seu bucket S3: uploads.example.com (convém alterar o nome desse bucket).
Do lado da AWS, todos os usuários e políticas IAM foram provisionados para que a Transloadit possa salvar os arquivos no S3.
Você pode usar o valor do output to-ipad-with-thumbnails-id como seu template_id (por
exemplo, na sua integração de upload de arquivos no navegador com o Uppy), e pronto 😄
💡 Se você tiver interesse na receita JSON de codificação de mídia usada aqui, confira nossa documentação de integração.
Exemplos mais detalhados do Terraform Provider da Transloadit estão disponíveis no diretório website do provider.
Teste
Você poderá ver seu Template to-ipad-with-thumbnails aqui. Você
pode clicar nele, ativar a área de testes e enviar um vídeo para ver como tudo é processado.
Próximos passos
Estamos tentando incluir este provider como um plugin oficial na HashiCorp. Se conseguirmos, será
mais fácil encontrar o Provider Plugin, ler a documentação dele e até instalá-lo automaticamente,
bastando referenciar transloadit no seu HCL e executar terraform init.
Esperamos que este plugin já seja útil para você, e estamos ansiosos para ver o que você vai construir com ele. Conte para nós!
