gpt4 book ai didi

amazon-web-services - 使用 Terraform for ECS 在 CloudWatch 中包含退出代码 1 事件

转载 作者:行者123 更新时间:2023-12-03 18:14:14 32 4
gpt4 key购买 nike

我一直在 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: Updating CloudWatch Event Rule failed: InvalidEventPatternException: Event pattern is not valid. Reason: Match value must be String, number, true, false, or null at [Source: (String)"{"detail":{"containers":[{"exitCode":1}],"lastStatus":["STOPPED"],"stoppedReason":["Essential container in task exited"]},"detail-type":["ECS Task State Change"],"source":["aws.ecs"]}"; line: 1, column: 27] status code: 400



这让我感到困惑,因为我遵循 AWS CloudWatch documentation for containers 中列出的确切结构。我什至尝试在 1 周围加上双引号,以防 Terraform 需要字符串而不是数字。

我还尝试使用 AWS 控制台手动编辑事件模式 JSON,但收到此错误:

Validation error. Details: Event pattern contains invalid value (can only be a nonempty array or nonempty object)



老实说,我在这一点上有点难住,如果我的语法不正确,我将不胜感激。

最佳答案

事件模式语法很奇怪,我遇到了同样的问题。以下将起作用:

{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
"Essential container in task exited"
],
"containers": {
"exitCode": [
1
]
}
}
}

我在输入转换器中使用 $.detail.group 来获取通知消息中的任务系列名称。

关于amazon-web-services - 使用 Terraform for ECS 在 CloudWatch 中包含退出代码 1 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015242/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com