php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

AWS S3 大きいファイルをWEBからダウンロードする

AWS S3 大きいファイルをWEBからダウンロードする

S3にログファイルなどを保存して開発者ツールを作ったときのメモ

S3に保存してAWSマネジメントコンソールにログインしてダウンロードするのはIAMでアカウントやら権限やら居なくなった人のアカウント管理やら面倒で・・・
そんなことが面倒なので会社からしかアクセスできない開発者ツールでダウンロードできるようにした。

しかし、ファイル自体が1G弱あるものもありAWS-SDK(ちなみにfor PHPです)のS3ClientでgetObjctしたものをechoするような手順だとメモリ使うんでタイムアウトやら負荷になるやらいいことがなく。。
ストリーミングダウンロードにしようかとしたけどうまくいかず・・・

そんなとき調べていたらいい方法がありました!

AWSで期限付きのダウンロードURLを発行できるということ

なのでその時のことを記録に残します。
※ところどころ端折って書いたり自作クラスは日本語で書いています。

こんなツールになりました。
プロジェクトや環境、ログの種類を選択すると対象ログ種別の一覧を取得

$s3 = new 【自前S3クライアント生成クラス】();
$response = $s3->listObjects(
                                $bucket,
                                $s3->【自前プレフィックス生成メソッド】($service, $env)
);
$num = count($response['Contents']);
$ret = array();
for($i=1; $i< $num; $i++) {
    $split = explode("/", $response['Contents'][$i]['Key']);
    $ret[] = end($split);
}

こんな感じでファイル名を取得しテンプレートで一覧を表示

ファイルA
ファイルB

ファイル名をクリックするとダウンロードURLを発行するアクションへ

$s3 = new 【自前S3クライアント生成クラス】();
$target = $s3->【自前プレフィックス生成メソッド】($service, $env) . '/' . $file_name;
$cmd = $s3->getCommand('GetObject', $bucket, $target);
$result = $s3->createPresignedRequest($cmd, '+30 seconds');
$uri = (string)$result->getUri();

getCommand は後でHTTPリクエストを転送するために使用されるパラメータとハンドラをカプセル化するものらしいです。
getObjectするとファイルの取得が始まってしますので後で実行できる形式にしてからcreatePresignedRequestで期限付きのURLを発行するみたいですね。
※期限の最長は無限ではありません

このURLをテンプレートにリンクを生成して期限あるから気をつけてねって表示したらユーザーにクリックしてもらい出来上がりです。

URLを生成したほうがこちらのサーバに負担がかからずにできるのでいいですね

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする