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

Unb*_*ess 7 amazon-web-services aws-sdk aws-batch aws-sdk-cpp

我正在使用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 is an exmaple. I have used the actual queue ARN.
    submitJobRequest.SetContainerOverrides(containerOverrides);

    submitJobOutcome = batchClient.SubmitJob(submitJobRequest);

    Aws::ShutdownAPI(options);

    return 0;
Run Code Online (Sandbox Code Playgroud)

}

我应该对多节点并行作业使用其他API吗?

JD *_*D D 0

不要在请求中设置顶级容器覆盖,而是尝试在请求的节点覆盖内部设置容器覆盖。节点覆盖有一个节点属性覆盖向量,其中包含容器覆盖(包括环境变量)。在节点属性覆盖中,您需要指定目标节点的名称。

我不太擅长 C++,所以我无法为您提供确切的代码示例,但 SDK 调用的 API 的 JSON 看起来像这样:


POST /v1/submitjob HTTP/1.1
Content-type: application/json

{
   "jobDefinition": "string",
   "jobName": "string",
   "jobQueue": "string",
   "nodeOverrides": { 
      "nodePropertyOverrides": [ 
         { 
            "containerOverrides": { 
               "command": [ "string" ],
               "environment": [ 
                  { 
                     "name": "string",
                     "value": "string"
                  }
               ],
               "instanceType": "string",
               "memory": number,
               "resourceRequirements": [ 
                  { 
                     "type": "string",
                     "value": "string"
                  }
               ],
               "vcpus": number
            },
            "targetNodes": "string"
         }
      ],
      "numNodes": number
   },
   # lots of other stuff
}

Run Code Online (Sandbox Code Playgroud)

希望有帮助。