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
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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント