gulp,gulp-zip,node-aws-lambdaを使用してzip圧縮ファイルでLambdaをデプロイまたは圧縮するまで

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

以下のようなディレクトリ構成とします。

Gulp,node-aws-lambdaを使用してzip圧縮ファイルでLambdaをデプロイする方法

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

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でデプロイなどすればよいです。

gulpの基本的な使い方

コメント

タイトルとURLをコピーしました