AWS SDK for JavaScript (Node.js) で期限付きURLの発行

はじめに

AWS SDK for Ruby バージョン 2 で期限付きURLの発行の内容のJavaScriptバージョンです。 なので対象の準備とかは省略します。


# スクリプト **bucketname**、**objectname**、**uploadfile**と**アクセスキーID**と**シークレットアクセスキー**は適宜変更してください。 バケットのリージョンをTokyoにしなかった場合も適切なリージョンに変更する必要があります。
var AWS = require('aws-sdk');

var bucketname = "kohei-no-bucket";    // バケット名
var objectname = "ceresso.png";        // オブジェクト名

AWS.config.update({
    "accessKeyId": "********************",                          // アクセスキーID
    "secretAccessKey":"****************************************",   // シークレットアクセスキー
    "region": "ap-northeast-1"                                      // Tokyoリージョン
});

var s3 = new AWS.S3();
var params = {Bucket: bucketname, Key: objectname, Expires: 60};  // Expires:有効期限(秒)
s3.getSignedUrl('getObject', params, function (err, url) {
    console.log(url);
});

aws-sdkをインストールしておくのも忘れずに。

$ npm install aws-sdk

# 実践!
$ node presigned_url.js
https://kohei-no-bucket.s3-ap-northeast-1.amazonaws.com/ceresso.png?AWSAccessKeyId=********************&Expires=1472183082&Signature=gcmfSyy1xxWqAQnZANxNm1sWRXk%3D

# おわりに ポイントは[getSignedUrl](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property)です。Rubyでの[presigned_url](http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#presigned_url-instance_method)にあたります。 ただ、Rubyの場合は「**604800秒(1週間)**」の制限がありましたがJavaScriptの場合だとドキュメントに記載がないのでそれがないみたいで、期限付きURLも問題なく発行できました。 となると今回の場合は「**AWS SDK for JavaScript**」を利用した方が良さそうですね。