PHPを使用して WordPress サイト等のバックアップデータを AWS S3 (Amazon Simple Storage Service) に送信する方法のメモ。
必要なもの
- AWS アカウント
- AWS IAM ユーザー(S3 バケットへのアクセス権限を持つ)
- AWS S3 バケット
- PHP 環境が動作するサーバー
- Composer (PHPの依存管理ツール)
スクリプトの概要
以下の PHP スクリプトは、AWS SDK for PHP を使用してファイルをマルチパートアップロード方式で AWS S3 にバックアップするものです。これにより、大容量のファイルも分割して効率的にアップロードできます。また、設定情報は別ファイル(config.php)に格納し、セキュリティを向上させます。
config.php の内容
まず、設定情報を別のファイル(config.php)に分けて管理します。
<?php
define('AWS_ACCESS_KEY_ID', '********************');
define('AWS_SECRET_ACCESS_KEY', '********************');
define('S3_BUCKET', 'example.com');
define('DB_NAME', 'xxxxx_dbname');
define('XSV_ID', 'xxxxx');
?>
メインスクリプトの内容
次に、メインスクリプトを修正して、config.php から設定情報を読み込むようにします。
<?php
require 'vendor/autoload.php';
require 'config.php';
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
$version = $argv[1] ? $argv[1] : date('Ymd').'01';
$s3client = S3Client::factory([
'credentials' => [
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_ACCESS_KEY,
],
'region' => 'ap-northeast-1',
'version' => 'latest',
]);
// ファイルリスト
$target_list = [
[
'file' => "/home/" . XSV_ID . "/backup/" . S3_BUCKET . "/{$version}/{$version}_" . S3_BUCKET . ".tar.gz",
'key' => "backup/{$version}/{$version}_" . S3_BUCKET . ".tar.gz",
'type' => 'gz'
],
];
foreach ($target_list as $target) {
// Prepare the upload parameters.
$uploader = new MultipartUploader($s3client, $target['file'], [
'bucket' => S3_BUCKET,
'key' => $target['key']
]);
// Perform the upload.
try {
$result = $uploader->upload();
echo "Upload complete: {$result['ObjectURL']}" . PHP_EOL;
} catch (MultipartUploadException $e) {
echo $e->getMessage() . PHP_EOL;
}
}
スクリプトの解説
- 必要なライブラリと設定ファイルの読み込み:
vendor/autoload.php
を読み込み、AWS SDK for PHP を利用可能にします。config.php
を読み込み、設定情報を定数として利用します。
- 設定情報の定義:
config.php
ファイルで定義された定数を使用して、S3 クライアントの設定を行います。
- S3 クライアントの作成:
- AWS SDK を使用して S3 クライアントを作成します。
- ファイルリストの準備:
- バックアップ対象のファイルをリストアップします。今回は tar.gz ファイルのみを例としています。
- マルチパートアップロードの初期化と実行:
MultipartUploader
を使用してファイルを S3 にアップロードします。エラーが発生した場合は例外をキャッチしてメッセージを表示します。
コメント