2017-10-09 15 views
0

J'essaie d'accéder à AWS S3 à partir d'un lambda en utilisant l'interface S3 C++.Interface C++ AWS S3 de lambdas

J'ai créé un test simple qui écrit un objet dans S3. Le test fonctionne correctement sur une VM normale mais échoue lors de l'exécution sur un lambda.

J'ai déterminé que le test fonctionne avec succès jusqu'à ce que le fait mis opération:

auto put_object_outcome = s3_client.PutObject(putObjectRequest); 

Une fois que l'exécution frappe cette ligne le processus se termine avec succès. Toute ligne après l'appel PutObject n'est pas exécutée.

Des idées sur ce qui pourrait se passer? Tous les exemples d'utilisation de l'interface C++ sur lambdas sont également appréciés.

EDIT:

J'ai déterminé que le code ne parvient pas à l'appel à curl_easy_perform qui indique que cela est un problème au niveau curl.

Mon code:

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

Veuillez poster votre code lambda qui est défectueux. Il y a beaucoup de choses qui peuvent mal tourner, difficile de déterminer ce qui s'est mal passé. – Kannaiyan

+0

Merci pour votre suggestion. Je l'ai juste fait. – JC1

Répondre

0

résolu ce problème en compilant statiquement tout correctement (en particulier libc avec --enable-statique SNN).