Let’s review what been deployed.
Jets leverages CloudFormation for deployment, so check the CloudFormation console. You should see something like this:
Jets creates a main parent
demo-dev stack that in turn creates a few nested CloudFormation stacks. This solves the CloudFormation quotas and limits. Here’s a summary:
- There are few stacks that manage the API Gateway resources. They start with
- There a stack that manages a PreheatJob, it starts with
- There is a stack that manages the controller, it starts with
API Gateway REST API
If you look at CloudFormation stack
demo-dev-ApiGateway-* Resources tab, you’ll see the Rest API.
Clicking on the Physical ID link takes you to the APIGW console. You can see that that points to a demo-dev-controller Lambda function.
The demo-dev-controller Lambda function is defined in the
demo-dev-JetsController-* CloudFormation stack.
Clicking on the Physical ID link takes you to the Lambda console. You can see the Lambda handler code there.
The Lambda function handler is generated as part of
jets deploy. The handler is the “point of entry” for Lambda and provides interface that Lambda expects.The code routes the request to the desired controller action.
Jets.process ultimately calls the
PostsController action methods. You can open
app/controllers/posts_controller.rb and see the code we created earlier.
Note: Jets v5 creates one APIGW Method and Lambda function for all controller actions. Previous versions of Jets created multiple resources. There are some pretty significant advantages with the Jets v5 approach.
Test Lambda Function
Let’s test Lambda function manually with the Lambda Console built-in Test functionality. For the event, you need a payload that mimics what the APIGW service would send to the Lambda function. Here’s an minimal example:
After you click Test, you’ll see a “Executing function: succeeded” message with a link to the logs.
Clicking on the logs link takes you to the CloudWatch Logs Console. It shows all the Log Streams for the Log Group for the Lambda Function. Clicking Search Log Group is then filtering by 1m or 30m is an easy to to see the logs.
Testing with the Lambda console is a bit of a pain because we need to figure out the event payload structure. See Debug Event Payloads for more example payloads. We’ll test with a browser next.
Testing with a Browser
It’s more traditional to test with a browser. We’ll go through a few examples.
To get the APIGW endpoint, you can use the
jets url command.
❯ jets url
API Gateway Endpoint: https://spsfc098x8.execute-api.us-west-2.amazonaws.com/dev
You can open up the browser and test it just like you did with Local Testing
The link above takes you to the homepage; you probably want to add
/posts to the URL to see the posts index.
Next, we’ll make some updates and do more testing.