Shared Resources Functions

For some Shared Resources you might need to create Lambda functions themselves. Instead of writing the Lambda function code inline with the Shared Resource definition, you can define them in app/shared/functions and declare them with the function helper. Here’s an example:

Ruby Example

app/shared/resources/custom.rb:

class Custom < Jets::Stack
  function(:bob)
end

You then define the function in the app/shared/functions folder:

app/shared/functions/bob.rb:

def lambda_handler(event:, context:)
  puts("hello bob")
end

By default, the function method creates Ruby lambda functions. The default Ruby handler is lambda_handler.

There is also a ruby_function alias to the function method. They do the same thing.

Python Example

For Shared Resource Functions, you can use Python just as easily. Here’s an example:

app/shared/resources/custom.rb:

class Custom < Jets::Stack
  python_function(:kevin)
end

You then define the function in the app/shared/functions folder:

app/shared/functions/kevin.py:

def lambda_handler(event, context):
  print("hello kevin")

Node Example

Here’s also a node example:

app/shared/resources/custom.rb:

class Custom < Jets::Stack
  node_function(:stuart)
end

app/shared/functions/stuart.js:

exports.handler = function(event, context, callback) {
  console.log("hello stuart");
}

General function Form

The methods ruby_function, python_function, and node_function all delegate to the function method. Here’s what the general function method looks like:

class Custom < Jets::Stack
  function(:kevin,
    Handler: "kevin.lambda_handler",
    Runtime: "ruby2.7"
  )
end

And the function method calls the general Jets::Stack resource method. So the above can also be written like so:

class Custom < Jets::Stack
  resource(:kevin,
    Code: {
      S3Bucket: "!Ref S3Bucket",
      S3Key: code_s3_key
    },
    Handler: "kevin.lambda_handler",
    Runtime: "ruby2.7"
  )
end