经过几周的努力,我自己的帖子得到了回复。
基本点总结在Introduction to Amazon S3 Object Lambda
感兴趣的 JSON 有效负载很简单:
{ "xAmzRequestId": "1a5ed718-5f53-471d-b6fe-5cf62d88d02a",
"getObjectContext": {
"inputS3Url": "https://transform-424432388155.s3-accesspoint.us-east-1.amazonaws.com/title.txt?X-Amz-Security-Token=...",
"outputRoute": "io-iad-cell001",
"outputToken": "..." },
您可以简单地使用以下命令打开它:
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 view = json.View();
auto s3url = view.GetObject("getObjectContext").GetString("inputS3Url");
auto route = view.GetObject("getObjectContext").GetString("outputRoute");
auto token = view.GetObject("getObjectContext").GetString("outputToken");
稍后将在 WriteGetObjectResponseRequest 中用作:
S3::Model::WriteGetObjectResponseRequest request;
request.WithRequestRoute(route);
request.WithRequestToken(token);
request.SetBody(objectStream);
auto outcome = client.WriteGetObjectResponse(request);
然后由应用程序决定如何构造 objectStream,但一个简单的传递示例是:
std::shared_ptr<Aws::Http::HttpRequest> getRequest =
CreateHttpRequest(s3url, Http::HttpMethod::HTTP_GET,
Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
std::shared_ptr<Aws::Http::HttpClient> httpClient =
Aws::Http::CreateHttpClient(Aws::Client::ClientConfiguration());
std::shared_ptr<Aws::Http::HttpResponse> getResponse =
httpClient->MakeRequest(getRequest);
std::shared_ptr<Aws::IOStream> objectStream =
Aws::MakeShared<Aws::StringStream>("SO-WriteGetObjectResponse");
const Aws::IOStream& responseBody = getResponse->GetResponseBody();
*objectStream << responseBody.rdbuf();
objectStream->flush();
对我有帮助的例子是: