Backup de arquivos na Cloud com AWS Amazon S3 e PHP

Publicado por Edilson Osorio Junior em 15/01/2013

[ Hits: 8.461 ]

 


Backup de arquivos na Cloud com AWS Amazon S3 e PHP



Boas práticas de segurança da informação ditam que não se deve manter os backups somente na mesma máquina onde os dados principais estão.

Para ajudar a resolver este ponto específico, manter cópias dos backups em ambiente externo à empresa, vamos exemplificar como utilizar a Amazon S3 como storage para seus dados.

Criando o repositório de dados na Amazon S3 (bucket)

Se não estiver cadastrado ainda, entre no site abaixo e crie sua conta:
Na guia: Services → S3
Clique em: Create Bucket

Agora, anote as chaves de acesso da sua conta para que seu script possa efetuar login automaticamente e gravar os arquivos:

AWS → Security Credentials: E anote o seu Access Key ID e o Secret Key ID.

Obs.: Buckets são os repositórios que irão conter os arquivos. Coloque o nome e a região onde você quer criá-la e clique em: Create

* Importante: Lembre-se de manter esses dados guardados em um lugar seguro, pois dão acesso à sua conta no AWS.

Instalando o AWS SDK for PHP (AWSSDKforPHP)

Formas de obter o SDK:

1. Faça download do arquivo em:
2. Instalar usando Git:

sudo git clone git://github.com/amazonwebservices/aws-sdk-for-php.git AWSSDKforPHP

Existem outras formas, como SVN, PEAR ou Composer, Phar; mas utilizei o Git porque é simples e rápido.

Configurar o SDK com suas credenciais de acesso

1. No diretório do SDK já há o arquivo config-sampe.inc.php. Copie-o para: ~/.aws/sdk/config.inc.php

2. Edite-o e insira sua Access Key ID no campo 'key' e Secret Key ID no campo 'secret'

3. Vá na pasta "_samples", dentro do SDK, e execute:

# php cli-s3_get_urls_for_uploads.php

Se você voltar em: AWS → S3, verá que foi criado um novo bucket e este contém alguns arquivos de mídia. Com isto feito, o SDK está instalado e pronto para funcionar.

Script de backup (s3-send.php)

Este script deve ser executado da seguinte forma:

# php s3-send.php --bucket=<bucket> --file=<fullpath_filename>

#!/usr/bin/php
<?php
/*
* Script:      s3-send.php
* Author:      Edilson Osorio Junior
* Contact:     ml: osorio.edilson at eddieoz dot com | twttr: eddieoz
* Date:        2013-01-04
* Description: This script backups a file to some amazonS3 bucket
* Requisites:  - An AWS Amazon account
*              - S3 bucket
*              - Functional AWS SDK for PHP installed
* Usage:       s3-send.php --bucket= --file=<fullpath_filename>
*
* More information on http://www.eddieoz.com/us/articles/cloud-computing/43-backup-de-arquivos-na-aws-amazon-s3
*/

error_reporting(-1);
        header("Content-type: text/plain; charset=utf-8");
        # SDK AWS for PHP
        require_once '/installed/binaries/AWSSDKforPHP/sdk.class.php';
        # Get and test parameters
        $shortopts  = "";
        $longopts  = array(
            "bucket:",
            "file:",
        );
        $param = getopt($shortopts,$longopts);
        if ( count($param) < 2 ){
                print("Params: --bucket= --file=\n");
                exit(1);
        }
        $fullpath_filename = $param['file'];
        $bucket = $param['bucket'];
        # Initialize AmazonS3
        $s3 = new AmazonS3();
        # Get just the filename, without path
        $filename = explode(DIRECTORY_SEPARATOR, $fullpath_filename);
        $filename = array_pop($filename);
        # Prepare to send the file
        $s3->batch()->create_object($bucket, $filename, array('fileUpload' => $fullpath_filename));
        # send the file and get response, thats an array
        $file_upload_response = $s3->batch()->send();
        # Consists the return
        if ($file_upload_response->areOK())
        {
                # Show the full URL to access the file.
                echo $s3->get_object_url($bucket, $filename, '5 minutes') . PHP_EOL . PHP_EOL;
        }
        else
        {
                # On error, show the xml
                print_r( $file_upload_response );
        }
?>

Links de apoio

Instalando o AWS SDK for PHP:
AWS SDK for PHP Git repository:
Dica também publicada em:
Outras dicas deste autor

MySQL, Amazon Web Services (AWS) EC2 e Out of Memory (OOM)

Erro ao instalar Fedora 17 usando Kickstart por PXE e com IP fixo [Resolvido]

Corrigindo erro ao adicionar plugin AddThis no Joomla! 3.0

Problemas com driver Wi-Fi Broadcom b43 em netbook HP [Resolvido] - Fedora 17

Leitura recomendada

Arch BSD: distro da comunidade Arch Linux, mas com kernel FreeBSD

Bloqueando anúncios do Spotify Free no Linux

Protegendo suas páginas com .htaccess do Apache

VPN em ISA Server 2000 com Ubuntu 9.10 64 bits

Instalação do Teclado Virtual (JAVA) no Ubuntu

  

Comentários
[1] Comentário enviado por eldermarco em 15/01/2013 - 13:39h

Escuta, e quanto a Amazon cobra por isso?

[2] Comentário enviado por osoriojr em 15/01/2013 - 14:09h

Para armazenamento em São Paulo, a tabela de preços hoje está em $0,130 por mês por GB, até o primeiro TB. Depois disso cai para $0.110 por mês por GB até os 49TB.

O interessante é que transfer in, ou seja, enviando dados para o S3, não já cobrança. Somente o transfer out e isso após o 1o GB mensal.

Pode ver os preços em: http://aws.amazon.com/s3/pricing/ e escolhe a região South America (São Paulo)

Abraço!

[3] Comentário enviado por eldermarco em 15/01/2013 - 14:14h

Aparentemente está muito barato. Tu acha que vale a pena para uma pessoa comum utilizar um serviço desses para backup?

[4] Comentário enviado por osoriojr em 15/01/2013 - 14:22h

Se você analisar bem, é muito mais barato que o Dropbox! A única coisa é que ele não tem a interface do Dropbox para sincronizar todos seus gadgets e computadores. Eu mesmo utilizo a mais de ano como backup de fotos e arquivos antigos (depois de perder vários hds com o tempo)

Se você marcar a opção de redundância reduzida para arquivos que não tem essa necessidade, o armazenamento fica ainda mais barato.

Eu aconselharia você a fazer um teste: Crie uma conta lá, não esqueça de setar a região para São Paulo (senão há custo de transferência entre regiões/países), vá em Serviços -> S3 e crie um bucket (é como se fosse uma pasta) para guardar alguns arquivos. Então suba alguns arquivos para se ambientar.

Aguarde um mês e veja seu extrato do cartão :D

É a melhor forma de pegar confiança no serviço!

Além disso, você ainda tem a opção de transformar um bucket em um website de páginas estáticas...

Se você testar, depois me dá um feedback do que achou ok!

Grande abraço!

[5] Comentário enviado por eldermarco em 15/01/2013 - 14:36h

Boa! Vou pensar com carinho nessa alternativa. Gostei dela e ando precisando de alguma solução do tipo. Tenho arquivos importantes na minha máquina que não poderia ser perdidos. Atualmente eu faço o backup para um outros computador, mas um serviço online é bastante útil, visto que computadores podem ser roubados.

Valeu mesmo!

[6] Comentário enviado por osoriojr em 15/01/2013 - 14:43h

Bom, qualquer coisa só chamar!!! []'s



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts