Repository navigation
Question about timeouts #119
Copy link
Copy link
Open
Description
Hello,
I have followed the examples here: https://aws.amazon.com/blogs/compute/introducing-the-c-lambda-runtime/
When I run my internal execution so that it takes 5 seconds everything works fine. But when I run it for 70 seconds I never get any response and the lambda function seems to be restarting several times. My guess is that is has to do with some timeouts. But how do I configure them? I cannot find any good developer reference.
static invocation_response my_handler(invocation_request const& req, Aws::S3::S3Client const& client) {
using namespace Aws::Utils::Json;
JsonValue json(req.payload);
if (!json.WasParseSuccessful()) {
return invocation_response::failure("Failed to parse input JSON", "InvalidJSON");
}
auto v = json.View();
if (!v.ValueExists("s3bucket") || !v.ValueExists("s3key") || !v.GetObject("s3bucket").IsString() ||
!v.GetObject("s3key").IsString()) {
return invocation_response::failure("Missing input value s3bucket or s3key", "InvalidJSON");
}
auto bucket = v.GetString("s3bucket");
auto key = v.GetString("s3key");
AWS_LOGSTREAM_INFO(TAG, "Attempting to download file from s3://" << bucket << "/" << key);
// Internal execution about 70 seconds...
string response = "Success!";
return invocation_response::success("We did it! Response: " + response, "application/json");
}
std::function<std::shared_ptr<Aws::Utils::Logging::LogSystemInterface>()> GetConsoleLoggerFactory() {
return [] {
return Aws::MakeShared<Aws::Utils::Logging::ConsoleLogSystem>(
"console_logger", Aws::Utils::Logging::LogLevel::Info);
};
}
Aws::Client::ClientConfiguration getS3Config() {
Aws::Client::ClientConfiguration config;
config.region = "us-east-1";
config.scheme = Aws::Http::Scheme::HTTP;
return config;
}
Aws::Client::ClientConfiguration getS3ConfigWithBundle() {
cout << "USING S3 REGION: " << Aws::Environment::GetEnv("AWS_REGION") << endl;
Aws::Client::ClientConfiguration config;
config.region = Aws::Environment::GetEnv("AWS_REGION");
config.scheme = Aws::Http::Scheme::HTTP;
return config;
}
void run_lambda_handler() {
Aws::S3::S3Client client(getS3ConfigWithBundle());
auto handler_fn = [&client](aws::lambda_runtime::invocation_request const& req) {
return my_handler(req, client);
};
run_handler(handler_fn);
}
int main(int argc, const char **argv) {
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
options.loggingOptions.logger_create_fn = GetConsoleLoggerFactory();
Aws::InitAPI(options);
run_lambda_handler();
Aws::ShutdownAPI(options);
return 0;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
marcomagdy commentedon Apr 21, 2021
Can you paste the logs from cloud watch?
joscul commentedon Apr 22, 2021
Hello,
Yes hera are the logs from one of those runs, nothing unusual it just restarts three times from one invokation:
marcomagdy commentedon Apr 22, 2021
The logs show the AWS SDK attempting to read configuration from the local filesystem.
I suggest you use the environment credential provider as in https://github.com/awslabs/aws-lambda-cpp/blob/master/examples/s3/main.cpp#L76. And make sure you set up the environment variables in Lambda.
specious commentedon Aug 20, 2022
The logs look like three successful invocations (the first one being a cold start) that each complete in about 70 seconds and return.