Backup de arquivos na Cloud com AWS Amazon S3 e PHP
Dica publicada em Linux / Introdução
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.
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.
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.
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.
# php s3-send.php --bucket=<bucket> --file=<fullpath_filename>
AWS SDK for PHP Git repository:
Dica também publicada em:
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.php2. 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 );
}
?>
<?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: