如何检索AWS Batch作业参数?

时间:2018-04-10 15:16:19

标签: aws-batch

如何从AWS Batch作业请求中检索参数?假设我有一个作业提交者应用程序,它使用以下代码发送作业请求(在C#中):

    SubmitJobRequest submitJobRequest = new SubmitJobRequest()
    {
        JobName = "MyJobName",
        JobQueue = "MyJobQueue",
        JobDefinition = "MyJobDefinition:1",
        Parameters = new Dictionary<string, string>() { {"Foo", "Bar" } },
    };

    SubmitJobResponse submitJobResponse = AWSBatchClient.SubmitJob(submitJobRequest);

我现在想要做的是检索启动的docker应用程序中submitJobRequest的Parameters字段中的内容。我怎么做?它没有作为程序args传递,因为我已经测试过(我看到的唯一的args是静态定义的&#39; Command&#39;我的工作定义)。我知道我可以通过容器覆盖设置环境变量,然后通过Environment.GetEnvironmentVariable(在C#中)检索它们。但我不知道如何获得参数。感谢。

2 个答案:

答案 0 :(得分:2)

以下是使用yaml cloudformation的示例。(或者您可以将json用于相同的属性)。您可以使用 command 部分中的 Ref 声明参数。我正在使用用户名,但是您可以添加更多。我们可能限制为30KB的有效负载

ContainerProperties:
   Command:
       - "python"
       - "Your command here"
       - "--user_name"
       - "Ref::user_name"

现在,您可以像这样将作业提交到队列中。我正在使用python和 boto3 客户端:

  # Submit the job
    job1 = client.submit_job(
        jobName=jobName,
        jobQueue=jobQueue,
        jobDefinition=jobDefinition,
        parameters={
            'user_name':user_name
        }
    )

要检索参数,请使用此(我正在使用argparse):

  parser = argparse.ArgumentParser(description='AWS Driver Batch Job Runner')
  parser.add_argument('--user_name', dest='user_name', required=True)
  args = parser.parse_args()
  print(args.user_name)

答案 1 :(得分:1)

找到了我想要的答案。我只需要在作业定义中为Command的参数添加一个ref。在问题示例中,我需要在作业定义中指定Ref :: Foo for Command,然后在&#34; Bar&#34;它会被作为程序args传递给我的容器应用程序。