É possível fazer upload de arquivos diretamente para o Amazon S3 e editá-los?

2

Estou enfrentando esse problema, desejo permitir que os usuários façam upload de seus arquivos diretamente no meu bucket no Amazon S3. Essa etapa pode ser realizada facilmente, como descrito aqui .

Mas e se eu precisar editar cada arquivo com FFMPEG ?

shell_exec('ffmpeg -i /sample.wav -acodec libmp3lame /sample.mp3');

Atualmente eu armazeno arquivos no meu servidor, executo comandos shell, então eu uso putObject para enviá-los para o S3, mas existe uma maneira melhor de conseguir isso, deixando meu servidor silencioso?

Minhas especificações:

  • EC2 com a instalação LAMP executando o Ubuntu 14.04
  • PHP do SDK da AWS
por NineCattoRules 20.10.2016 / 10:54

1 resposta

1

Meu entendimento da sua solução me leva a pensar que você deseja usar o mesmo servidor ubuntu que você já tem para realizar também a transcodificação de seus arquivos de mídia carregados.

O problema é que objetos armazenados no S3 não são acessíveis como arquivos em um sistema de arquivos normal, você pode baixar o arquivo do S3 e processá-lo na instância do servidor web, mas seria uma configuração complicada e potencialmente ineficiente.

Seria melhor desacoplar o processo de transcodificação do seu servidor Ubuntu e deixar que isso acontecesse no verdadeiro estilo da nuvem. A melhor solução para isso é eventos S3 e Lambda.

Portanto, com base no meu entendimento do seu caso de uso, aqui está o que eu recomendaria para sua solução:

  1. Crie um bloco com as permissões apropriadas para receber arquivos (melhor não torná-lo público ou suas contas ficarem caras)
  2. Crie um evento do S3 para acionar o Lambda quando um objeto for criado / colocado / atualizado (dependendo do que você deseja desencadear e de como os arquivos são colocados no S3)
  3. Use o lambda para processar seu arquivo ou peça ao Lambda que inicie uma instância que tenha um script UserData que fará o trabalho.

Com relação ao UserData da instância, veja as etapas que você pode realizar:

  1. faça o download do ffmpeg
  2. instale o ffmpeg
  3. baixe do s3 o arquivo (você pode passar este argumento do lambda)
  4. processa o arquivo usando o ffmpeg
  5. faça o upload do arquivo para s3
  6. use o serviço de metadados ec2 para procurar o ID da instância da instância
  7. execute o comando aws cli para encerrar uma instância fornecendo o ID da instância resolvida.

Poderia ser melhor criar uma AMI que já tenha o ffmpeg instalado, mas você precisaria decidir se é mais barato gastar 5 minutos sysprep cada instância ou pagar por uma AMI para sempre estar disponível. Eu diria que, a menos que o processamento demore mais de uma hora ou o caso de uso precise que o arquivo seja retornado o mais rápido possível, seria melhor instalar o ffmpeg toda vez como contas da AWS por horas inteiras, mesmo que você use apenas 15 minutos. >

Recomendações para esta abordagem:

É provável que você deseje realizar outras atividades quando o arquivo recém-processado for criado, então por que não usar os eventos s3 para disparar outro processo do Lambda? :)

Além disso, para ajudar a manter as coisas limpas, se sua solução permitir, tente enviar seus arquivos criados para s3 em um caminho de chave diferente para onde você colocou os arquivos enviados.

Opção alternativa: usar transcodificador elástico

Uma opção alternativa é fazer uso do serviço AWS Elastic Transcoder. Você deve enviar trabalhos para o transcodificador da mesma maneira, acionando o lambda quando um bucket do S3 é atualizado e fazendo com que ele processe os arquivos nesse bucket. O Elastic Transcoder pode, então, notificar uma fila do SNS que, então, pode acionar um email ou outra consulta do Lambda para lidar com o arquivo criado.

Elastic Transcoder seria uma abordagem mais legal e provavelmente melhor, mas exigirá um pouco mais de trabalho.

O Elastic Transcoder exige que você crie um pipeline e crie um trabalho usando esse pipeline. Eu te ligarei o JavaScript SDK para cada um.

CreatePipline link

CreateJob link

Uma solução alternativa alternativa: use o Amazon SQS

Se você quiser que o processamento ocorra na instância do ubuntu em vez de girar outra instância a partir do Lambda, você poderá usar os eventos S3 para acionar o lambda para publicar uma tarefa no Amazon SQS.

O Amazon SQS permitirá que um agente de sua própria criação faça uma pesquisa no Amazon SQS para trabalhos que permitirão que você faça referência a um arquivo em s3 que precise de transcodificação. Isso é bastante complicado e eu só o incluo por completo e a menos que você realmente precise executar este trabalho na instância do ubuntu que você já tem.

    
por 22.10.2016 / 10:38