来自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; 
} 
+0

请发布您的失败的lambda代码。有很多事情可能会出错,很难确定哪里出了问题。 – Kannaiyan

+0

谢谢你的建议。刚刚做到了。 – JC1

通过静态编译一切正常(尤其是--enable-静态NSS配置的libc)解决了这个问题。