# samtemplategenerator

> Generates a SAM Template for API Gateway and lambdas written in go. Generates test and build script for each function.

Latest version **1.0.1** (published 2020-03-21) · ISC license · 0 weekly downloads

## Install

```sh
npm install samtemplategenerator
pnpm add samtemplategenerator
yarn add samtemplategenerator
bun add samtemplategenerator
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2020-03-21 |
| First published | 2020-03-21 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 8.2 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Maisie Sadler |
| Maintainers | maisiesadler |

## Links

- npm: https://www.npmjs.com/package/samtemplategenerator
- npm.io page: https://npm.io/package/samtemplategenerator

## Dependencies (1)

- [fs](https://npm.io/package/fs.md) 0.0.1-security

## Recent versions

- 1.0.1 (latest) — 2020-03-21
- 1.0.0 — 2020-03-21

## README

# SAM Template Generator

Generates a SAM Template for API Gateway and lambdas written in go.
Generates test and build script for each function.

Expects folder structure to match the desired API Gateway structure.

For example to create an API Gateway with a GET resource at path `/biscuits`, add the handler to the function at `biscuits/get`. A PUT would then go at `biscuits/put`.

## Outputs

govet_gotest.sh
Script to test all functions

gobuild.sh
Script to build all functions, outputs a mirrored directory structure with built binaries

template.yml
SAM template to create API Gateway and Lambda functions 

## Usage

Install the npm package
`npm install samtemplategenerator --save`

```
const generate = require('samtemplategenerator');
generate(templatePath, pathToFunctions, outputDirectory);
```

### Input parameters

#### Template Path

Path to templates

SamTemplateGenerator expects 2 templates in the directory `base.yml` and `function.yml`

## Templates

- `base.yml` will appear once at the top of the file
- For each function, `function.yml` will be parsed and the tokens replaced for that function

Tokens

For a function at /biscuits/get

| Token name | Description | Example |
|---|---|---|
| Name | The name of the resource in the SAM template | biscuitsget |
| CodeUri | Location of code binary after build | bin/biscuits/ |
| Handler | Which binary to use in folder | /get |
| Path | Location of resource | /biscuits |
| Method | Http Method | get |

### Examples

#### base.yml

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Parameters:
  SecurityGroupIds: 
    Type: List<AWS::EC2::SecurityGroup::Id>
    Description: Security Group IDs that Lambda will use
  VpcSubnetIds: 
    Type: List<AWS::EC2::Subnet::Id>
    Description: VPC Subnet IDs that Lambda will use (min 2 for HA)

Resources:
  DfdApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Cors:
        AllowHeaders: "'Content-Type,Authorization'"
        AllowMethods: "'OPTIONS,POST,GET,PUT,DELETE'"
        AllowOrigin: "'*'"
      Auth:
        Authorizers:
          CognitoAuthorizer:
            UserPoolArn: arn:aws:cognito-idp:eu-west-2:<account-id>:userpool/eu-west-2_1234abcd
```

#### function.yml

```
  {{Name}}:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: bin{{CodeUri}}/
      Handler: {{Handler}}
      Runtime: go1.x
      Tracing: Active
      Role: arn:aws:iam::<account-id>:role/api-lambda-role
      Events:
        GetEvent:
          Type: Api
          Properties:
            RestApiId: !Ref DfdApi
            Path: {{Path}}
            Method: {{Method}}
            Auth:
              Authorizer: CognitoAuthorizer
      Policies:
        - VPCAccessPolicy: {}
        # This policy gives permission for Lambdas to create/manage ENIs
        # SAM Policy templates you can use: https://github.com/awslabs/serverless-application-model/blob/develop/examples/2016-10-31/policy_templates/all_policy_templates.yaml
      VpcConfig:
        SecurityGroupIds: !Ref SecurityGroupIds
        SubnetIds: !Ref VpcSubnetIds
```

---
_Source: https://npm.io/package/samtemplategenerator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
