来自lambdas的C++ AWS S3接口
问题描述:
我想从使用S3 C++接口的lambda中访问AWS S3。来自lambdas的C++ AWS S3接口
我创建了一个将对象写入S3的简单测试。测试在常规VM上运行良好,但在lambda上运行时失败。
我已经确定了测试运行successfuly直到实际把操作:
auto put_object_outcome = s3_client.PutObject(putObjectRequest);
一旦执行打这条线的过程中成功终止。 PutObject调用后的任何行都不会执行。
任何想法可能会发生什么?在lambdas上使用C++接口的任何例子也是值得赞赏的。
编辑:
我已经确定代码在调用未能curl_easy_perform这表明这是卷曲水平的问题。
我的代码:
Aws::SDKOptions options;
void initialize_aws() {
Aws::InitAPI(options);
}
Aws::S3::S3Client create_client() {
Aws::Client::ClientConfiguration clientConfig;
clientConfig.scheme = Aws::Http::Scheme::HTTPS;
clientConfig.region = Aws::Region::US_WEST_2;
Aws::S3::S3Client s3_client(clientConfig);
return s3_client;
}
bool put_object(uint64_t id, Aws::S3::S3Client& s3_client,
const std::string& bucket_name, const std::string& object) {
std::string key_name = std::to_string(id);
Model::PutObjectRequest putObjectRequest;
putObjectRequest.WithBucket(bucket_name)
.WithKey(key_name);
auto ss = Aws::MakeShared<Aws::StringStream>("TAG");
*ss << object;
ss->flush();
putObjectRequest.SetBody(ss);
// fails here
auto put_object_outcome = s3_client.PutObject(putObjectRequest);
if (put_object_outcome.IsSuccess()) {
return true;
}
else {
std::cout << "PutObject error: " <<
put_object_outcome.GetError().GetExceptionName() << " " <<
put_object_outcome.GetError().GetMessage() << std::endl;
return false;
}
return false;
}
int main(int argc, char** argv) {
initialize_aws();
auto client = create_client();
bool success = put_object(0, client, "bucket_aws_s3_cpp", "1234567");
shutdown_aws();
return 0;
}
答
通过静态编译一切正常(尤其是--enable-静态NSS配置的libc)解决了这个问题。
请发布您的失败的lambda代码。有很多事情可能会出错,很难确定哪里出了问题。 – Kannaiyan
谢谢你的建议。刚刚做到了。 – JC1