我尝试使用S3 C ++界面从lambda访问AWS S3。
我创建了一个将对象写入S3的简单测试。测试在常规VM上运行良好,但在lambda上运行时失败。
我已经确定测试成功运行,直到实际 put 操作:
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;
}
答案 0 :(得分:0)
通过正确地静态编译所有内容解决了这个问题(特别是带有--enable-static-nss配置的libc)。