Implantação em milhares de contas do Amazon S3?

5

Executamos um serviço no qual fornecemos o 'trabalho' de um aplicativo baseado na Web (PHP) e as imagens, JS, CSS etc. são hospedadas nas próprias contas do Amazon S3 dos clientes.

Isso é para que eles tenham uma fatura consolidada para o uso do S3 (o aplicativo faz uso do próprio S3) e não temos que subsidiar a largura de banda deles (não há cobrança mensal, portanto, à medida que cresce, custaria apenas nos mais e mais dinheiro).

Temos mais de 1000 clientes no momento e enviar uma atualização para eles (uma atualização do JS, por exemplo) leva um tempo incrivelmente longo e esse número crescerá exponencialmente nos próximos meses.

Eu considerei um repositório de origem S3 pertencente a nós e, em seguida, fazendo solicitações de COPY em vez de uploads entre o bucket do S3 e o deles. Isso ainda levaria tempo, mas será MUITO mais rápido do que o upload agora. No entanto, ouvi dizer que não há como copiar entre duas contas S3 totalmente separadas sem usar um servidor intermediário (o que obviamente anula o objeto e realmente dobraria o tempo).

Isso é verdade? Alguém pode pensar em um método alternativo para fazer isso?

    
por Marc Fowler 27.05.2011 / 16:35

1 resposta

1

Essa é uma boa pergunta.

A última vez que chequei até COPY entre diferentes regiões não funcionou. Eu sei que o aplicativo Explorer do Cloudberry tem um recurso para copiar dados entre contas do S3, você pode fazer um teste com isso? Eu não tentei, é apenas no Windows.

Acho que, se funcionar, é uma questão de tentar a API.

Todos os seus clientes estão na mesma região? Porque se COPY entre contas não funcionasse, eu inicializaria uma instância (ou várias) para acelerar o processo. Se todos estiverem na mesma região, não será cobrada nenhuma taxa de largura de banda.

Isso não é o ideal, mas acho que com várias instâncias você pode fazer muito trabalho por menos de 10 dólares. E deve ser possível automatizar a configuração também.

Atualizar

Então, para elaborar sobre EC2. Uma instância do EC2 é igual a outro servidor. Eu sugeri isso originalmente para que você possa fazer o download do arquivo uma vez e enviá-lo para outras contas do S3 dentro AWS para economizar dinheiro em largura de banda (é grátis se o bucket e a instância estiverem na mesma região). / p>

De qualquer forma, como uma instância do EC2 é como um servidor, seria necessário configurar um pouco para inicializá-lo. Por exemplo. uma AMI customizada, ou qualquer AMI e algum user-data (script de shell passado para a instância e executado na primeira inicialização). Provavelmente você precisaria instalar o PHP, o Amazon SDK etc. - tudo isso pode ser automatizado.

O problema é que não tenho certeza se isso é necessário no seu caso.

Confira o seguinte código de exemplo: link

Ele mostra como copiar dados de um depósito para outro. Como os nomes dos buckets são únicos em todo o S3, isso não deve ser um problema. Acho que tudo o que você precisa fazer é dar leitura nos arquivos para todos em sua própria conta da AWS (pelo menos temporariamente) e, em seguida, fazer um loop e copiar os arquivos contas da AWS dos seus clientes.

Acho que você pode emitir esse código em qualquer lugar e não precisa se preocupar com cobranças de largura de banda, pois COPY deve ser todo interno. Nenhum download do arquivo real necessário.

Não tenho certeza se você revisou a documentação , mas parece que a AWS exige algum tipo de cabeçalho de origem ( x-amz-copy-source ) e depois cuida do resto.

HTH

    
por 27.05.2011 / 19:12