Amazon EventBridge를 사용한 AWS ECS 작업 배포 실패 알림

Amazon Elastic Container Service(ECS)는 Docker 컨테이너를 지원하고 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 관리형 클러스터에서 애플리케이션을 쉽게 실행할 수 있게 해주는 확장성이 뛰어난 고성능 컨테이너 관리 서비스입니다.

우리는 최근 배포를 ECS로 이전하기로 결정했습니다. Ben 삼촌이 말했듯이 — 큰 힘에는 큰 책임이 따른다 — 이 새로운 구현에 대한 모니터링 및 경고를 설정하는 것은 매우 흥미로웠으며 이 블로그 게시물은 우리가 구성한 하나의 특정 경보에 대해 자세히 설명합니다. 배포 중에 ECS 작업이 실패합니까?

실패/오류가 발생할 때 경고를 보내야 하는 Microsoft 팀 웹후크가 있습니다. 이 경고 덤프는 귀하의 경우 다른 응용 프로그램일 수 있습니다.

ECS 작업이 실패할 때마다 알림을 생성하기 위해 Amazon EventBridge 규칙을 활용했습니다. 이를 통해 무엇이 잘못되었는지 확인할 수 있습니다. 아래는 구현의 높은 수준의 블록 다이어그램입니다.



네, 저는 여러분의 눈이 무엇을 찾고 있는지 알고 있습니다. 바로 이벤트 규칙 패턴입니다. 다음은 우리가 사용한 패턴입니다.

{ "detail": { "group": ["service:<<name of your service>>"], "lastStatus": ["STOPPED"], "stoppedReason": [{ "anything-but": { "prefix": "Scaling activity initiated by (deployment" } }] }, "detail-type": ["ECS Task State Change"], "source": ["aws.ecs"] } 


요지: https://gist.github.com/akhil-ghatiki/1251a54da8eaaca3c20f5322f5106319.js

규칙에 모든 패턴을 사용할 수 있습니다. 위의 예에서는 값이 서비스 이름인 그룹 키를 기반으로 필터링합니다. 따라서 서비스 이름이 있는 모든 이벤트는 SNS로 전송됩니다. 다음은 규칙 패턴에 필요할 수 있는 다른 속성에 도움이 되는 샘플 이벤트입니다.

{ "version": "0", "id": "XXXXXXXXXXXXX", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "XXXXXXXXX", "time": "2022-10-10T10:06:29Z", "region": "XXXXXXXX", "resources": [ "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:task/XXXXXXXXXX/XXXXXX" ], "detail": { "attachments": [ { "id": "XXXXXXXXXXXXX", "type": "sdi", "status": "DELETED", "details": [] }, { "id": "XXXXXXXXXXXXX", "type": "eni", "status": "DELETED", "details": [ { "name": "subnetId", "value": "XXXXXXXX" }, { "name": "networkInterfaceId", "value": "XXXXXXXX" }, { "name": "macAddress", "value": "XXXXXXXX" }, { "name": "privateDnsName", "value": "XXXXXXXX" }, { "name": "privateIPv4Address", "value": "XXXXXXXX" } ] }, { "id": "XXXXXXXXXXXXX", "type": "elb", "status": "DELETED", "details": [] } ], "attributes": [ { "name": "ecs.cpu-architecture", "value": "XXXXXXXX" } ], "availabilityZone": "XXXXXXXXa", "clusterArn": "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:cluster/XXXXXXXXXX", "connectivity": "CONNECTED", "connectivityAt": "2022-10-10T10:05:38.02Z", "containers": [ { "containerArn": "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:container/XXXXXXXXXX/XXXXXX/XXXXXXXXX", "lastStatus": "STOPPED", "name": "XXXXXXX", "image": "XXXXXXXX.dkr.ecr.XXXXXXXX.amazonaws.com/XXXXXXXX/XXXXXXX:XXXXXX", "runtimeId": "XXXXXX-1979092248", "taskArn": "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:task/XXXXXXXXXX/XXXXXX", "networkInterfaces": [ { "attachmentId": "XXXXXXXXX", "privateIpv4Address": "XXXXXXX" } ], "cpu": "0" } ], "cpu": "512", "createdAt": "2022-10-10T10:05:34.301Z", "desiredStatus": "STOPPED", "enableExecuteCommand": false, "ephemeralStorage": { "sizeInGiB": 20 }, "executionStoppedAt": "2022-10-10T10:05:46.497Z", "group": "service:XXXXXXX", "launchType": "FARGATE", "lastStatus": "STOPPED", "memory": "1024", "overrides": { "containerOverrides": [ { "name": "XXXXXXX" } ] }, "platformVersion": "1.4.0", "startedBy": "ecs-svc/XXXXXX", "stoppingAt": "2022-10-10T10:05:56.53Z", "stoppedAt": "2022-10-10T10:06:29.152Z", "stoppedReason": "CannotPullContainerError: inspect image has been retried 1 time(s): failed to resolve ref \"XXXXXXXX.dkr.ecr.XXXXXXXX.amazonaws.com/XXXXXXXX/XXXXXXX:XXXXXX\": XXXXXXXX.dkr.ecr.XXXXXXXX.amazonaws.com/XXXXXXXX/XXXXXXX:XXXXXX: not found", "stopCode": "TaskFailedToStart", "taskArn": "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:task/XXXXXXXXXX/XXXXXX", "taskDefinitionArn": "arn:aws:ecs:XXXXXXXX:XXXXXXXXX:task-definition/XXXXXXX:XXX", "updatedAt": "2022-10-10T10:06:29.152Z", "version": 4 } } 


요지: https://gist.github.com/akhil-ghatiki/e2654a551d6989ed0cb652318357f20b.js

신스피드!!

좋은 웹페이지 즐겨찾기