gulp,gulp-zip,node-aws-lambdaを使用してzip圧縮ファイルでLambdaをデプロイまたは圧縮するまで
gulp,gulp-zip,node-aws-lambdaモジュールを使用してローカルで作成したLambdaを圧縮してデプロイすることができます。
$ npm install -g npx | |
$ npm install gulp gulp-zip node-aws-lambda –save-dev | |
$ touch gulpfile.js |
以下のようなディレクトリ構成とします。
gulpfile.jsにタスクを書きます。
タスク | 内容 |
---|---|
zip | 圧縮する |
upload | アップロードする |
lambdaディレクトリ配下にlambdaがあり、それをzipタスクで圧縮、uploadでデプロイします。
以下、gulpfile.jsです。
const gulp = require('gulp'); | |
const zip = require('gulp-zip'); | |
const lambda = require('node-aws-lambda'); | |
const config = { | |
region: 'ap-northeast-1', | |
handler: 'index.handler', | |
functionName: 'gulp', | |
role: 'arn:aws:iam::xxxxxxxxxxxx:role/service-role/test-gulp-xxxx', // 再デプロイ時は省略可能 | |
runtime: 'nodejs12.x' | |
}; | |
gulp.task('zip', function() { | |
return gulp.src(['lambda/**/*', '!lambda/package.json', '!lambda/package-lock.json']) | |
.pipe(zip('./lambda.zip')) | |
.pipe(gulp.dest('./')); | |
}); | |
gulp.task('upload',function(callback) { | |
config.functionName = 'test-' + config.functionName; // 引数渡してプレフィックスつけたい(test-,prod-,…) | |
lambda.deploy('./lambda.zip', config, callback); | |
}); |
これで、npx gulp zip
コマンドで圧縮します。その次にnpx gulp upload
でデプロイが完了します。とりあえずのデプロイが出来ることを確認しましたが、ちゃんとデプロイするにはrun-sequenceやgulp-installモジュールなどでnpm i --production
をする必要があります。
Lambda→Zip圧縮まで
デプロイはcloudformationなどでデプロイすることも可能です。ここではLambdaをzip圧縮するまでです。
srcのbaseオプションに以下を指定する必要があります。
でないと、zipファイルをデプロイしても正常に動作しません。./tmp/配下に圧縮したいファイルが存在するとします。
gulpfile.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
const gulp = require('gulp') const zip = require('gulp-zip') const install = require('gulp-install') const target = [ './tmp/*.js', // target './tmp/node_modules/**/*', // target '!package.json', // omit '!package-lock.json' // omit ] const options = { base: 'tmp', nodir: true, dot: true } function lambdaDeploy() { return gulp .src(['./src/lambda/sample/**']) .pipe(gulp.dest('./tmp')) .pipe(install({ production: true })) } exports.lambdaDeploy = lambdaDeploy function lambdaZip() { return gulp .src(target, options) .pipe(zip('lamgda.zip')) .pipe(gulp.dest('./zip')) } exports.lambdaZip = lambdaZip exports.deploy = gulp.series( lambdaDeploy, lambdaZip ) |
npx gulp deploy
でzipファイルが作成されます。あとはcloudformationでデプロイなどすればよいです。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^