Backup de arquivos na Cloud com AWS Amazon S3 e PHP

Publicado por Edilson Osorio Junior em 15/01/2013

[ Hits: 8.422 ]

 


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

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

Corrigindo erro ao adicionar plugin AddThis no Joomla! 3.0

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

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

Leitura recomendada

Desvendado o aMSN para Ubuntu Linux rodando em MAC

Personalizando a tela de login do Ubuntu 7.04

Tirar permissão de root para conexão SSH

Instalando Scratch Offline Editor no Ubuntu 16.04

Instalação da placa Broadcom BCM4312 no Debian Squeeze

  

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