Http 来自AWS Lambda的reqwest分段故障,带锈

Http 来自AWS Lambda的reqwest分段故障,带锈,http,aws-lambda,rust,rust-tokio,reqwest,Http,Aws Lambda,Rust,Rust Tokio,Reqwest,我不知道如何使用rust从AWS Lambda发出一个简单的HTTP请求,而不会出现分段错误。不管我使用的是带有兼容层的tokio-0.2还是tokio-0.3,我都会遇到这个错误。看起来lambda_http是用tokio-0.2编译的,所以应该可以工作 Cargo.toml: [package] name = "req" version = "0.1.0" authors = ["X"] edition = "2018&q

我不知道如何使用rust从AWS Lambda发出一个简单的HTTP请求,而不会出现分段错误。不管我使用的是带有兼容层的tokio-0.2还是tokio-0.3,我都会遇到这个错误。看起来lambda_http是用tokio-0.2编译的,所以应该可以工作

Cargo.toml

[package]
name = "req"
version = "0.1.0"
authors = ["X"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
lambda_http = { version = "0.2.0-beta.1", git = "https://github.com/awslabs/aws-lambda-rust-runtime" }
tokio = { version = "0.3.4", features = ["full"] }
tokio-compat-02 = "0.1.2"
reqwest = { version = "0.10.9", features = ["json"] }
main.rs

使用lambda\u http::{
handler,
lambda::{self,Context},
回应、请求,
};
//注:
//单独使用tokio-0.2时,会出现分段错误
//当tokio-0.2与tokio-0.3兼容时,会出现分段故障
//当tokio-0.2与tokio-0.3不兼容时,“主要”会恐慌,因为“存在
//无反应堆运行,必须从Tokio运行时的上下文中调用
//使用tokio_compat_02::FutureExt;
发布类型错误=框结果{
让_res=reqwest::get(“https://www.google.com)等等?;
//注意:[东京-0.2兼容]-这没有帮助
//让_res=reqwest::get(“https://www.google.com)compat()等待?;
Ok(“成功”)
}
deploy.sh

PKG\u CONFIG\u ALLOW\u CROSS=1货物构建--发布--目标x86\u 64-unknown-linux-musl
cp target/x86_64-unknown-linux-musl/release/req target/x86_64-unknown-linux-musl/release/bootstrap
zip-j target/x86_64-unknown-linux-musl/release/bootstrap.zip target/x86_64-unknown-linux-musl/release/bootstrap
#aws lambda创建函数\
#--功能名称reqwest测试\
#--汉德勒不要紧\
#--压缩文件fileb://target/x86_64-unknown-linux-musl/release/bootstrap.zip \
#--提供运行时\
#--角色[已删除]\
#--环境变量={RUST\u BACKTRACE=1}\
#--跟踪配置模式=活动
aws lambda更新功能代码\
--函数名reqwest测试\
--压缩文件fileb://target/x86_64-unknown-linux-musl/release/bootstrap.zip
event.json

{
“标题”:{
“接受”:“*/*”,
“内容长度”:“0”,
“主机”:“xxx.execute api.us-east-1.amazonaws.com”,
“用户代理”:“curl/7.64.1”,
“x-amzn-trace-id”:“根=1-5eb33c07-de25b420912dee103a5db434”,
“x-for”:“65.78.31.245”,
“x转发端口”:“443”,
“x-forwarded-proto”:“https”
},
“isBase64Encoded”:false,
“rawPath”:“/”,
“rawQueryString”:“,
“请求上下文”:{
“accountId”:“123456789012”,
“apid”:“xxx”,
“域名”:“xxx.execute api.us-east-1.amazonaws.com”,
“域名前缀”:“xxx”,
“http”:{
“方法”:“获取”,
“路径”:“/”,
“协议”:“HTTP/1.1”,
“sourceIp”:“65.78.31.245”,
“用户代理”:“curl/7.64.1”
},
“requestId”:“MIZRNhJtIAMEMDw=”,
“routeKey”:“$default”,
“阶段”:“$default”,
“时间”:“06/May/2020:22:36:55+0000”,
“时间纪元”:1588804615616
},
“routeKey”:“$default”,
“版本”:“2.0”
}

这可以通过不与openssl交叉编译来解决,openssl在glibc中动态链接。您可以将其更改为
reqwest={version=“0.45.0”,默认特性=false,特性=[“rustls”]}
。如果您使用的是
rusoto
板条箱,除了
features=[“rustls”]

谢谢,我用这个解决方案解决了同样的问题