amazon-web-services - 使用 Terraform for ECS 在 CloudWatch 中包含退出代码 1 事件
问题描述
我一直在 ECS 上运行容器,并使用 AWS Cloudwatch 事件在我的任务完成时通知我。所有基础设施都是使用 Terraform 创建的。但是,我无法在我的事件模式中获得正确的语法,因此我只会收到非零退出代码的通知。
以下资源效果很好,每次我的一个容器退出时都会向 SNS 发送通知:
resource "aws_cloudwatch_event_rule" "container-stopped-rule" {
name = "container-stopped"
description = "Notification for containers that exit for any reason. (error)."
event_pattern = <<PATTERN
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason" : [
"Essential container in task exited"
]
}
}
PATTERN
}
但是,我正在尝试稍微修改模式,以便仅在容器以错误代码退出时才收到通知 - 因为我们收到如此多的通知,我们已经开始调出电子邮件,有时不会注意到容器因错误退出的电子邮件通知:
resource "aws_cloudwatch_event_rule" "container-stopped-rule" {
name = "container-stopped"
description = "Notification for containers with exit code of 1 (error)."
event_pattern = <<PATTERN
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"containers": [
{
"exitCode": 1
}
],
"lastStatus": [
"STOPPED"
],
"stoppedReason" : [
"Essential container in task exited"
]
}
}
PATTERN
}
这会在我触发以下错误terraform apply
:
aws_cloudwatch_event_rule.container-stopped-rule:更新 CloudWatch 事件规则失败:InvalidEventPatternException:事件模式无效。原因:在 [Source: (String)"{"detail":{"containers":[{"exitCode":1}],"lastStatus":[" 处匹配值必须为 String、number、true、false 或 null已停止"],"stoppedReason":["任务中的基本容器已退出"]},"detail-type":["ECS 任务状态更改"],"source":["aws.ecs"]}"; 行:1,列:27]状态码:400
这让我感到困惑,因为我遵循的是AWS CloudWatch 文档中针对容器列出的确切结构。我什至尝试用双引号括起来1
,以防 Terraform 需要字符串而不是数字。
我还尝试使用 AWS 控制台手动编辑事件模式 JSON,但收到此错误:
验证错误。详细信息:事件模式包含无效值(只能是非空数组或非空对象)
老实说,在这一点上我有点难过,如果我的语法不正确,我会很感激任何提示。
解决方案
事件模式语法很奇怪,我遇到了同样的问题。以下将起作用:
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
"Essential container in task exited"
],
"containers": {
"exitCode": [
1
]
}
}
}
我$.detail.group
在 Input Transformer 中使用来获取通知消息中的任务系列名称。
推荐阅读
- python - 使用 python tkinter 和 pygame 播放 mp3
- css - CSS问题:如何为列表中的所有标签添加一个类
- excel - CTRL+shift+L,在我的 excel 2007 中不起作用,而是提示一个带有消息的对话框
- python - 有条件地删除组中的最后一行
- java - 如何从 JSON HTTP 响应 Spring Boot 中仅解析 1 个变量
- node.js - 运行良好几个小时后,TypeOrm 查询无法从 Nodejs 应用程序中的 postgres 服务器获取数据
- java - Dot(.) 运算符在尝试查找文件时不起作用
- vue.js - 从子组件中获取选中的复选框
- python - 如何在python中模拟redis?
- autolayout - 禁用故事板自动布局连接安全区域默认