hapiest-lambda-deploy

    0.0.3 • Public • Published

    Hapiest-lambda-deploy is designed to make it super-simple to deploy one or more lambda functions in a repository.

    Setup

    1. Create a deploy config folder with the following files:

      i. deployConfig.json (see example below)

      {
        "lambdaFunctions": [{
          "functionName": "hapiestLambdaDeployTest",
          "zipContents": [
            "index.js",
            "lib"
          ],
          "environments": [
            {
              "envName": "env1",
              "nodeEnvValue": "environment1",
              "liveAliasName": "LIVE"
            }, {
              "envName": "env2",
              "nodeEnvValue": "environment2",
              "liveAliasName": "LIVE"
            }
          ]
        }]
      }

      ii. deployCredentials.json (see example below)

      {
        "awsCredentials": {
          "accessKeyId": "someIAMAccessKeyId",
          "secretAccessKey": "someIAMSecretAccessKey",
          "region": "us-east-1"
        }
      }
    2. Create a "bin" .js file similar to the one below

      const Promise = require('bluebird');
      const Path = require('path');
      const NodeConfig = require('config');
      const serviceLocator = require('../../services/serviceLocatorFactory').getServiceLocatorSingleton(NodeConfig);
      const logger = serviceLocator.getLogger();
       
      /** @type {DeployLambdaServiceFactoryFolders} */
      const folders = {
          config: Path.resolve(__dirname, '../config'),
          projectRoot: Path.resolve(__dirname, '../..')
      };
      const DeployServiceFactory = require('hapiest-lambda-deploy');
      const deployService = DeployServiceFactory.create(folders, logger);
       
      deployService.deployFromCommandLineArguments(process.argv)
      .then(() => process.exit())
      .catch(err => logger.error('Deploy failed', err));
    3. Update package.json to make it easy to deploy using "npm run ..."

      {
          "scripts": {
              "git:ensureClean": "test -z \"$(git status --porcelain)\" || (echo \"Dirty working directory - aborting\" && test -n \"\")",
              "deploy:env1": "npm run git:ensureClean && node deploy/bin/deploy.js -f hapiestLambdaDeployTest -e env1 -c $(git rev-parse HEAD)"
          }
      }

      Note, you want to ensure that you have a clean directory so that you don't accidentally deploy code that hasn't been tested / check in. You can optionally remove git:ensureClean step if you like playing Russian Roulette.

    4. Deploy the Lambda function by running

      npm run deploy:env1
      

    Running the tests

    Currently there's only a single integration test. I plan to add unit tests at some later point in time. To get the integration test up and running, you should:

    1. Create test/helper/integration/config/deployCredentials.json file with valid credentials from Setup step 1

    2. Create an AWS Lambda function with the name hapiestLambdaDeployTest_env1 and a corresponding alias named LIVE

    3. Check that the test runs using npm run test:integration

    Install

    npm i hapiest-lambda-deploy

    DownloadsWeekly Downloads

    1

    Version

    0.0.3

    License

    ISC

    Last publish

    Collaborators

    • jonathanfulton
    • njgerner