An open API service indexing awesome lists of open source software.

https://github.com/pmlopes/aws-lambda-native-vertx


https://github.com/pmlopes/aws-lambda-native-vertx

Last synced: 9 months ago
JSON representation

Awesome Lists containing this project

README

          

# aws-lambda-vertx-native

### Custom Vert.x Native for AWS Lambda

*Disclaimer - This project should be considered a POC and has not been tested or verified for production use.
If you decided to run this on production systems you do so at your own risk.*

### Building this Runtime

#### Prerequisites

Make sure you have the following installed on your build machine before getting started.

* GraalVM
* AWS CLI

##### Compile the Runtime Classes

```
$ ./mvnw package
```

#### Create the Lambda Custom Runtime Entry Point

AWS Lambda Custom Runtimes require an executable file in the root directory named simply ```bootstrap```. This can be any executable file, for our case we're going to just use
a shell script to call our launcher that we created in the step above. This script will do nothing more than invoke our Java Runtime from the dist folder.

##### Create the bootstrap script
```
$ touch boostrap
```
##### Call our Java Runtime from Bash

Add the following commands to the ```bootstrap```
```$bash
#!/bin/sh
/opt/target/lambda
```

Note that the path we're using in our shell script is ```/opt```. When you create a Lambda Layer, as we'll do shortly, AWS Lambda copies all the runtime files to the ```/opt``` directory. This directory is effectively the home directory for our custom runtime.

##### Make bootstrap executable
```
$ chmod +x bootstrap
```

##### Create a deployment package

In the root of the folder containing our ```bootstrap``` and ```target/lambda``` files, create a zip archive containing the artifacts.

```
$ zip -r function.zip bootstrap target/lambda
```

### Deploying to AWS Lambda

#### Create a lambda role

```
aws iam create-role \
--role-name lambda-role \
--path "/service-role/" \
--assume-role-policy-document file:///tmp/trust-policy.json
```

Where the file `/tmp/trust-policy.json` contains:

```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
```

#### Publish a lambda layer

```
aws lambda publish-layer-version \
--layer-name vertx-native-example \
--zip-file fileb://function.zip
```

#### Create a function

```
aws lambda delete-function --function-name vertxNativeTester

aws lambda create-function --function-name vertxNativeTester \
--zip-file fileb://function.zip --handler lambda.EchoLambda --runtime provided \
--role arn:aws:iam::985727241951:role/service-role/lambda-role
```

#### Link the layer to the function

```
aws lambda update-function-configuration --function-name vertxNativeTester --layers arn:aws:lambda:eu-central-1:985727241951:layer:vertx-native-example:8
```

#### Test it

```
aws lambda invoke --function-name vertxNativeTester --payload '{"message":"Hello World"}' --log-type Tail response.txt | grep "LogResult"| awk -F'"' '{print $4}' | base64 --decode
```