2.0.2 • Published 6 years ago

sync-to-s3 v2.0.2

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

upload-to-s3

This module and script synchronises a local directory (or checked out git repo) onto an S3 bucket. Files are uploaded to or deleted from the S3 bucket. files are never changed in the local directory, unless downloadDir() is called.

Installation

Install nodejs from http://nodejs.org/download/, clone out the upload-to-s3 Repo, and install required modules:

git checkout https://github.com/HughePaul/upload-to-s3.git
cd upload-to-s3
npm install

Command-line Interface

Create a config file in JSON format:

{
	"directory": "/path/to/directory",
	"bucket": "bucketname",
	"accessKeyId": "AWSAccessKey",
	"secretAccessKey": "AWSAccessSecret",
	"region": "eu-west-1",
	"ACL": "public-read"
}

Run the sync script:

./upload-to-s3 config.json

AWS Permissions

The following permissions are required as a minimum for the user performing a file sync:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname",
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}

Initialisation

var config = {
	"directory": "/path/to/directory",
	"bucket": "bucketname",
	"accessKeyId": "AWSAccessKey",
	"secretAccessKey": "AWSAccessSecret",
	"region": "eu-west-1"
};

var uploadToS3 = new UploadToS3(config);

Events

uploadToS3.on('directory', function(files) {
	console.log('Directory:', Object.keys(files).length, 'files');
});

uploadToS3.on('bucket', function(files) {
	console.log('Bucket:', Object.keys(files).length, 'files');
});

uploadToS3.on('diff', function(files) {
	console.log('Differences:', Object.keys(files).length, 'files');
});

uploadToS3.on('remove', function(filePath) {
	console.log('Removing S3 file', filePath);
});

uploadToS3.on('upload', function(filePath) {
	console.log('Uploading S3 file', filePath);
});

uploadToS3.on('download', function(filePath) {
	console.log('Downloading S3 file', filePath);
});

Methods

uploadToS3.diffDir(function(err, files) {
	if (err) return console.error('Error:', err);
	console.log(files);
});

uploadToS3.getBucketFiles(function(err, files) {
	if (err) return console.error('Error:', err);
	console.log(files);
});

uploadToS3.getDirFiles(function(err, files) {
	if (err) return console.error('Error:', err);
	console.log(files);
});

uploadToS3.syncDir(function(err) {
	if (err) return console.error('Error:', err);
});

uploadToS3.uploadDir(function(err) {
	if (err) return console.error('Error:', err);
});

uploadToS3.downloadDir(function(err) {
	if (err) return console.error('Error:', err);
});

Example

var config = {
	directory: "/path/to/directory",
	bucket: "bucket-name",
	accessKeyId: "AWSAccessKey",
	secretAccessKey: "AWSAccessSecret",
	region: "eu-west-1"
};

new UploadToS3(config)
	.on('remove', function(filePath) {
		console.log('Removing S3 file', filePath);
	})
	.on('upload', function(filePath) {
		console.log('Uploading S3 file', filePath);
	})
	.syncDir(function(err) {
		if (err) return console.error('Error:', err);
	});