5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node aws-sdk でS3へファイルアップロードをする

Posted at

この記事は、株式会社ACCESS Advent Calendar 2017の3日目の記事です。


あらまし

権限を持つ人だけがダウンロードできるURLを作る必要があったので、AWS S3とCloudFrontを使うことになりました。

自動化のため、AWS S3にファイルアップロードをしつつ、CloudFrontの署名生成をするプログラムをNode.js で実装しました。

準備

Node.js でaws-sdkをインストールします。

npm install --save aws-sdk

プログラム中で読み込み、CloudFrontでの公開期間を設定する。
公開期間は秒単位であることに注意する。

const AWS = require('aws-sdk');

const EXPIRATION_DATE = new Date(2038, 0, 1).getTime() / 1000;

環境変数からAWSの各種アクセスキーとシークレットを読み込みます。

if (!('AWS_ACCESS_KEY_ID' in process.env)) {
  console.error('ACCESS_KEY_ID is not set.');
}

if (!('AWS_SECRET_ACCESS_KEY' in process.env)) {
  console.error('SECRET_ACCESS_KEY is not set.');
}

if (!('CLOUDFRONT_ACCESS_KEY_ID' in process.env)) {
  console.error('CLOUDFRONT_ACCESS_KEY_ID is not set.');
}

if (!('CLOUDFRONT_SECRET_ACCESS_KEY_PATH' in process.env)) {
  console.error('CLOUDFRONT_SECRET_ACCESS_KEY_PATH is not set.');
}

const CLOUDFRONT_SECRET_ACCESS_KEY = fs.readFileSync(process.env.CLOUDFRONT_SECRET_ACCESS_KEY_PATH);

AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY は、aws-sdkが内部的に使用するのでチェックだけ行います。

S3へアップロードするためのインスタンスと、CloudFrontへアップロードするためのインスタンスを作ります。

const s3 = new AWS.S3({apiVersion: '2006-03-01'});
const signer = new AWS.CloudFront.Signer(process.env.CLOUDFRONT_ACCESS_KEY_ID, CLOUDFRONT_SECRET_ACCESS_KEY.toString());

S3へアップロードします。

s3.putObject({
  Bucket: 'バケット名',
  Key: '/path/to/file',
  Body: fs.readFileSync('/path/to/localFile')
}, (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

署名生成をします。

const url = 'http://yourdomain.jp/path/to/file';
const signedUrl = signer.getSignedUrl({
    url: url,
    expires: EXPIRATION_DATE,
});

これで完成です。


明日は @diescake です。お楽しみに!

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?