Importar arquivos do Amazon S3
🤖/s3/import importa diretórios inteiros de arquivos do seu bucket do S3.

Se você está começando a usar o Amazon S3, consulte nosso tutorial sobre como usar seu próprio bucket S3 (English).
A URL do arquivo de resultado no seu bucket S3 será retornada no Assembly Status JSON.
Use nomes de bucket compatíveis com DNS. O nome do seu bucket deve ser compatível com DNS e não deve conter letras maiúsculas. Todos os caracteres não alfanuméricos nos nomes dos arquivos serão substituídos por um sublinhado, e os espaços serão substituídos por hifens. Se o seu bucket S3 existente contiver letras maiúsculas ou não for compatível com DNS por outro motivo, reescreva as URLs de resultado usando o parâmetro url_prefix do Robot.
Limitar o acesso
Você também precisará adicionar permissões ao seu bucket para que a Transloadit possa acessá-lo corretamente. Veja um exemplo de política IAM que você pode usar. Seguindo o princípio do menor privilégio, ela contém as permissões mínimas necessárias para importar um arquivo do seu bucket S3 usando a Transloadit. Você pode precisar de mais permissões (especialmente permissões de visualização), dependendo da sua aplicação.
Altere {BUCKET_NAME} nos valores de Sid e Resource conforme necessário. Além disso, essa política concederá as permissões mínimas necessárias a todos os seus usuários. Recomendamos que você crie um usuário separado no Amazon IAM e use o User ARN dele (disponível na aba “Summary” de um usuário aqui) como valor de Principal. Você pode encontrar mais informações sobre isso aqui.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowTransloaditToImportFilesIn{BUCKET_NAME}Bucket",
"Effect": "Allow",
"Action": ["s3:GetBucketLocation", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::{BUCKET_NAME}", "arn:aws:s3:::{BUCKET_NAME}/*"]
}
]
}
O valor de Sid é apenas um identificador para você reconhecer a regra depois. Você pode dar a ele o nome que quiser.
A política precisa ser separada em duas partes, porque a ação ListBucket exige permissões no bucket, enquanto as outras ações exigem permissões nos objetos do bucket. Quando a política se aplica aos objetos, há uma barra final e um asterisco no parâmetro Resource; quando ela se aplica ao bucket, a barra e o asterisco são omitidos.
Para construir URLs de resultado corretas, precisamos saber em qual região seu bucket S3 está localizado. Para isso, exigimos a permissão GetBucketLocation. Determinar a região do seu bucket dessa forma também deixará suas Assemblies mais lentas. Para tornar isso muito mais rápido e também dispensar a permissão GetBucketLocation, adicionamos o parâmetro bucket_region aos Robots /s3/store e /s3/import. Recomendamos sempre usar esse parâmetro nesses Robots.
Lembre-se de que, se você usar criptografia no bucket, talvez também precise adicionar "sts:*" e "kms:*" à política do bucket. Leia aqui e aqui caso encontre problemas com nosso exemplo de política de bucket.
Exemplo de uso
Importe arquivos do diretório path/to/files e de seus subdiretórios:
{
"steps": {
"imported": {
"credentials": "YOUR_AWS_CREDENTIALS",
"path": "path/to/files/",
"recursive": true,
"robot": "/s3/import"
}
}
}Parâmetros
interpolateboolean | Record<string, boolean>Controla se as Assembly Variables são interpoladas em campos individuais de instruções.
Por padrão, a maioria dos campos de instruções dos Robots interpola Assembly Variables. Defina isso como
falsepara tratar todos os campos de instruções como texto literal, ou defina o caminho de um campo individual comofalsepara tratar apenas esse campo como texto literal. Para campos específicos de um Robot que são literais por padrão, defina isso comotrueou defina o caminho desse campo comotruepara voltar a usar a interpolação.Use nomes de campos como
pathou caminhos com pontos comoffmpeg.vfpara objetos aninhados.output_metaRecord<string, boolean> | boolean | Array<string>Permite especificar um conjunto de metadados cujo cálculo exige mais CPU e que, por isso, vem desativado por padrão para manter o processamento das suas Assemblies rápido.
Para imagens, você pode adicionar
"has_transparency": trueneste objeto para extrair se a imagem contém partes transparentes e"dominant_colors": truepara extrair um array de códigos de cores hexadecimais da imagem.Para imagens, você também pode adicionar
"blurhash": truepara extrair uma string BlurHash — uma representação compacta de um placeholder da imagem, útil para exibir uma prévia desfocada enquanto a imagem completa carrega.Para vídeos, você pode adicionar o parâmetro
"colorspace": truepara extrair o espaço de cores do vídeo de saída.Para vídeos, você também pode adicionar
"interlaced": truepara detectar se o vídeo é entrelaçado. Isso combina a flag computacionalmente baratafield_orderdo ffprobe com uma passagem de amostragemidetlimitada sobre os primeiros quadros da origem, expondointerlaced,field_ordere um objeto de diagnósticointerlace_detectionemfile.meta. Isso é computacionalmente caro e cobrado de acordo.Para áudio, você pode adicionar
"mean_volume": truepara obter um único valor que representa o volume médio do arquivo de áudio.Você também pode definir isso como
falsepara pular a extração de metadados e acelerar a transcodificação.user_metaRecord<string, any>(padrão:{})Adiciona metadados JSON personalizados a cada arquivo emitido sem modificar seu conteúdo. Objetos e arrays aninhados são suportados.
A herança depende do Robot. Os valores são mesclados com o
user_metaexistente no arquivo de saída; o Step atual substitui as chaves de nível superior com o mesmo nome. Atribua explicitamente as chaves necessárias quando um Robot criar novas saídas.Nos Steps de processamento,
${file.*}se refere à primeira entrada e${result.*}ao arquivo emitido. Os valores são avaliados para cada saída após a execução do Robot, antes da extração subsequente de metadados e do armazenamento temporário. Em:original, os valores são avaliados para cada upload antes da extração de metadados.Os Steps subsequentes leem
${file.user_meta.key}. Consulte Metadados personalizados para ver um exemplo completo e as regras de herança.resultboolean(padrão:false)Se os resultados deste Step devem estar presentes no Assembly Status JSON
queuebatchDefinir a fila como “batch” rebaixa manualmente a prioridade dos Jobs deste Step, para evitar o consumo de vagas prioritárias de Jobs em Jobs que não precisam de tempo zero de espera na fila
force_acceptboolean(padrão:false)Forçar um Robot a aceitar um tipo de arquivo que ele teria ignorado.
Por padrão, os Robots ignoram arquivos que não conhecem. O 🤖/video/encode, por exemplo, ignora tranquilamente imagens de entrada.
Com o parâmetro
force_acceptdefinido comotrue, você pode forçar os Robots a aceitar todos os arquivos enviados a eles. Isso normalmente leva a erros e só deve ser usado para depuração ou para lidar com casos extremos.ignore_errorsboolean | Array<meta | import | execute>(padrão:[])Ignorar erros durante fases específicas do processamento.
Definir isso como
["meta"]fará com que o Robot ignore erros durante a extração de metadados.Definir isso como
["execute"]fará com que o Robot ignore erros durante a fase principal de execução.Definir isso como
["import"]fará com que o Robot ignore erros ao importar o arquivo de origem. A fase"import"está disponível apenas para Robots de importação.Definir isso como
trueequivale a["meta", "import", "execute"]e fará com que erros sejam ignorados nas três fases.force_namestring | Array<string> | null(padrão:null)Nome personalizado para o(s) arquivo(s) importado(s). Por padrão, os nomes dos arquivos são derivados da origem.
import_on_errorsArray<meta>(padrão:[])Definir isso como
["meta"]ainda importa o arquivo quando ocorrem erros de extração de metadados.ignore_errorsé parecido: também ignora o erro e garante que o Robot não pare, mas não importa o arquivo.credentialsstringCrie as credenciais de Template correspondentes na sua conta da Transloadit e use o nome das suas credenciais de Template como valor deste parâmetro. Elas conterão os valores de
bucket,key,secretebucket_regiondo seu S3.Embora recomendemos sempre usar credenciais de Template, alguns casos de uso exigem credenciais dinâmicas, para os quais o uso de credenciais de Template é pouco prático devido à sua natureza estática. Se você tiver essa necessidade, pode usar os seguintes parâmetros no lugar delas:
"bucket","bucket_region"(por exemplo:"us-east-1"ou"eu-west-2"),"key","secret".path— obrigatóriostring | Array<string>O caminho no seu bucket para o arquivo ou diretório específico. Se o caminho apontar para um arquivo, apenas esse arquivo será importado. Por exemplo:
images/avatar.jpg.Se apontar para um diretório, indicado por uma barra no final (
/), todos os arquivos diretamente contidos nesse diretório serão importados. Por exemplo:images/.Os diretórios não são importados recursivamente. Se quiser importar arquivos de subdiretórios e dos subdiretórios deles, habilite o parâmetro
recursive.Se quiser importar todos os arquivos do diretório raiz, use
/como valor aqui. Nesse caso, certifique-se de que todos os seus objetos pertençam a um caminho. Se houver objetos na raiz do seu bucket que não tenham o prefixo/, você receberá um erro:A client error (NoSuchKey) occurred when calling the GetObject operation: The specified key does not exist.Você também pode usar um array de strings de caminhos aqui para importar vários caminhos no mesmo Step do Robot.
recursiveboolean(padrão:false)Definir este parâmetro como
truepermitirá importar arquivos de subdiretórios e dos subdiretórios deles (etc.) no caminho especificado.Use os parâmetros de paginação
page_numberefiles_per_pagecom cuidado aqui.page_numberstring | number(padrão:1)O número da página de paginação. Por enquanto, para não quebrar a compatibilidade com versões anteriores em importações não recursivas, isso só funciona quando recursive está definido como
true.Ao fazer importações grandes, certifique-se de que outros scripts não adicionem nem removam arquivos no seu caminho; caso contrário, a paginação poderá apresentar resultados inesperados.
files_per_pagestring | number(padrão:1000)O tamanho da página de paginação. Por enquanto, isso só funciona quando recursive é
true, para não quebrar a compatibilidade com versões anteriores em importações não recursivas.return_file_stubsboolean(padrão:false)Se definido como
true, o Robot ainda não importará os arquivos em si, e em vez disso retornará um stub de arquivo vazio que inclui uma URL a partir da qual o arquivo pode ser importado por Robots subsequentes. Isso é útil em casos em que os Steps subsequentes precisam de mais controle sobre o processo de importação, como acontece com o 🤖/video/ondemand. Este parâmetro só deve ser definido se todos os Steps subsequentes usarem Robots que suportem stubs de arquivo.rangestring | Array<string>Permite especificar um ou mais intervalos de bytes para importar do arquivo. O S3 precisa oferecer suporte a requisições de intervalo para que isso funcione.
Intervalo único: use uma string como
"0-99"para importar os bytes de 0 a 99 (os primeiros 100 bytes).Múltiplos intervalos: use um array como
["0-99", "200-299"]para importar vários intervalos separados. O arquivo resultante conterá todos os intervalos solicitados concatenados, com bytes de valor zero (\0) preenchendo as lacunas entre intervalos não contíguos.Formatos de intervalo:
"0-99": bytes de 0 a 99 (inclusive)"100-199": bytes de 100 a 199 (inclusive)"-100": os últimos 100 bytes do arquivo
Observações importantes:
- O S3 oferece suporte a requisições de intervalo por padrão
- Intervalos sobrepostos são permitidos e serão incluídos conforme solicitado
- O tamanho do arquivo resultante será a maior posição de byte solicitada, com as lacunas preenchidas com bytes de valor zero
- Cada intervalo é obtido em uma requisição separada para garantir a compatibilidade com o S3
Demonstrações
Publicações relacionadas no blog
- Introducing new /s3/import Robot for easy S3 imports (English)
- New pricing model for future Transloadit customers (English)
- Introducing recursive imports for S3 in Transloadit (English)
- Building an alt-text to speech generator with Transloadit (English)
- How to set up an S3 bucket to use with Transloadit (English)