S3上のファイルをMojoliciousでproxyして返す
6 日目 by @takkyuuplayer
S3 上においてあるファイルを、 アプリ側で認証した人にだけアクセス許可したい事がある。 今回はMojolicious で S3 上のファイルを proxy して返した話。
早速コード
S3への直接のアクセスは禁止だが、
アプリ経由ならok
use common::sense; use Carp (); use FindBin qw($Bin); use lib $Bin . '/../local-git/lib'; use Constants qw(AWS_S3); use Mojolicious::Lite; use Amazon::S3; get '/s3' => sub { my $self = shift; my $s3 = Amazon::S3->new({ aws_access_key_id => AWS_S3()->{access_key}, aws_secret_access_key => AWS_S3()->{secret_key}, }); my $backet = $s3->bucket('tp-sandbox'); my $response = $backet->get_key('logo.gif'); $self->res->headers->content_type($response->{content_type}); $self->res->headers->content_length($response->{content_length}); $self->render(data => $response->{value}); };
これで転送できる。
ただ, 転送するだけのために 一度$response変数に格納するのは メモリの無駄遣いなので、直接転送する方法があれば知りたい
次回予告
明日の担当も @takkyuuplayer です。