🍑

[S3×AWS SDK for PHP]バケットで最も古いオブジェクトを取得する

2022/04/21に公開

概要

S3バケットから最も日時の古いオブジェクトを取得するサンプルコード(覚書き)

コード

getOldest.php
<?php

// AWS SDK for PHPの読み込み
require_once('/usr/lib/vendor/autoload.php');

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

// アクセスキー、シークレットアクセスキーの設定
define('AWS_ACCESS_KEY_ID', 'xxxxxxxxxxxxxxxx');
define('AWS_SECRET_ACCESS_KEY', 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy');

// タイムゾーンの設定
date_default_timezone_set('Asia/Tokyo');

// バケット名、リージョンを設定
$bucket = 'zzzzzzzzzzzzzzz';
$region = 'ap-northeast-1';

$s3Client = new S3Client([
    'region' => $region,
    'version' => 'latest',
    'credentials' => [
        'key' => AWS_ACCESS_KEY_ID,
        'secret' => AWS_SECRET_ACCESS_KEY,
    ],
]);

// バケット内のオブジェクト一覧を取得
$results = $s3Client->listObjects([
    'Bucket' => $bucket
])['Contents'];

$objects = array();

// 取得したオブジェクトから必要な要素(キー = ファイル名、日付: ソート用)を取得
foreach ($results as $result) {
    $lastModified = (array)($result["LastModified"]);
    array_push($objects, ['file' => $result["Key"], 'date' => $lastModified["date"]]);
}

// 並び替えの基準(date)を取得
$dates = array_column($objects, 'date');
// 以下PHP5.4用
/*
$dates = [];
foreach($dates as $date) {
    $dates[] = $objects['date'];
}
*/

// dateの昇順でソート
array_multisort($dates, SORT_ASC, $objects);
// dateのいちばん古いものを取得

try {
    // dateのもっとも古いファイルをtmpディレクトリ下にDL
    $result = $s3Client->getObject([
        'Bucket' => $bucket,
        'Key'    => $objects[0]['file'],
        'SaveAs' => './tmp/' . $objects[0]['file']
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

参考

Discussion