https://github.com/spudmashmedia/spudmash-hack-randomuser-aws-lambda
A sample Lambda function designed for API Gateway to proxy Randomuser.me
https://github.com/spudmashmedia/spudmash-hack-randomuser-aws-lambda
api api-gateway excercise javascript lambda rest
Last synced: 15 days ago
JSON representation
A sample Lambda function designed for API Gateway to proxy Randomuser.me
- Host: GitHub
- URL: https://github.com/spudmashmedia/spudmash-hack-randomuser-aws-lambda
- Owner: spudmashmedia
- License: mit
- Created: 2017-03-25T11:51:07.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-03-25T12:01:11.000Z (about 9 years ago)
- Last Synced: 2025-03-06T08:57:18.019Z (over 1 year ago)
- Topics: api, api-gateway, excercise, javascript, lambda, rest
- Language: JavaScript
- Size: 5.86 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AWS Lambda function for API Gateway
A sample Lambda function designed for API Gateway
## Requirements
- Nodejs 6.10 (TIP: use NVM to manage your node environment)
- node_modules:
- request
- request-promise
## Installation
1) run **build.sh***
```
> sh build.sh
```
3) in AWS Lambda console, create a new lambda, ignore the blueprint, instead of writing code in textbox, select upload zip, upload fn-my-lambda.zip. continue with the wizard steps.
## Notes
### AWS Lambda | Configuration | Handler ###
This name is derived from ```[filename].[exports.]```
For this function:
**filename:** index.js (we only use 'index')
**exports:** exports.handler (we only use 'handler')
the string value finally added to AWS Lambda configuration Handler text box is: **"index.handler"**
### How to create Test ###
To mimick the API Gateway body payload, make sure in API Gateway | your method |Integration Request | Body Mapping Template | Content-Type |set to'application/json' + Generate tempate: Method Request Passthrough
Result of this is the ability to access the query strings values, headers etc...in JSON object format
Note: if you fire off a test from API Gateway test harness, you can see the Request Body payload (input for the Lambda)
e.g. IF the API method had a question string of count=10, you can access "count" in the Lambda by ```event.params.querystring.count``` (will return '10')
### Off topic: AWS Gateway, Custom Domain Name ###
To mask the auto gen API Gateway hostname with a custom one like 'api.myhostname.com',
goto: API Gateway | Custom Domain Names| Create Custom Domain Name.
The gotcha here is, you need to create a ACM Certificate in North Virginia (us-east-1) -> which also means your API needs to reside in North Virginia.
However once setup, your API can point to Lambdas in ANY region.
Once you press create, it will take > 1hour (although it says 40mins, it took 1-2hours) to create as it is creating a Cloudfront service and replicating across the CDN.
once completed, copy the **Distributed Domain Name** and head over to Route53 to create an A record with an alias to distributed domain name.
Once set, api should be accessible via 'api.myhostname.com'
Also note, access can still be achieved via:
- distributed domain name
- api gateway generated name
so make sure each route utilises a Usage Plan + accessed by an API Key (trivial setup).
### Off topic : AWS API Gateway, making modifications ###
when ever you tweak something in the API, make sure you redeploy to appropriate staging environment. Changes do not automatically replicate!!!
- especially important if you've just turned on "Use API Key" for a method - endpoints will remain unprotected until you redeploy!!!!!!!!
### Off topic: AWS API Gateway Usage Plan Quota throttling
- To reset a Usage Plan when calls exceed limit, goto Usage Plan | API Keys | choose key | Click Exension | grant extension by number
Or Hard Reset:
```Edit | disable Quota | renable Quota | Save```
## Contributing
1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D
## History
- V1
## License
Copyright @ 2017 Spudmash Media Pty Ltd