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