LoginSignup
1
2

More than 5 years have passed since last update.

GruntからS3にファイルアップロード

Last updated at Posted at 2016-08-03

概要

 gruntでローカルのリソースをS3にアップロードする方法
 個人的な利用シーンとしては、モバイルアプリのビルド後に検証用に都度S3にアップロードするが、毎回手動でS3にアップロードするのはさすがにダルいので、その作業をスマートにするためにgruntでアップロードさせるようにしました

環境準備

 node.jsおよびgruntが導入済みという前提とさせて頂きます
 未導入の方は以下の記事をご参照ください

 Grunt導入方法

grunt-awsのインストール(AWS接続用のプラグインの導入)

 詳細:grunt-aws

npm install --save-dev grunt-aws

AWS認証用のjsonファイルの作成

 S3にAPI接続するためにはアクセスキーIDシークレットアクセスキーが必要になります
 それらをもとに下記のjsonファイルを作成します
 取得方法はこちらをご覧ください

 ※IAMでユーザ作成直後にシークレットアクセスキーを控えていない場合は、
  アクセスキーを再作成することで新たにシークレットアクセスキーを取得することができます
  IAMで新規ユーザを作成した場合は、S3に適切なロールを適用していることが必要になります

aws-credentials.json
{
    "accessKeyId": "aaaaaaaaaaaaaaa",
    "secretAccessKey":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}

gruntfile.jsの作成

 grunt実行するための設定ファイルの作成
 以下はサンプルの一例です
 サンプル以外にもパラメータがありますので、
 詳細はこちらをご覧ください

gruntfile.js
module.exports = function(grunt) {

    grunt.initConfig({
        aws: grunt.file.readJSON("aws-credentials.json"),    //上記のaws-credential.jsonを読み込む
        s3: {
            options: {
                accessKeyId: "<%= aws.accessKeyId %>",           //読み込んだaws-credentials.jsonのaccessKeyId値
                secretAccessKey: "<%= aws.secretAccessKey %>",   //読み込んだaws-credentials.jsonのsecretAccessKey値
                bucket: "バケット名",
                region: "ap-northeast-1",        //Tokyoであれば、そのままでOK
                //その他のregionは  http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
                cache: false,                    //アップロード対象のファイルに変更がなくてもアップロードする場合はfalse
                access: "public-read",           //アップロード後のアクセス権限を読み取り公開
                gzip: false                      //アップロード対象によってファイル(apk)が破損することがあるので、falseにしました
            },
            upload: {
                files: [{
                    cwd: "bin/",                 //ローカルのbinフォルダ配下
                    src: "**/*.html",            //binフォルダ配下のすべてのhtmlファイルを対象とする(ワイルドカードを使用可能)
                    dest: "public/"              //アップロード先のS3のバケット配下のディレクトリ
                },{
                    cwd: "dev/",                 //複数対象の場合は{cwd: "", src: "", dest: ""}を繰り返す
                    src: "**/*.js",
                    dest: "public/"
                }]
            }
        }
    });

    grunt.loadNpmTasks('grunt-aws');            //pluginの読み込み

    grunt.registerTask('upload-s3', ['s3']);    //gruntタスクに登録するタスク名は適当につけてOK

};

gruntタスクの実行

 grunt upload-s3

その他

 個人的にアップロード作業の簡素化を手軽に始められたのがgruntだったのでやってみましたが、もし、その他にGoodなアイデアがありましたら、ご教授頂ければ幸いです。ゆくゆくはJenkinsでビルドして、S3にアップロードさせるような一連のフローを作りたいです

以上

1
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
1
2