我的团队使用 C++ 在 Tensorflow 和 Keras 中实现了一个带有计算机视觉 (OpenCV) 和 DNN 的管道。该管道是一个 AWS 层,由在 Python 中实现的 AWS Lambda 函数使用,并且该层是通过 Boost 库调用的。
根据需要,它还创建了一个 docker 容器,其中包含构建管道代码(使用 cmake)和部署的所有要求(OpenCV、Boost、Python 3.7、Serverless 等)。一切正常,管道和 lambda 函数已成功构建和部署。
现在,我的挑战是:为了提高管道的性能,我想测量这个管道的几个步骤的持续时间,我试图使用 aws-sdk-cpp-xray 来做到这一点。
在开始编码之前,我在用于构建和部署管道(作为层)和 Lambda 函数的同一个 docker 容器中添加并构建了 aws-sdk-cpp(下面是我在 Dockerfile 中添加的部分):
# Build AWS SDK with BUILD_ONLY XRay
RUN mkdir /tmp/${AWS_SDK_CPP}/build
WORKDIR /tmp/${AWS_SDK_CPP}/build
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_ONLY="xray" \
-D TARGET_ARCH=LINUX \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D ENABLE_TESTING=OFF \
-D SIMPLE_INSTALL=OFF \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_DEPS=ON \
..
RUN make …Run Code Online (Sandbox Code Playgroud) 每当我运行我的程序时,我都会收到错误“无法连接到端点”。但我知道我可以连接到该存储桶,因为我可以使用相同的配置和 s3Client 成功下载该存储桶中的文件。它卡在 PutObject() 行上。
这是代码。
const String KEY = "test2.txt";
const String BUCKET = "savefiles2017";
const String fileName = "test2.txt";
Client::ClientConfiguration config;
config.region = Region::US_WEST_2;
config.scheme = Http::Scheme::HTTPS;
S3Client s3Client(Auth::AWSCredentials("XXXXXX", "YYYYYY"), config);
//putting something into s3
PutObjectRequest putObjectRequest;
putObjectRequest.WithBucket(BUCKET).WithKey(KEY);
auto requestStream = MakeShared<FStream>("PutObjectInputStream", fileName.c_str(), ios_base::in);
putObjectRequest.SetBody(requestStream);
auto putObjectOutcome = s3Client.PutObject(putObjectRequest);
if (putObjectOutcome.IsSuccess())
{
cout << "Put object succeeded" << endl;
}
else
{
cout << "Error while putting Object " << putObjectOutcome.GetError().GetExceptionName() <<
" " << putObjectOutcome.GetError().GetMessage() << endl; …Run Code Online (Sandbox Code Playgroud) 我正在使用AWS Batch。我的目标是通过适用于C ++的AWS开发工具包创建一个多节点并行作业。为此,我按照此处的说明创建了工作定义。
我正在使用AWS C ++ SDK,并且注意到当我尝试覆盖环境变量或命令时,实际上什么都没有转移到作业中。
有趣的是,对于使用常规作业定义(而不是多节点作业)的作业,相同的代码可以很好地工作:
#include <aws/batch/BatchClient.h>
#include <aws/batch/model/ContainerOverrides.h>
#include <aws/batch/model/KeyValuePair.h>
#include <aws/batch/model/SubmitJobRequest.h>
#include <aws/core/Aws.h>
#include <aws/core/utils/Outcome.h>
int main(void)
{
Aws::SDKOptions options;
Aws::InitAPI(options);
Aws::Batch::BatchClient batchClient;
Aws::Batch::Model::SubmitJobRequest submitJobRequest;
Aws::Batch::Model::SubmitJobOutcome submitJobOutcome;
Aws::Batch::Model::ContainerOverrides containerOverrides;
Aws::Batch::Model::KeyValuePair envVariable;
envVariable.SetName("foo");
envVariable.SetValue("bar");
containerOverrides.AddEnvironment(envVariable); // This does nothing for a multi-node job definition.
containerOverrides.AddCommand("foobarbaz"); // This does nothing for a multi-node job definition.
submitJobRequest.SetJobName("myjob");
submitJobRequest.SetJobDefinition("arn:aws:...."); // This string is an example. I have used the actual job definition ARN.
submitJobRequest.SetJobQueue("arn:aws:...."); // This string …Run Code Online (Sandbox Code Playgroud) AWS 内存分配函数、Aws::MakeShared、Aws::MakeUnique、Aws::MakeUniqueArray、Aws::Malloc、Aws::New和Aws::NewArray都需要提供一个 const char * allocationTag 参数,但是,目前尚不清楚该字符串的确切用途。
AWS SDK for C++ 文档Aws::MakeShared说:
“...allocationTag 用于内存跟踪目的。”
但是 allocationTag 究竟是如何用于内存跟踪的呢?是否有关于 AWS 内存管理功能使用的 allocationTags 值的指南?
我正在尝试编写一个应用程序来连续上传大数据(分段上传)到亚马逊的S3存储。但是,我的应用程序需要能够在传输中关闭并在下次重新启动时从中断处继续。
通过稍微使用 C++ SDK,TransferManager 类提供了一个函数,该函数需要一个指向发出初始调用时返回的对象的RetryUpload共享指针。但是,如果应用程序崩溃或必须在操作过程中关闭,传输句柄对象将不再存在。TransferHandleUploadFile
在这种情况下,是否可以使用该类恢复分段上传TransferManager?实际上,这可能需要重建传输句柄对象,我不太确定该怎么做。看起来这个TransferManager类只是一个很好的包装器S3Client,它似乎更清楚如何恢复操作,但对于一般的分段上传来说似乎更痛苦
我想在本地调试用 C++ 编写的 AWS Lambda 函数。理想情况下,我希望能够单步执行我的代码(就像您使用GDB或任何像样的 IDE 那样)。使用 AWS Lambdas 执行此操作的方法通常包括AWS SAM。
思路1,使用SAM调试:
不幸的是,SAM 不能让您调试提供的运行时,因为它“仅”支持 Node.js、Python 和 Go(比较文档)。
问题 1:
有没有办法以某种方式将 GDB 附加到我编译的 lambda 函数?
想法2,使用docker-lambda运行:
您还可以使用lambci/docker-lambda启动您的函数。如果你想得到一些调试输出,你可以做 strace docker run --rm -v my/build/dir:/var/task lambci/lambda:provided handler '{"some": "event"}'. 这有效,但并不是我正在寻找的调试质量。
问题2:
我可以以某种方式将 a 附加到正在运行的 lambda 函数docker-lambda吗?
想法3:远程:
绝望,去追求你能得到的任何东西(这不是我想做的)。
问题 3:
如果在本地真的没有办法做到这一点,我应该如何在 AWS 上做到这一点?
是否可以在 AWS C++ SDK 的 Lambda 调用请求上设置有效负载?当查看文档时,这似乎是不可能的。
我正在尝试使用 AWS C++ SDK 中的分段上传功能将文件上传到 S3。我可以找到 JAVA、.NET、PHP、RUBY 和 Rest API 的示例,但没有找到有关如何在 C++ 中执行此操作的任何线索。你能否为我提供一个方向来实现同样的目标。
问这样我可以自己回答这个问题,为此浪费了一天,并希望为其他人省去麻烦。
设置:
vcpkg替代的标准构建都会发生。如果您尝试手动构建https://github.com/aws/aws-sdk-cpp 中提到的“第 3 方依赖项”,也会发生这种情况。你尝试这样的事情:
git clone https://github.com/aws/aws-sdk-cpp.git
cd aws-sdk-cpp
mkdir build
cd build
cmake ..
Run Code Online (Sandbox Code Playgroud)
您收到来自 cmake 结尾的投诉:
[...]
Performing configure step for 'AwsChecksums'
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17763.
-- The C compiler identification is MSVC 19.27.29112.0
-- Detecting …Run Code Online (Sandbox Code Playgroud)