4

如何从 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 的参数字段中的内容。我怎么做?它不是作为程序参数传入的,因为我已经测试过了(我看到的唯一参数是为我的工作定义的“命令”静态定义的)。我知道我可以通过容器覆盖设置环境变量,然后通过 Environment.GetEnvironmentVariable(在 C# 中)检索它们。但我不知道如何获取参数。谢谢。

4

2 回答 2

3

这是一个使用 yaml cloudformation 的示例。(或者您可以将 json 用于相同的属性)。您可以在命令部分使用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)
于 2020-06-24T20:01:41.137 回答
2

找到了我正在寻找的答案。我只需要在作业定义中为 Command 的参数添加一个 ref。在问题示例中,我需要在作业定义中为 Command 指定 Ref::Foo,然后“Bar”将作为程序参数传递给我的容器应用程序。

为了扩展我的示例,在我的特定情况下,我的程序使用CommandLineParser包来传递参数。假设命令行选项之一称为 Foo。如果我从命令行运行程序,我会为 Foo 设置一个值,例如“--Foo Bar”。为了有效地为我的批处理作业做同样的事情,在我的作业定义中,对于命令,我会指定“--Foo Ref::Foo”(不带引号)。然后对于我的 SubmitJobRequest 对象中的参数字段,我将完全按照我的原始示例设置 Foo,然后我的批处理程序将看到 Foo CommandLine 选项的“Bar”(就像它使用“--Foo Bar”运行一样) )。希望有帮助。

于 2018-04-10T17:22:38.250 回答