Help us understand the problem. What is going on with this article?

AWS Lambdaを使ってS3の署名付きURLを自動的に発行する

More than 5 years have passed since last update.

はじめに

普段、メールに添付できないような容量の大きいファイルをやりとりするために、S3の署名付きURLを使っています。その他の用途でも、期間限定で特定の人にだけファイルを渡したいときに使うと非常に便利です。

署名付きURLを使用したオブジェクトのアップロード

ただし、署名付きURLの作成にはSDKを利用して自分でコーディングする必要があります。自分の場合、Pythonのコードを書いてました。さらに、アップロードの後にファイル名を指定してコードを実行する必要があるので、ちょっと面倒です。

というわけで、今回はlambdaを利用して特定のバケットに入ったファイルに対し、自動的に署名付きURLを発行し、SNSによりメールで通知する(自分に)を作ってみたいと思います。

処理の流れ

  1. S3にファイルをアップロード
  2. LambdaでEventを受信
  3. Lambda FunctionでS3の署名付きURL取得&SNSへパブリッシュ
  4. SNSでメール送信

20141204.png

事前準備

  • PUT用S3バケットの準備
  • SNSのトピック作成

Lambdaへの関数登録

S3のアップロードのイベントをトリガとして、S3の署名付きURL取得とSNS送信を行います。本当に簡単に実装できました。
有効期限を300秒としてますので、適宜変更してください。

s3signedurl.js
var aws = require('aws-sdk');
exports.aws = aws;

exports.handler = function(event, context){

    var expired_period_sec = 300;
    var bucket = event.Records[0].s3.bucket.name;  
    var key    = event.Records[0].s3.object.key;   

    //S3署名付きURL取得
    var s3 = new aws.S3( {Bucket: bucket, Key: key} ); 
    var params = {Bucket: bucket, Key: key, Expires: expired_period_sec}; 
    var url = s3.getSignedUrl('getObject', params);  
    console.log('The URL is', url);

    //SNSでURL送信
    var sns = new aws.SNS({params: {TopicArn: '<SNSのTopic ARN>'}});
  sns.publish({Message: url}, function (err, data) {
        if (!err) {
            console.log('Message published');
            context.done(null,'');
        }else{
            console.log("Err");
            context.done('Err',err);
        }
    });
};

気をつけること

Lamba実行のIAM roleにSNSのpublish権限を付与する必要がありますので、お忘れなく。

さいごに

周りのLambda熱におされて、自分も何か作らねば・・・と思い、とりあえず簡単なものから試してみました。
ちょっとしたことでもLambdaを使って簡単に実装できるのがいいですね。これからもいろいろ試してみます。

免責事項:こちらは個人の意見で、所属する企業や団体は関係ありません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした