AWS-ECS Task를 사용한 배치 처리

ECS Task Buick Process를 사용하는 경우가 있다고 생각합니다.
구성의 패러다임은 여러 가지지만 일단 필요한 AWS 리소스를 정리하고 감시 재시도를 실현하는 방법부터 생각해보고 싶다.
(람바다를 사용하면 재시도 설정이 있어 간단하지만, 처리 시간이 너무 길어 람바다를 사용할 수 없을 것 같다)

지정된 시간에 ECS Task 시작


EventBridgeTarget에서 ECS task 또는 Step Functions state machine를 지정하면 됩니다.Target의 호출 자체가 실패했을 때의 재시도는 Rule를 설정할 수 있지만 시작한 후의 실패는 Step Functions에서 대응해야 한다.
따라서 처음부터 지정된 형식Step Functions state machine으로 시작하는 것이 좋다.

ECS Task 가 실패하면 다시 시도하려고 합니다.


ECS Task 시작 재시도는 Step Function을 사용하여 수행할 수 있습니다.
매우 간단하여 ECS RunTask의 동작을 삽입하고 다시 시도하는 설정만 하면 된다.
시간 초과 설정도 있다.
ECS RunTask
Error handling


Definition
{
  "Comment": "A description of my state machine",
  "StartAt": "ECS RunTask",
  "States": {
    "ECS RunTask": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync",
      "Parameters": {
        "LaunchType": "FARGATE",
        "PlatformVersion": "LATEST",
        "Cluster": "arn:aws:ecs:ap-northeast-1:xxxxx:cluster/xxxxx",
        "TaskDefinition": "arn:aws:ecs:ap-northeast-1:xxxxx:task-definition/xxxxx",
        "PropagateTags": "TASK_DEFINITION",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "Subnets": [
              "subnet-xxxxx",
              "subnet-yyyyy",
              "subnet-zzzzz"
            ],
            "AssignPublicIp": "ENABLED",
            "SecurityGroups": [
              "sg-xxxxx"
            ]
          }
        }
      },
      "End": true,
      "Retry": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "BackoffRate": 1,
          "IntervalSeconds": 10,
          "MaxAttempts": 1
        }
      ]
    }
  }
}
여기에는 자동으로 생성되는 롤의 폴리시가 허가iam:PassRole 설정이 없기 때문에 사용하는 Task Definition에 따라 실패할 수 있습니다.
이에 따라 다음과 같은 폴리시가 추가됐다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "ecs-tasks.amazonaws.com"
                }
            }
        }
    ]
}
는 부차적이지만 단계 펀션에서 State machine을 미리 제작하면 콘솔 화면에서 1회Start execution를 클릭할 수 있다.
직접RunTask ECS Task를 원하는 경우 매번 네트워크 주변 등을 설정해야 하지만 그럴 시간이 없을 수 있다.(오류도 감소)

ECS Task 가 실패할 경우 알려 드리려고 합니다.


이것은 여러 가지 패턴이 있을 수 있다.
  • EventBridge에서 감지ECS Task State Change 및 알림
  • EventBridge에서 감지Step Functions Execution Status Change 및 알림
  • StopFunctionECS RunTaskCatch에서 통지
  • 1의 경우 재시도와 상관없이 RunTask의 처리에 실패한 경우 통지할 수 있다.2의 경우 State machine의 내용과 무관Execution의 처리 실패 시 통지할 수 있다.3의 경우 재시도 결과RunTask의 실행 실패를 통지할 수 있습니다.
    어느 것이 좋고 나쁨인지, 차라리 무엇을 우선시하고 싶은지, 선택하는 방식이 바뀐 것 같다.
    모든 모드를 동시에 적용할 수 있기 때문에 모두 적용하면 모두 알릴 수 있습니다.

    총결산


    ECS Task는 기본적으로 Stop Function을 통해 활용되는 형태로 만들면 다양한 편리함을 느낄 수 있습니다.
    스텝펀션은 문턱이 높다고 느끼지만 개요를 이해하면 별 어려움이 없을 것이다.
    그래서 스텝펀션을 적극적으로 활용하고 싶다.

    좋은 웹페이지 즐겨찾기