标签: aws-sdk-cpp

如何在由 Python 中的 Lambda 函数调用的 C++ 中实现的 AWS Lambda 层中使用 AWS SDK C++ XRay?

我的团队使用 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)

c++ cmake amazon-web-services aws-xray aws-sdk-cpp

13
推荐指数
0
解决办法
448
查看次数

使用 C++ SDK 将文件上传到 AWS

每当我运行我的程序时,我都会收到错误“无法连接到端点”。但我知道我可以连接到该存储桶,因为我可以使用相同的配置和 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)

c++ amazon-s3 amazon-web-services aws-sdk-cpp

8
推荐指数
1
解决办法
1799
查看次数

为什么我不能在AWS Batch C ++ SDK中为多节点并行作业覆盖容器变量?

我正在使用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)

amazon-web-services aws-sdk aws-batch aws-sdk-cpp

7
推荐指数
1
解决办法
215
查看次数

适用于 C++ 的 AWS 开发工具包中的“allocationTag”参数的用途是什么?

AWS 内存分配函数、Aws::MakeSharedAws::MakeUniqueAws::MakeUniqueArrayAws::MallocAws::NewAws::NewArray都需要提供一个 const char * allocationTag 参数,但是,目前尚不清楚该字符串的确切用途。

AWS SDK for C++ 文档Aws::MakeShared说:

“...allocationTag 用于内存跟踪目的。”

但是 allocationTag 究竟是如何用于内存跟踪的呢?是否有关于 AWS 内存管理功能使用的 allocationTags 值的指南?

c++ amazon-web-services aws-sdk-cpp

6
推荐指数
1
解决办法
196
查看次数

如何使用 TransferManager 在应用程序重新启动后恢复分段上传?

我正在尝试编写一个应用程序来连续上传大数据(分段上传)到亚马逊的S3存储。但是,我的应用程序需要能够在传输中关闭并在下次重新启动时从中断处继续。

通过稍微使用 C++ SDK,TransferManager 类提供了一个函数,该函数需要一个指向发出初始调用时返回的对象的RetryUpload共享指针。但是,如果应用程序崩溃或必须在操作过程中关闭,传输句柄对象将不再存在。TransferHandleUploadFile

在这种情况下,是否可以使用该类恢复分段上传TransferManager?实际上,这可能需要重建传输句柄对象,我不太确定该怎么做。看起来这个TransferManager类只是一个很好的包装器S3Client,它似乎更清楚如何恢复操作,但对于一般的分段上传来说似乎更痛苦

c++ amazon-web-services aws-sdk-cpp

5
推荐指数
0
解决办法
269
查看次数

使用提供的运行时如何在本地调试 AWS Lambda?

我想在本地调试用 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 上做到这一点?

c++ gdb docker aws-lambda aws-sdk-cpp

5
推荐指数
0
解决办法
423
查看次数

在 AWS C++ SDK 的 Lambda 调用请求上设置负载

是否可以在 AWS C++ SDK 的 Lambda 调用请求上设置有效负载?当查看文档时,这似乎是不可能的。

aws-sdk-cpp

4
推荐指数
1
解决办法
356
查看次数

使用 AWS C++ SDK 分段上传 S3

我正在尝试使用 AWS C++ SDK 中的分段上传功能将文件上传到 S3。我可以找到 JAVA、.NET、PHP、RUBY 和 Rest API 的示例,但没有找到有关如何在 C++ 中执行此操作的任何线索。你能否为我提供一个方向来实现同样的目标。

c++ multipart amazon-s3 aws-sdk-cpp

4
推荐指数
1
解决办法
1834
查看次数

由于 install(EXPORT "foo-targets" ...) 在导出集中多次包含目标 "foo",aws-cpp-sdk 在 Windows 构建期间失败

问这样我可以自己回答这个问题,为此浪费了一天,并希望为其他人省去麻烦。

设置:

你尝试这样的事情:

  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)

c++ cmake visual-studio aws-sdk-cpp

3
推荐指数
1
解决办法
485
查看次数