Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
40
Help us understand the problem. What is going on with this article?
@aquaviter

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を使って簡単に実装できるのがいいですね。これからもいろいろ試してみます。

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

40
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
40
Help us understand the problem. What is going on with this article?