如何在 CloudWatch 中将计划触发器的参数传递到 AWS Batch 作业?

上次更新时间:2020 年 5 月 15 日

我想要在 Amazon CloudWatch 中将计划触发器的参数传递到 AWS Batch 作业。

简短描述

在 AWS Batch 中,您的参数是您在 AWS Batch 作业定义的命令部分中定义的变量占位符。这些占位符可让您:

  • 对使用相同格式的多个作业使用相同作业定义。
  • 在提交时以编程方式更改命令中的值。

最佳实践是将您的参数定义为键值对。例如:

"Parameters" : {"test" : "abc"}

如果您注册作业定义或提交作业,请使用作业容器属性的命令字段中的参数替代占位符。例如:

"Command" : [ "echo” "Ref::test" ]

当您提交前述作业时,容器命令中的 Ref::test 参数将被替换为默认值 (abc)。

您可以在提交作业时为相同参数键定义不同参数值。例如:

"Parameters" : {"test" : "hello"}

当您提交前述作业时,容器命令中的 Ref::test 参数将被替换为您在作业提交期间定义的自定义值默认值 (hello)。

解决方法

设置您的 AWS Batch 环境

1.    创建计算环境

2.    创建一个作业队列,然后将您的作业队列与您在步骤 1 中创建的计算环境关联。

3.    使用映像(例如 nginx创建作业定义

创建 Amazon CloudWatch Events 规则

1.    打开 CloudWatch 控制台

2.    在导航窗格中,选择事件

3.    选择开始使用

4.    在事件源部分中,基于您的需求选择事件模式计划

5.    对于目标,请选择添加目标

6.    从目标列表中,选择批处理作业队列

7.    对于作业队列,输入您之前创建的作业队列的名称。

8.    对于作业定义,输入您之前创建的作业定义的名称。

9.    对于作业名称,请输入您的作业名称。

10.    展开配置输入部分,然后选择常数(JSON 文本)

11.    在出现的文本框中,输入以下内容:

{"Parameters": {"name":"test"}, "ContainerOverrides": { "Command": ["echo","Ref::name"] } }

规则在 CloudWatch 调用规则时提交 AWS Batch 作业。如果作业成功,您的 CloudWatch 日志将在以下位置打印“test”字样:

Log Group: /aws/batch/job 
Log Stream: yourJobDefinitionName/default/your-ecs-task-ID

重要提示:您必须对 CloudWatch Events 规则中的 JSON 文本使用驼峰式大小写。

12.    选择配置详细信息,然后完成设置向导中的剩余步骤来创建规则。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?