FreeAllMedia / akiro

Magically compile NPM packages with native extensions for AWS Lambda.
MIT License
10 stars 1 forks source link

WARNING: This package does not work at this time. It's in the process of being refactored.

Akiro.js npm version license type ECMAScript 2015 Source npm downloads node 5.x.x node 4.x.x node 3.x.x iojs 2.x.x iojs 1.x.x node 0.12.x node 0.11.x node 0.10.x Build Status Dependency Status Dev Dependency Status Coverage Status Code Climate bitHound Score

When you get started with AWS Lambda functions, you may need to use an npm package that contains native extensions (such as C or C++). If you try to compile these packages on your development computer, then deploy that code to AWS Lambda, it will fail because the code wasn't compiled for the environment it was deployed to.

import Akiro from "akiro";
const akiro = new Akiro({
    region: "us-east-1",
    bucket: "fam-akiro",
    debug: 1
});

const packages = {
    "flowsync": "^0.1.12",
    "almaden": "^0.3.1",
    "dovima": "^0.3.2",
    "incognito": "^0.1.4"
};

const outputDirectory = `${process.cwd()}/node_modules_aws/`;

akiro.package(packages, outputDirectory, (packageError) => {
    if (packageError) { throw packageError; }
    console.log("Voila!", `ls -lah ${outputDirectory}`);
});

Getting Started

Akiro requires minimal initial configuration before its automation can take over. Please read through this entire guide before attempting to use Akiro. It may save you much grief!

Installation

The easiest way to install Akiro is through the node package manager:

npm install akiro --save-dev

Configuration

There are two mandatory ways you must configure Akiro:

  1. Setup your own AWS Credentials so that you can deploy an AWS Lambda Function to your account.
  2. Setup an AWS IAm Role for the AkiroBuilder Lambda Function to save objects to AWS S3.
    • This is required because AWS Lambdas don't have a way to send back the compiled packages on their own.
    • Instead, Akiro saves the compiled packages to an AWS S3 Bucket of your choice so that Akiro can download them back to your computer.
  3. Initialize Akiro to the AWS Regions you will use it on.

1. Setup Your Own ~/.aws/credentials

2. Setup an AWS IAm Role For AkiroBuilder

Due to the size of this section, we've decided to put it onto its own page. Behold, it has pictures!

3. Initialize Akiro

import Akiro from "akiro";
const akiro = new Akiro({
    region: "us-east-1",
    debug: 1
});

const iamRoleName = "AWSLambda";

akiro.initialize(iamRoleName, error => {
    if (error) { throw error; }
    console.log("Akiro deployed.");
});

Building Packages

After Akiro is configured and initialized the akiro.package() method becomes available for everybody in the orignanization to build packages on the AkiroBuilder.

akiro.package(packageList, outputDirectory, callback)

import Akiro from "akiro";
const akiro = new Akiro({
    region: "us-east-1", // Defaults to "us-east-1"
    bucket: "my-akiro-bucket", // Required
    debug: 1 // Comment out to run silent
});

const packages = {
    "flowsync": "^0.1.12",
    "almaden": "^0.3.1",
    "dovima": "^0.3.2",
    "incognito": "^0.1.4"
};

const outputDirectory = `${process.cwd()}/node_modules_aws/`;

akiro.package(packages, outputDirectory, (packageError) => {
    if (packageError) { throw packageError; }
    console.log("Voila!", `ls -lah ${outputDirectory}`);
});