UNPKG

bam-lambda

Version:

Serverless framework for AWS Lambda and API Gateway

90 lines (75 loc) 2.57 kB
const { asyncLambdaCreateFunction } = require('./awsFunctions'); const { zipper } = require('../util/zipper'); const installLambdaDependencies = require('../util/installLambdaDependencies'); const bamBam = require('../util/bamBam'); const bamSpinner = require('../util/spinner'); const getDescription = require('../util/getDescription'); const { bamLog, bamWarn, msgAfterAction, } = require('../util/logger'); const { createDirectory, readConfig, copyDir, copyFile, readFile, rename, getStagingPath, exists, } = require('../util/fileUtils'); const cwd = process.cwd(); module.exports = async function deployLambda(lambdaName, path, roleName, dir) { const stagingPath = getStagingPath(path); const config = await readConfig(path); const { accountNumber } = config; const role = roleName || config.role; const renameLambdaFileToIndexJs = async () => { await rename(`${stagingPath}/${lambdaName}/${lambdaName}.js`, `${stagingPath}/${lambdaName}/index.js`); }; const createDeploymentPackageFromDir = async () => { await copyDir(`${cwd}/${lambdaName}`, `${stagingPath}/${lambdaName}`); const lambdaNameJSExists = await exists(`${stagingPath}/${lambdaName}/${lambdaName}.js`); if (lambdaNameJSExists) await renameLambdaFileToIndexJs(); }; const createDeploymentPackage = async () => { if (dir) { await createDeploymentPackageFromDir(); } else { await createDirectory(lambdaName, stagingPath); await copyFile(`${cwd}/${lambdaName}.js`, `${stagingPath}/${lambdaName}/index.js`); } }; bamSpinner.start(); await createDeploymentPackage(); await installLambdaDependencies(lambdaName, path); const description = await getDescription(lambdaName, path); const zippedFileName = await zipper(lambdaName, path); const zipContents = await readFile(zippedFileName); const createAwsLambda = async () => { const createFunctionParams = { Code: { ZipFile: zipContents, }, FunctionName: lambdaName, Handler: 'index.handler', Role: `arn:aws:iam::${accountNumber}:role/${role}`, Runtime: 'nodejs22.x', Description: description, }; const data = await bamBam(asyncLambdaCreateFunction, { asyncFuncParams: [createFunctionParams], }); return data; }; const data = await createAwsLambda(); if (data) { bamSpinner.stop(); bamLog(msgAfterAction('lambda', lambdaName, 'created')); return data; } bamSpinner.stop(); bamWarn(msgAfterAction('lambda', lambdaName, 'exists', 'already')); };