AWS LambdaでS3更新時にJavaScriptを難読化する

 Lambda IAM S3 AWS-SDK JavaScript CloudFormation
2014.12.25

前回に続きAWS Lambda。
JavaScriptをS3へアップロードするたびに、Lambdaを使って難読化してみます。

 

0. このLambdaが役に立つのはどんなとき?

開発時にはS3へJavaScriptをそのままアップロードしており、
構文チェック・難読化も同時に行いたいときなど。
 

1. IAMロールの作成

例によって、必要最小限のロールを作るCloudFormationテンプレートを用意しました。
 
CloudFormationでRoleを作成する

 
(特定のバケットのみの挙動をLambdaに許可したい場合は、CloudFormationの実行時引数に
 バケット名を、どのバケットでも使えるようにする場合は * のままご利用ください)

 

2. YUI CompressorのjarをS3にアップする

JavaScriptを難読化したいバケットに
あらかじめ利用するJarを置いておく必要があります。
ここにあるJarを該当のS3へアップロードしてください。

 (試行錯誤した結果、そこに妥協しました・・)  

3. Lambdaのzipパッケージを作る

Lambdaのコードはこちら。
 

ローカルの作業フォルダに、index.jsとして保存してください。
 
コメントアウトしている部分ですが・・
原因は追っていませんが、Google社のClosure Compilerでは
タイムアウトしてしまい、圧縮までたどり着きませんでした・・。
 
さてAWS-SDK以外に必要なパッケージをzipにまとめるため、
以下のようにnpm installやらzip

$ cd 作業フォルダへ
$ npm install async
$ npm install mkdirp
$ zip -r s3-compile-js.zip index.js node_modules

 

4. コンソールからLambdaをセットアップ

3.で作成したzipをアップロードし、CloudFormationで生成したロールをexecutionroleと、
invocationroleに設定します。イベント通知を行うS3バケットの指定も忘れずに。
 
ここまで設定すれば、あとは指定したS3バケットへJavaScriptを
アップロードすれば、難読化されたファイルが隣に生成されます!!
 
 
スクリプトを少し応用すれば、
・構文解析に失敗した(不正な構文だった)ときにSNSから通知したり
・アップロード先のバケットは本番環境用に変更したり
といったことが可能です。
 
Lambdaいいね