Skip to main content

AWS Lambda Examples

Intro

This is just going to be a set of Lambda sample functions that I can use to reference to speed up my development time. Examples of good formats for making DynamoDB calls and other microservices. Almost all my examples will be Javascript, but I might throw in some Python ones.

One thing to note is that even though AWS has now come out with the SDK v3, you actually want to use SDK v2 in Lambda as it is installed in the default Lambda Node.js environment.

DynamoDB

Document Client

Query

// Load the AWS SDK for Node.js.
var AWS = require("aws-sdk")
// Set the AWS Region.
AWS.config.update({ region: "us-east-1" })

// Create DynamoDB service object.
var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: "2012-08-10" })

exports.handler = async (event, context) => {
// response variables
let body
let statusCode = "200"
const headers = {
"Content-Type": "application/json",
}

// request parameters
let params = {
TableName: "settings",
KeyConditionExpression: "#id = :user",
ExpressionAttributeNames: {
"#id": "user_id",
},
ExpressionAttributeValues: {
":user": event.user_id,
},
}

// request
try {
const data = await ddb.query(params).promise()
console.log(data)
body = data
} catch (error) {
statusCode = "400"
body = error.message
}

// dynamic response
return {
statusCode,
body,
headers,
}
}

Batch Get

If you need to get multiple items at once, the batch get method is fantastic. Given the following event:

{
"profiles_array": [
{
"profile_id": 2307521226105089
},
{
"profile_id": 1363579156439011
}
]
}

We can retrieve multiple items at the same time like so.

// Load the AWS SDK for Node.js.
var AWS = require("aws-sdk")
// Set the AWS Region.
AWS.config.update({ region: "us-east-1" })

// Create DynamoDB service object.
var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: "2012-08-10" })

exports.handler = async (event, context) => {
// response variables
let body
let statusCode = "200"
const headers = {
"Content-Type": "application/json",
}

// request parameters

let params = {
RequestItems: {
"profiles_metadata": {
Keys: event.profiles_array
}
},
}

// request
try {
const data = await ddb.batchGet(params).promise()
console.log(data)
body = data
}
catch (error) {
statusCode = "400"
body = error.message
}

// dynamic response
return {
statusCode,
body,
headers,
}
}

and we can even get multiple items, from multiple different tables in one call!

const AWS = require("aws-sdk")
AWS.config.update({ region: "us-east-1" })
const dynamoDB = new AWS.DynamoDB.DocumentClient()

dynamoDB
.batchGet({
RequestItems: {
"my-table": {
Keys: [
{
id: "123",
},
{
id: "124",
},
],
},
"other-table": {
Keys: [
{
id: "abc",
},
{
id: "abd",
},
],
},
},
})
.promise()
.then(data => console.log(data.Responses))
.catch(console.error)

Keep in mind that number of items retrieved using batchGet is limited to 100 items or 16MB of data.

Moreover, if you exceed table capacity, this call will return UnprocessedKeys attribute containing a map of keys which weren't fetched.

Recent Work

Free desktop AI Chat client, designed for developers and businesses. Unlocks advanced model settings only available in the API. Includes quality of life features like custom syntax highlighting.

Learn More
slide-6
slide-5
slide-2
slide-1
slide-3
slide-4
Technologies Used
TypeScript
Electron
React

BidBear

bidbear.io

Bidbear is a report automation tool. It downloads Amazon Seller and Advertising reports, daily, to a private database. It then merges and formats the data into beautiful, on demand, exportable performance reports.

Learn More
slide-1
slide-2
slide-5
slide-3
slide-4

Technologies Used

Front End
JavaScript
Docker
React
Redux
Vite
Next
Docusaurus
Stripe
Sentry
D3
React-Flow
TipTap
Back End
JavaScript
Python
AWS CognitoCognito
AWS API GatewayAPI Gateway
AWS LambdaLambda
AWS AthenaAthena
AWS GlueGlue
AWS Step FunctionsStep Functions
AWS SQSSQS
AWS DynamoDBDynamo DB
AWS S3S3
AWS CloudwatchCloudWatch
AWS CloudFrontCloudFront
AWS Route 53Route 53
AWS EventBridgeEventBridge