Search code examples
rustaws-lambdarust-cargorusoto

Unable to compile Rust AWS Lambda using rusoto


Im having some problems compiling a Rust lambda. The problems started after I included the rusoto package, and it is complaining about linker problems (options and libraries).

Im running:

cargo lambda build

Getting:

  = note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          ld.lld: error: unable to find library -lssl
          ld.lld: error: unable to find library -lcrypto

My Cargo.toml:

[package]
name = "super-lambda"
version = "0.1.0"
edition = "2021"

# Starting in Rust 1.62 you can use `cargo add` to add dependencies 
# to your project.
#
# If you're using an older Rust version,
# download cargo-edit(https://github.com/killercup/cargo-edit#installation) 
# to install the `add` subcommand.
#
# Running `cargo add DEPENDENCY_NAME` will
# add the latest version of a dependency to the list,
# and it will keep the alphabetic ordering for you.

[dependencies]
lambda_http = "0.7"
lambda_runtime = "0.7"
lazy_static = "1.4.0"
rusoto_core = "0.48.0"
rusoto_dynamodb = "0.48.0"
serde = "1.0.149"
tokio = { version = "1", features = ["macros"] }
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] }

I did try to disable the zig-linker:

cargo lambda build --disable-zig-linker

Then it compiles, but AWS will complain:

/var/task/bootstrap: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

What can I do to resolve this?


Solution

  • Cargo-lambda will do a cross-compilation targeting x86_64-unknown-linux-gnu. To avoid relying on a libssl dependency, you can try building the project using rustls for rusoto. You should be able to enable rustls feature for rusoto as follows:

    rusoto_core = {version = "0.48.0", features = ["rustls"], default-features = false}
    rusoto_dynamodb = {version = "0.48.0", features = ["rustls"], default-features = false}
    

    You can also see this GitHub issue which relates to this topic.

    If you are on Linux, you might try to install libssl-dev and try to build it again. However, in my experience, zigbuild (used by cargo-lambda for cross-compilation) might struggle to find this dependency.