Search code examples
amazon-web-servicesamazon-ecsamazon-cloudwatch

CloudWatch Event Rule and SNS for updates on ECS service


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?


Solution

  • 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",
            ]
      }
    }