PHP | AWS S3 へのバックアップデータを送信する方法

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;
    }
}

スクリプトの解説

  1. 必要なライブラリと設定ファイルの読み込み:
    • vendor/autoload.php を読み込み、AWS SDK for PHP を利用可能にします。
    • config.php を読み込み、設定情報を定数として利用します。
  2. 設定情報の定義:
    • config.php ファイルで定義された定数を使用して、S3 クライアントの設定を行います。
  3. S3 クライアントの作成:
    • AWS SDK を使用して S3 クライアントを作成します。
  4. ファイルリストの準備:
    • バックアップ対象のファイルをリストアップします。今回は tar.gz ファイルのみを例としています。
  5. マルチパートアップロードの初期化と実行:
    • MultipartUploader を使用してファイルを S3 にアップロードします。エラーが発生した場合は例外をキャッチしてメッセージを表示します。

関連記事

コメント

タイトルとURLをコピーしました