Joe*_*ppy 5 amazon-ecs amazon-cloudwatch
我目前有一个 ECS 任务时常失败,并出现不同的错误代码。我想创建一个在此类故障时触发的 CloudWatch 事件规则。我目前有以下云监视事件规则,仅在退出代码 1 时触发。我希望收到所有非零错误退出代码的通知。
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
"Essential container in task exited"
],
"containers": {
"exitCode": [
"1"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ntw*_*ike 12
现在您可以在CW 规则中使用“anything-but” 。
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"containers": {
"exitCode": [
{
"anything-but": 0
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
事件模式中没有否定函数。它只是完全匹配。从这里:
请务必记住有关事件模式匹配的以下几点:
对于与事件匹配的模式,事件必须包含模式中列出的所有字段名称。字段名称必须以相同的嵌套结构出现在事件中。
模式中未提及的事件的其他字段将被忽略;实际上,对于未提及的字段有一个“ ”:“ ”通配符。
匹配是精确的(逐个字符),没有大小写折叠或任何其他字符串规范化。
匹配的值遵循 JSON 规则:用引号括起来的字符串、数字以及不带引号的关键字 true、false 和 null。
数字匹配是在字符串表示级别上进行的。例如,300、300.0 和 3.0e2 不被视为相等。
如果您有已知数量的退出代码,从此处,您可以在规则中包含一组退出代码。就像是:
{
"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...]
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于退出代码的数量有限 (0-255),因此您可以将它们全部输入到数组中。
显然,这看起来非常愚蠢。对于更优雅(并且可以说更强大)的解决方案,您需要修改事件规则以触发任何“STOPPED”事件,并创建自定义 lambda 函数。
exitCode != 0。如果为 true,则发送通知(SNS、SES,无论您使用什么......)。| 归档时间: |
|
| 查看次数: |
4771 次 |
| 最近记录: |