Skip to content

Instantly share code, notes, and snippets.

View leegilmorecode's full-sized avatar
:atom:
Serverless Hero

Lee Gilmore leegilmorecode

:atom:
Serverless Hero
View GitHub Profile
@leegilmorecode
leegilmorecode / dependabot.yml
Created September 4, 2021 04:03
Dependabot example
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
# Maintain dependencies for npm
- package-ecosystem: "npm"
directory: "/"
@leegilmorecode
leegilmorecode / serverless.doc.yml
Created August 30, 2021 11:18
An example serverless.doc.yml file
documentation:
version: '1'
title: ${self:custom.openapiTitle}
description: ${self:custom.openapiTitle} - example OpenAPI document
endpoints:
getImage:
summary: "Get Image by ID"
description: "Get a pre-signed temporary download URL for the image by ID"
requestBody:
description: "Get a pre-signed temporary download URL for the image by ID"
@leegilmorecode
leegilmorecode / add-comment.ts
Created August 19, 2021 18:32
Example of a lambda handler checking the sentiment and PII of a comment in a POST request
import AWS from 'aws-sdk';
import { APIGatewayProxyHandler, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';
import { v4 as uuid } from 'uuid';
import { schema } from './add-comment.schema';
import { validate } from '../../shared/validator';
const METHOD = 'add-comment.handler';
const LANGUAGE_CODE = 'en';
type DetectPiiEntitiesResponse = AWS.Comprehend.DetectPiiEntitiesResponse;
@leegilmorecode
leegilmorecode / upload-file.ts
Created August 12, 2021 08:03
Example code for generating a pre-signed upload URL using AWS S3
import AWS from 'aws-sdk';
import { APIGatewayProxyHandler, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';
import { v4 as uuid } from 'uuid';
import config from '../../config';
const METHOD = 'upload-file.handler';
const s3 = new AWS.S3();
export const handler: APIGatewayProxyHandler = async ({
@leegilmorecode
leegilmorecode / get-file.ts
Created August 12, 2021 08:02
Example code for generating a pre-signed download URL using AWS S3
import AWS from 'aws-sdk';
import { APIGatewayProxyHandler, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';
import { v4 as uuid } from 'uuid';
import config from '../../config';
type HeadObjectRequest = AWS.S3.HeadObjectRequest;
type HeadObjectOutput = AWS.S3.HeadObjectOutput;
const METHOD = 'get-file.handler';
@leegilmorecode
leegilmorecode / get-files-efs.ts
Created July 31, 2021 14:19
Example of pulling the files from EFS within a lambda function
import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { getFilesFromFolder } from '../shared/get-files-from-folder/get-files-from-folder';
import { sortFiles } from '../shared/sort-files/sort-files';
import { config } from '../shared/config/config';
import FileObject from '../shared/types/FileObject';
export const handler: APIGatewayProxyHandler = async (): Promise<APIGatewayProxyResult> => {
try {
console.log(`Get the files from the efs folder ${config.efsMountPath}`);
@leegilmorecode
leegilmorecode / get-files-s3.ts
Created July 31, 2021 14:10
Example of pulling the files from S3
import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { getImagesFromBucket } from '../shared/get-images-from-bucket/get-images-from-bucket';
import { sortFiles } from '../shared/sort-files/sort-files';
import { config } from '../shared/config/config';
import FileObject from '../shared/types/FileObject';
export const handler: APIGatewayProxyHandler = async (): Promise<APIGatewayProxyResult> => {
try {
console.log(`Get the files from the s3 bucket ${config.bucketName}`);
@leegilmorecode
leegilmorecode / get-files-tmp.ts
Created July 31, 2021 14:06
Get files from the tmp folder on the lambda
import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { getImagesFromBucket } from '../shared/get-images-from-bucket/get-images-from-bucket';
import { getFilesFromFolder } from '../shared/get-files-from-folder/get-files-from-folder';
import { writeFilesToFolder } from '../shared/write-files-to-folder/write-files-to-folder';
import { sortFiles } from '../shared/sort-files/sort-files';
import FileObject from '../shared/types/FileObject';
import { config } from '../shared/config/config';
async function getFiles(): Promise<FileObject[]> {
// attempt to get the files from /tmp on the lambda
@leegilmorecode
leegilmorecode / create-employee.schema.js
Created July 29, 2021 09:43
Very basic example of JSON schema to test a create employee input
export const schema = {
type: "object",
required: ["id", "firstName", "surname", "age"],
maxProperties: 4,
minProperties: 4,
properties: {
id: {
type: "number",
},
firstName: {
@leegilmorecode
leegilmorecode / error-handler.js
Created July 29, 2021 09:41
Very basic example of a generic error handler
// basic error handler which will not expose any stack traces/secrets
// and will return the correct responses when invalid params from validator
export const errorHandler = (error) => {
let body = "An error has occurred";
let statusCode = 500;
const errorType = error && error.errorType ? error.errorType : 2;
switch (errorType) {