Last active
September 5, 2022 23:27
-
-
Save Fyko/5b5d4595ebd5d6451eb1f3744a208de0 to your computer and use it in GitHub Desktop.
Use an unspported Node.js version in AWS Lambda (fusebit/anynode) (serverless-stack)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
import { App } from '@serverless-stack/resources'; | |
import { request } from 'undici'; | |
/** eg: `us-west-1`, `us-east-2` */ | |
type AWSRegion = string; | |
/** eg: `18.4.0`, `16.14.0`, `14.17.0` */ | |
type SemVersion = `${number}.${number}.${number}`; | |
/** | |
* Fetches the FuseBit AnyNode lambda layer for all functions. | |
* @param region AWS Region (eg: `us-west-1`, `us-east-2`) | |
* @param nodeVersion Node Version (eg: `16.14.0`, `14.17.0`) (@default: `18.4.0`) | |
* @returns AWS Lambda Layer ARN | |
* @example | |
* ```js | |
* await fetchNodeLayer(app.region) | |
* // => "arn:aws:lambda:us-west-1:072686360478:layer:node-18_4_0:1" | |
* ``` | |
* @example | |
* ```js | |
* await fetchNodeLayer(app.region, '16.14.0') | |
* // => "arn:aws:lambda:us-west-1:072686360478:layer:node-16_14_0:1" | |
* ``` | |
*/ | |
async function fetchNodeLayer(region: AWSRegion, nodeVersion: SemVersion = '18.4.0') { | |
const res = await request('https://cdn.fusebit.io/everynode/layers.json'); | |
// formatted like { 'region': { 'nodeVersion': 'layerArn' } } | |
const body = (await res.body.json()) as Record<AWSRegion, Record<SemVersion, string>>; | |
return body[region][nodeVersion]; | |
} | |
export default async function main(app: App): Promise<void> { | |
const nodeLayerArn = await fetchNodeLayer(app.region); | |
// apply to all lambda functions | |
app.setDefaultFunctionProps({ | |
layers: [nodeLayerArn], | |
}); | |
//... business logic | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment