2020-10-29
|~2 min read
|342 words
I recently discovered AWS’s SAM
cli for managing serverless applications.
On the face, this feels like a fantastic way to manage new applications that can benefit from a serverless architecture.
There’s just one hiccup: I like working with Typescript more than vanilla Javascript at this point. Fortunately Zijing Zhao beat me to the punch and wrote an article on how to use Typescript with AWS Lambda’s (in fact, her article was my introduction to sam
in the first place!).
So, what are the steps?
At a minimum, we need three dependencies:
yarn add --dev @types/aws-lambda @types/node typescript
As I wrote about in my previous post on setting up Typescript for a new project we can get started quickly with:
./node_modules/.bin/tsc --init
Zijing’s recommended settings are:
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES2017",
"noImplicitAny": true,
"preserveConstEnums": true,
"outDir": "./built",
"sourceMap": true
},
"include": ["src-ts/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
There are a few things that we now have to refactor:
app.js
becomes app.ts
(with types!)template.yml
to reflect the new destination for where our app will live (i.e. our outDir
)Again, Zijing provided a nice example that included the types:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from "aws-lambda"
export const lambdaHandler = async (
event: APIGatewayProxyEvent,
): Promise<APIGatewayProxyResult> => {
const queries = JSON.stringify(event.queryStringParameters)
return {
statusCode: 200,
body: `Queries: ${queries}`,
}
}
This lambda doesn’t do anything except receive an event from the API Gateway and return a 200 with the queries in the body of the response, but we can see how the event and response would be typed.
I am confident that as I get into building more complicated applications, I’ll find holes in my understanding, but I’m grateful to Zijing for the first pass! She saved me a ton of time, introduced me to a new AWS tool, and inspired me to go looking for more information to fill in the gaps!
Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!