Pre-Signed URL
S3はアクセス権を設定することで、誰でもファイルにアクセスできるようにしたり、できなくしたりが可能です。
Pre-Singed URLは誰でもファイルにアクセスできなくしているところに一時的にアクセスを許可することができます。
今回はこのPre-SingedをLamndaで発行してみたいと思います。
S3
バケットを準備して非公開の設定にしておきます。
テスト用に1つ画像ファイルをアップロードしておきましょう。
Lambda
今回はNode.jsでPre-Singed URLを発行します。
LambdaからS3にアクセスできるようにロールを設定しておきましょう。
コード
バケット名、ファイルパスは適宜変更して下さい。
Lambda
consts3=newAWS.S3()constparams={Bucket:'<バケット名>',Key:'<ファイルパス>',Expires:100// 期限(秒)}asyncfunctiongetPresignedUrl(){returnnewPromise((resolve,reject)=>{s3.getSignedUrl('getObject',params,(err,url)=>{if(err){reject(err)}else{resolve(url)}})})}exports.handler=async(event)=>{consturl=awaitgetPresignedUrl()return{url:url}}
これで署名付きのURLが返ってくるのでアクセスするとアップロードした画像が見れるはずです。