1
votes

I want to receive an email every time I update my ECS service (and once the update finishes or the desired state was reached)

I thought about CloudWatch Events Rules setting an SNS topic as target (which a confirmed email address). However, it doesn't work.

This is my custom Event pattern:

{
  "detail-type": [
    "ECS Update"
  ],
  "resources": [
    "arn:aws:ecs:us-east-1:aws-account:service/myService"
  ],
  "source": [
    "aws.ecs"
  ],
  "detail": {
    "clusterArn": [
      "arn:aws:ecs:us-east-1:aws-account:cluster/myCluster"
    ],
    "eventName": [
      "SERVICE_STEADY_STATE"
    ],
    "eventType": [
      "INFO"
    ]
  }
}

I also tried:

  • TASKSET_STEADY_STATE
  • CAPACITY_PROVIDER_STEADY_STATE
  • SERVICE_DESIRED_COUNT_UPDATED

I'm updating the service through the cli

aws ecs update-service --cluster myCluster --service myService --task-definition myTaskDef --force-new-deployment --desired-count 2

The status of the event rule is enabled and the target is the SNS topic. The input is matched event.

I don't have any clue. Am I using the wrong event name?

1
Where did you find detail type of ECS Update? From docs it seems it should be ECS Service Action?Marcin

1 Answers

3
votes

You can also set email notification on Task instead of service, also there is an issue regarding ECS notification.

I was not able to make it base on ECS status change, I controlled notification at lambda level. you can set this rule and its working for me.

{
  "source": [
    "aws.ecs"
  ],
  "detail-type": [
    "ECS Service Action"
  ]
}

you can expect a bit delay as I already experienced this and also reported in GitHub Issue.

Here is the JSON event that you will receive for above rule.

{
  "version": "0",
  "id": "c3c27e7b-abcd-efgh-c84e-highgclkl",
  "detail-type": "ECS Service Action",
  "source": "aws.ecs",
  "account": "1234567890",
  "time": "2020-06-27T00:00:00.00Z",
  "region": "us-west-2",
  "resources": [
    "arn:aws:ecs:us-west-2:1234567890:service/test"
  ],
  "detail": {
    "eventType": "INFO",
    "eventName": "SERVICE_STEADY_STATE",
    "clusterArn": "arn:aws:ecs:us-west-2:123456789:cluster/mycluster",
    "createdAt": "2020-06-27T00:00:00.00Z"
  }
}

ecs_cwe_events

or the other option is so you can try task-based changes.

{
  "source": [
    "aws.ecs"
  ],
  "detail-type": [
    "ECS Task State Change"
  ],
  "detail": {
    "lastStatus": [
      "STOPPED",
      "RUNNING"
    ],
    "clusterArn": [
      "arn:aws:ecs:us-west-2:123456789:cluster/my_cluster",
        ]
  }
}