我目前有一个ECS任务,该任务有时会失败,并带有不同的错误代码。我想创建一个在此类失败时触发的CloudWatch事件规则。我目前有以下云监视事件规则,仅在退出代码1上触发。我希望收到所有非零错误的退出代码的通知。
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
"Essential container in task exited"
],
"containers": {
"exitCode": [
"1"
]
}
}
}
答案 0 :(得分:0)
事件模式中没有否定功能。仅完全匹配。来自here:
记住有关事件模式的以下内容很重要 匹配:
为使模式与事件匹配,该事件必须包含模式中列出的所有字段名称。字段名称必须出现在 具有相同嵌套结构的事件。
模式中未提及的事件的其他字段将被忽略;有效地,对于未提及的字段,有一个“ ”:“ ”通配符。
匹配是精确的(逐个字符),没有大小写折叠或任何其他字符串归一化。
匹配的值遵循JSON规则:用引号,数字和不带引号的关键字true,false和null括起来的字符串。
数字匹配在字符串表示形式级别。例如,300、300.0和3.0e2被认为不相等。
如果您知道here中的退出代码数量,则规则中可以包含一组退出代码。像这样:
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
"Essential container in task exited"
],
"containers": {
"exitCode": ["1", "2", "3", and so on...]
}
}
}
由于退出代码数量有限(0-255),因此您可以将它们全部输入到数组中。
显然,这看起来非常愚蠢。对于更优雅(且可以说是可靠的)解决方案,您需要修改事件规则以在任何“ STOPPED”事件上触发,并创建自定义lambda函数。
exitCode != "0"
询问事件代码。如果为true,则发送通知(SNS,SES,无论您使用什么...)。答案 1 :(得分:0)
现在您可以在CW rules中使用“除了”。
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"containers": {
"exitCode": [
{
"anything-but": 0
}
]
}
}
}