Skip to main content

Amazon Lambda Rust Library

---

cdk-constructs: Experimental

The APIs of higher level constructs in this module are experimental and under active development. They are subject to non-backward compatible changes or removal in any future version. These are not subject to the Semantic Versioning model and breaking changes will be announced in the release notes. This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.


This library provides constructs for Rust Lambda functions.

The rust.RustFunction construct creates a Lambda function with automatic building and bundling of Rust code.

To use this module you will either need to have cargo-lambda installed or Docker installed.

See Local Bundling/Docker Bundling for more information.

Rust Function

.
├── my-construct.ts
├── myconstruct.my_function
│    ├── Cargo.toml
│    └── src
│        └── main.rs

By default, the construct will use the name of the defining file and the construct's id to look up the entry file by following this pattern defining-file.id/Cargo.toml. In my-construct.ts above we have:

my_function = rust.RustFunction(self, "my_function")

Alternatively, entry and binaryName properties can be specified to override this default behavior. If no binaryName argument is passed in, it will default to the package name as defined in the main Cargo.toml.

rust.RustFunction(self, "my_function1",
    entry="/path/to/directory/with/Cargo.toml",
    binary_name="my_function"
)

# You can also specify entry path directory which will contain your Cargo.toml file
rust.RustFunction(self, "my_function2",
    entry="/path/to/directory",
    binary_name="my_function"
)

For more complex project structure combining multiple Rust Lambda function, the construct offer the ability to use Binaries or Workspaces defined in your Cargo project.

Given a sample project structure:

.
├── Cargo.toml
├── my_lambda_1
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── my_lambda_2
    ├── Cargo.toml
    └── src
        └── main.rs

And with a given Cargo.toml:

[workspace]
members = [
    "my_lambda_1",
    "my_lambda_2"
]

Rust functions can be declared using binaryName property:

rust.RustFunction(self, "FirstFunction",
    binary_name="my_lambda_1"
)

rust.RustFunction(self, "SecondFunction",
    binary_name="my_lambda_2"
)

How It Works

When bundling the code, the rust.RustFunction runs will build and bundle your binary by passing --release and --target flags to the Cargo build command, so it compiles for a Lambda environment - which defaults to the aarch64-unknown-linux-gnu target.

Use cross for Deployment

If you instead prefer to use Docker and Cross for deployment, as outlined in the official AWS docs, you can define the packageManager property:

rust.RustFunction(self, "FirstFunction",
    binary_name="my_lambda_1",
    bundling=rust.BundlingOptions(
        package_manager_type=rust.PackageManagerType.CROSS
    )
)

Customizing the underlying Lambda function

All properties of lambda.Function can be used to customize the underlying lambda.Function.

See also the AWS Lambda construct library.

Local Bundling

By default, Cargo Lambda uses the Zig toolchain to cross compile your code. This is the most convenient cross compilation mechanism because it comes built in, and it works for the majority of use cases. Any pure Rust Lambda function should compile correctly with this toolchain.

By default, Construct will compile the code for Linux X86-64 architectures, but you can compile for ARM-64 architectures by providing the right property if needed:

from aws_cdk.aws_lambda import Architecture


rust.RustFunction(self, "my_function",
    architecture=Architecture.ARM_64
)

If bundling is made locally for ARM-64 or X86-64, make sure to install the dedicated target:

rustup target add aarch64-unknown-linux-gnu
rustup target add x86_64-unknown-linux-gnu

Customizing Docker bundling

To force bundling in a Docker container even if Zig toolchain is available in your environment, set bundling.forceDockerBundling to true.

Use bundling.environment to define environments variables when cargo runs:

rust.RustFunction(self, "my_function",
    bundling=rust.BundlingOptions(
        environment={
            "HELLO": "world"
        }
    )
)

Use the bundling.buildArgs to pass build arguments to cargo:

rust.RustFunction(self, "my_function",
    bundling=rust.BundlingOptions(
        extra_build_args=["--all-features"]
    )
)

Use the bundling.dockerImage to use a custom Docker bundling image:

rust.RustFunction(self, "my_function",
    bundling=rust.BundlingOptions(
        docker_image=DockerImage.from_build("/path/to/Dockerfile")
    )
)

You can set additional Docker options to configure the build environment:

rust.RustFunction(self, "my_function",
    bundling=rust.BundlingOptions(
        network="host",
        security_opt="no-new-privileges",
        user="user:group",
        volumes_from=["777f7dc92da7"],
        volumes=[DockerVolume(host_path="/host-path", container_path="/container-path")]
    )
)

Command hooks

It is possible to run additional commands by specifying the commandHooks property.

The following hooks are available:

  • beforeBundling: runs before all bundling commands
  • afterBundling: runs after all bundling commands

They all receive the directory containing the lock file (inputDir) and the directory where the bundled asset will be output (outputDir). They must return an array of commands to run. Commands are chained with &&.

The commands will run in the environment in which bundling occurs: inside the container for Docker bundling or on the host OS for local bundling.

Metadata

Release files for aws-cdk.aws-lambda-rust 0.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aws-cdk.aws-lambda-rust 0.0.0
File Size Uploaded
aws-cdk.aws-lambda-rust-0.0.0.tar.gz 116.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aws-cdk.aws-lambda-rust 0.0.0
File Interpreter ABI Platform
aws_cdk.aws_lambda_rust-0.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 231.6 kB

Release files / aws-cdk.aws-lambda-rust-0.0.0.tar.gz

Download URL aws-cdk.aws-lambda-rust-0.0.0.tar.gz
Size 116.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c284960d08280c0a95b559b4e225a51bfd4396093a15b306ae8c8a819331722c
BLAKE2b-256 checksum
How to use checksums
852328e6ec64282e94f96fa622daeec1df76cf011e62793233cc76e66899eab4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.1

Release files / aws_cdk.aws_lambda_rust-0.0.0-py3-none-any.whl

Download URL aws_cdk.aws_lambda_rust-0.0.0-py3-none-any.whl
Size 115.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
760b82a632348964373ee1ad70659669752fd414a870423704a0594d6d0b42a0
BLAKE2b-256 checksum
How to use checksums
8e5ffaf2dde471e30d79a33a07110a1ad5b045a544b1092a65c3e56b6579a39b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.1

Release history Release notifications | RSS feed

This release

0.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page