serverless-sam
Version:
Serverless framework plugin to export AWS SAM templates for a service
154 lines (116 loc) • 4.22 kB
Markdown
<!--
title: AWS Simple HTTP Endpoint example in Java
description: This example demonstrates how to setup a simple HTTP GET endpoint using Java. Once you ping it, it will reply with the current time.
layout: Doc
-->
# Simple HTTP Endpoint Example
This example demonstrates how to setup a simple HTTP GET endpoint using Java. Once you ping it, it will reply with the current time.
[Jackson](https://github.com/FasterXML/jackson) is used to serialize objects to JSON.
## Use Cases
- Wrapping an existing internal or external endpoint/service
## Build
It is required to build prior to deploying. You can build the deployment artifact using Gradle or Maven.
### Gradle
In order to build using Gradle simply run
```bash
gradle wrapper # to build the gradle wrapper jar
./gradlew build # to build the application jar
```
The expected result should be similar to:
```bash
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
:compileJava
:processResources
:classes
:jar
:assemble
:buildZip
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
BUILD SUCCESSFUL
Total time: 8.195 secs
```
### Maven
In order to build using Maven simply run
```bash
mvn package
```
Note: you can install Maven with
1. [sdkman](http://sdkman.io/) using "sdk install maven" (yes, use as default)
2. sudo apt-get install mvn
3. brew install maven
If you use Maven to build, then in `serverless.yml` you have to replace
```yaml
package:
artifact: build/distributions/aws-java-simple-http-endpoint.zip
```
by
```yaml
package:
artifact: target/aws-java-simple-http-endpoint.jar
```
before deploying.
## Deploy
After having built the deployment artifact using Gradle or Maven as described above you can deploy by simply running
```bash
serverless deploy
```
The expected result should be similar to:
```bash
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............................
Serverless: Stack update finished...
Service Information
service: aws-java-simple-http-endpoint
stage: dev
region: us-east-1
api keys:
None
endpoints:
GET - https://XXXXXXX.execute-api.us-east-1.amazonaws.com/dev/ping
functions:
aws-java-simple-http-endpoint-dev-currentTime: arn:aws:lambda:us-east-1:XXXXXXX:function:aws-java-simple-http-endpoint-dev-currentTime
```
## Usage
You can now invoke the Lambda function directly and even see the resulting log via
```bash
serverless invoke --function currentTime --log
```
The expected result should be similar to:
```bash
{
"statusCode": 200,
"body": "{\"message\":\"Hello, the current time is Wed Jan 04 23:44:37 UTC 2017\"}",
"headers": {
"X-Powered-By": "AWS Lambda & Serverless",
"Content-Type": "application/json"
},
"isBase64Encoded": false
}
--------------------------------------------------------------------
START RequestId: XXXXXXX Version: $LATEST
2017-01-04 23:44:37 <XXXXXXX> INFO com.serverless.Handler:18 - received: {}
END RequestId: XXXXXXX
REPORT RequestId: XXXXXXX Duration: 0.51 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 53 MB
```
Finally you can send an HTTP request directly to the endpoint using a tool like curl
```bash
curl https://XXXXXXX.execute-api.us-east-1.amazonaws.com/dev/ping
```
The expected result should be similar to:
```bash
{"message": "Hello, the current time is Wed Jan 04 23:44:37 UTC 2017"}%
```
## Scaling
By default, AWS Lambda limits the total concurrent executions across all functions within a given region to 100. The default limit is a safety limit that protects you from costs due to potential runaway or recursive functions during initial development and testing. To increase this limit above the default, follow the steps in [To request a limit increase for concurrent executions](http://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#increase-concurrent-executions-limit).