Skip to content

Latest commit

 

History

History
 
 

examples

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

How to compile and run the examples

  1. Create a Lambda function called RuntimeTest in AWS with a custom runtime and no code.

  2. Compile all examples

cargo build --release --target x86_64-unknown-linux-musl --examples
  1. Prepare the package for the example you want to test, e.g.
cp ./target/x86_64-unknown-linux-musl/release/examples/hello ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
  1. Upload the package to AWS Lambda
aws lambda update-function-code --region us-east-1 --function-name RuntimeTest --zip-file fileb://lambda.zip

Feel free to replace the names and IDs with your own values.

basic.rs

Deployment:

cp ./target/x86_64-unknown-linux-musl/release/examples/basic ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
aws lambda update-function-code --region us-east-1 --function-name RuntimeTest --zip-file fileb://lambda.zip

Test event JSON (success):

{ "command": "do something" }

Sample response:

{
  "msg": "Command do something executed.",
  "req_id": "67a038e4-dc19-4adf-aa32-5ba09312c6ca"
}

Test event JSON (error):

{ "foo": "do something" }

Sample response:

{
  "errorType": "Runtime.ExitError",
  "errorMessage": "RequestId: 586366df-f271-4e6e-9c30-b3dcab30f4e8 Error: Runtime exited with error: exit status 1"
}

The runtime could not deserialize our invalid input, but it did not give a detailed explanation why the error occurred in the response. More details appear in the CloudWatch log:

START RequestId: 6e667f61-c5d4-4b07-a60f-cd1ab339c35f Version: $LATEST
Error: Error("missing field `command`", line: 1, column: 22)
END RequestId: 6e667f61-c5d4-4b07-a60f-cd1ab339c35f
REPORT RequestId: 6e667f61-c5d4-4b07-a60f-cd1ab339c35f	Duration: 36.34 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 10 MB	
RequestId: 6e667f61-c5d4-4b07-a60f-cd1ab339c35f Error: Runtime exited with error: exit status 1
Runtime.ExitError

See error-handling.rs example for more error handling options.

Deployment:

cp ./target/x86_64-unknown-linux-musl/release/examples/macro ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
aws lambda update-function-code --region us-east-1 --function-name RuntimeTest --zip-file fileb://lambda.zip

Test event JSON:

{ "foo": "bar" }

Sample response:

{
  "foo": "bar"
}

error-handling.rs

Errors are logged by the runtime only if log is initialized by the handler. These examples use simple_logger, but you can use any other provider that works with log.

simple_logger::init_with_level(log::Level::Debug)?;

Deployment:

cp ./target/x86_64-unknown-linux-musl/release/examples/error-handling ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
aws lambda update-function-code --region us-east-1 --function-name RuntimeTest --zip-file fileb://lambda.zip

The following input/output examples correspond to different match arms in the handler of error-handling.rs.

Invalid event JSON

Test input:

{
  "event_type": "WrongType"
}

Lambda output:

{
  "errorType": "alloc::boxed::Box<dyn std::error::Error+core::marker::Sync+core::marker::Send>",
  "errorMessage": "unknown variant `WrongType`, expected one of `Response`, `ExternalError`, `SimpleError`, `CustomError`"
}

CloudWatch records:

START RequestId: b98e07c6-e2ba-4ca6-9968-d0b94729ddba Version: $LATEST
2020-07-21 04:28:52,630 ERROR [lambda] unknown variant `WrongType`, expected one of `Response`, `ExternalError`, `SimpleError`, `CustomError`
END RequestId: b98e07c6-e2ba-4ca6-9968-d0b94729ddba
REPORT RequestId: b98e07c6-e2ba-4ca6-9968-d0b94729ddba	Duration: 2.06 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 28 MB	Init Duration: 33.67 ms	

A simple text-only error

Test event JSON:

{
  "event_type": "SimpleError"
}

Lambda output:

{
  "errorType": "alloc::boxed::Box<dyn std::error::Error+core::marker::Sync+core::marker::Send>",
  "errorMessage": "A simple error as requested!"
}

CloudWatch records:

START RequestId: 77c66dbf-bd60-4f77-8453-682d0bceba91 Version: $LATEST
2020-07-21 04:35:28,044 ERROR [lambda] A simple error as requested!
END RequestId: 77c66dbf-bd60-4f77-8453-682d0bceba91
REPORT RequestId: 77c66dbf-bd60-4f77-8453-682d0bceba91	Duration: 0.98 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 28 MB	

A custom error with JSON output for Display trait

Test event JSON:

{
  "event_type": "CustomError"
}

Lambda output:

{
  "errorType": "alloc::boxed::Box<dyn std::error::Error+core::marker::Sync+core::marker::Send>",
  "errorMessage": "{\"is_authenticated\":false,\"msg\":\"A custom error as requested!\",\"req_id\":\"b46b0588-1383-4224-bc7a-42b0d61930c1\"}"
}

CloudWatch records:

START RequestId: b46b0588-1383-4224-bc7a-42b0d61930c1 Version: $LATEST
2020-07-21 04:39:00,133 ERROR [lambda] {"is_authenticated":false,"msg":"A custom error as requested!","req_id":"b46b0588-1383-4224-bc7a-42b0d61930c1"}
END RequestId: b46b0588-1383-4224-bc7a-42b0d61930c1
REPORT RequestId: b46b0588-1383-4224-bc7a-42b0d61930c1	Duration: 0.91 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 29 MB	

A 3rd party error from std::fs::File::open

Test event JSON:

{
  "event_type": "ExternalError"
}

Lambda output:

{
  "errorType": "alloc::boxed::Box<dyn std::error::Error+core::marker::Sync+core::marker::Send>",
  "errorMessage": "No such file or directory (os error 2)"
}

CloudWatch records:

START RequestId: 893d24e5-cb79-4f6f-bae0-36304c62e9da Version: $LATEST
2020-07-21 04:43:56,254 ERROR [lambda] No such file or directory (os error 2)
END RequestId: 893d24e5-cb79-4f6f-bae0-36304c62e9da
REPORT RequestId: 893d24e5-cb79-4f6f-bae0-36304c62e9da	Duration: 1.15 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 29 MB	

Handler panic

Test event JSON:

{
  "event_type": "Panic"
}

Lambda output:

{
  "errorType": "Runtime.ExitError",
  "errorMessage": "RequestId: 2d579019-07f7-409a-a6e6-af7725253307 Error: Runtime exited with error: exit status 101"
}

CloudWatch records:

START RequestId: 2d579019-07f7-409a-a6e6-af7725253307 Version: $LATEST
thread 'main' panicked at 'explicit panic', lambda/examples/error-handling.rs:87:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
END RequestId: 2d579019-07f7-409a-a6e6-af7725253307
REPORT RequestId: 2d579019-07f7-409a-a6e6-af7725253307	Duration: 43.40 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 27 MB	Init Duration: 23.15 ms	
RequestId: 2d579019-07f7-409a-a6e6-af7725253307 Error: Runtime exited with error: exit status 101
Runtime.ExitError

A response to a successful Lambda execution

Test event JSON:

{
  "event_type": "Response"
}

Lambda output:

{
  "msg": "OK",
  "req_id": "9752a3ad-6566-44e4-aafd-74db1fd4f361"
}

CloudWatch records:

START RequestId: 9752a3ad-6566-44e4-aafd-74db1fd4f361 Version: $LATEST
END RequestId: 9752a3ad-6566-44e4-aafd-74db1fd4f361
REPORT RequestId: 9752a3ad-6566-44e4-aafd-74db1fd4f361	Duration: 0.89 ms	Billed Duration: 100 ms	Memory Size: 128 MB	Max Memory Used: 29 MB