122 lines
4.6 KiB
Markdown
122 lines
4.6 KiB
Markdown
|
---
|
|||
|
layout: pattern
|
|||
|
title: serverless
|
|||
|
folder: serverless
|
|||
|
permalink: /patterns/serverless/
|
|||
|
categories: Architectural
|
|||
|
tags:
|
|||
|
- Java
|
|||
|
- Difficulty-Intermittent
|
|||
|
---
|
|||
|
|
|||
|
## Serverless
|
|||
|
|
|||
|
Serverless eliminates the need to plan for infrastructure and let's you focus on your
|
|||
|
application.
|
|||
|
|
|||
|
## Intent
|
|||
|
|
|||
|
Whether to reduce your infrastructure costs, shrink the time you spend on ops tasks,
|
|||
|
simplify your deployment processes, reach infinite scalability, serverless cuts time
|
|||
|
to market in half.
|
|||
|
|
|||
|
## Explanation
|
|||
|
|
|||
|
Serverless computing is a cloud computing execution model in which the cloud provider
|
|||
|
dynamically manages the allocation of machine resources. Pricing is based on the
|
|||
|
actual amount of resources consumed by an application, rather than on pre-purchased
|
|||
|
units of capacity.
|
|||
|
|
|||
|
## Serverless framework
|
|||
|
|
|||
|
[Serverless](https://serverless.com/) is a toolkit for deploying and operating serverless architectures.
|
|||
|
|
|||
|
## (Function as a Service or "FaaS")
|
|||
|
|
|||
|
The term ‘Serverless’ is confusing since with such applications there are both server
|
|||
|
hardware and server processes running somewhere, but the difference to normal
|
|||
|
approaches is that the organization building and supporting a ‘Serverless’ application
|
|||
|
is not looking after the hardware or the processes - they are outsourcing this to a vendor.
|
|||
|
|
|||
|
Some of the Serverless Cloud Providers are
|
|||
|
|
|||
|

|
|||
|

|
|||
|

|
|||
|

|
|||
|

|
|||
|

|
|||
|

|
|||
|
...
|
|||
|
|
|||
|
Anything that triggers an Lambda Function to execute is regarded by the Framework as
|
|||
|
an Event. Most of the Serverless Cloud Providers support following Events
|
|||
|
- Http
|
|||
|
- PubSub Events
|
|||
|
- scheduled
|
|||
|
|
|||
|
AWS supports processing event generated from AWS Services (S3/Cloudwatch/etc) and
|
|||
|
using aws as a compute engine is our first choice.
|
|||
|
|
|||
|
## AWS lambda function implementation
|
|||
|
|
|||
|
AWS lambda SDK provides pre-defined interface `com.amazonaws.services.lambda.runtime
|
|||
|
.RequestHandler` to implement our lambda function.
|
|||
|
|
|||
|
```java
|
|||
|
public class LambdaInfoApiHandler implements RequestHandler<Map<String, Object>, ApiGatewayResponse> {
|
|||
|
|
|||
|
private static final Logger LOG = Logger.getLogger(LambdaInfoApiHandler.class);
|
|||
|
private static final Integer SUCCESS_STATUS_CODE = 200;
|
|||
|
|
|||
|
|
|||
|
@Override
|
|||
|
public ApiGatewayResponse handleRequest(Map<String, Object> input, Context context) {
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
handleRequest method is where the function code is implemented. Context provides
|
|||
|
useful information about Lambda execution environment. AWS Lambda function needs a
|
|||
|
deployment package. This package is either a .zip or .jar file that contains all the
|
|||
|
dependencies of the function.
|
|||
|
|
|||
|
`serverless.yml` contains configuration to manage deployments for your functions.
|
|||
|
|
|||
|
## Run example in local
|
|||
|
|
|||
|
# Pre-requisites
|
|||
|
* Node.js v6.5.0 or later.
|
|||
|
* Serverless CLI v1.9.0 or later. You can run npm install -g serverless to install it.
|
|||
|
* An AWS account. If you don't already have one, you can sign up for a free trial that includes 1 million free Lambda requests per month.
|
|||
|
* [Set-up](https://serverless.com/framework/docs/providers/aws/guide/credentials/) your Provider Credentials. Watch the video on setting up credentials
|
|||
|
|
|||
|
# build and deploy
|
|||
|
|
|||
|
* `cd serverless`
|
|||
|
* `mvn clean package`
|
|||
|
* `serverless deploy --stage=dev --verbose`
|
|||
|
|
|||
|
Based on the configuration in `serverless.yml` serverless framework creates a
|
|||
|
cloud formation stack for S3 (ServerlessDeploymentBucket), IAM Role
|
|||
|
(IamRoleLambdaExecution), cloud watch (log groups), API Gateway (ApiGatewayRestApi)
|
|||
|
and the Lambda function.
|
|||
|
|
|||
|
The command will print out Stack Outputs which looks something like this
|
|||
|
|
|||
|
```yaml
|
|||
|
endpoints:
|
|||
|
GET - https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/info
|
|||
|
```
|
|||
|
|
|||
|
```yaml
|
|||
|
CurrentTimeLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:xxxxxxxxxxx:function:lambda-info-http-endpoint-dev-currentTime:4
|
|||
|
ServiceEndpoint: https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev
|
|||
|
ServerlessDeploymentBucketName: lambda-info-http-endpoin-serverlessdeploymentbuck-2u8uz2i7cap2
|
|||
|
```
|
|||
|
access the endpoint to invoke the function.
|
|||
|
|
|||
|
## Credits
|
|||
|
|
|||
|
* [serverless docs](https://serverless.com/framework/docs/)
|
|||
|
* [Serverless Architectures](https://martinfowler.com/articles/serverless.html)
|