Amazon EventBridge를 사용하여 EMR Serverless 자동화 - Amazon EMR

Amazon EventBridge를 사용하여 EMR Serverless 자동화

Amazon EventBridge를 사용하여 AWS 서비스를 자동화하고 애플리케이션 가용성 문제나 리소스 변경 같은 시스템 이벤트에 자동으로 응답합니다. EventBridge는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 원하는 이벤트만 표시하도록 간단한 규칙을 작성한 후 규칙과 일치하는 이벤트 발생 시 실행할 자동화 작업을 지정할 수 있습니다. EventBridge를 사용하면 자동으로 다음을 수행할 수 있습니다.

  • AWS Lambda 함수 호출

  • Amazon Kinesis Data Streams로 이벤트 릴레이

  • AWS Step Functions 상태 머신 활성화

  • Amazon SNS 주제 또는 Amazon SQS 대기열 알림

예를 들어 EMR Serverless에서 EventBridge를 사용하는 경우 ETL 작업이 성공하면 AWS Lambda 함수를 활성화하거나 ETL 작업이 실패하면 Amazon SNS 주제를 알릴 수 있습니다.

EMR Serverless는 네 가지 종류의 이벤트를 생성합니다.

  • 애플리케이션 상태 변경 이벤트 - 애플리케이션의 모든 상태 변경을 내보내는 이벤트. 애플리케이션 상태에 대한 자세한 내용은 애플리케이션 상태 섹션을 참조하세요.

  • 작업 실행 상태 변경 이벤트 - 작업 실행의 모든 상태 변경을 내보내는 이벤트. 자세한 정보는 작업 실행 상태 섹션을 참조하세요.

  • 작업 실행 재시도 이벤트 - Amazon EMR Serverless 릴리스 7.1.0 이상에서 작업 실행의 모든 재시도를 내보내는 이벤트.

  • 작업 리소스 사용률 업데이트 이벤트 - 약 30분 간격으로 작업 실행에 대한 리소스 사용률 업데이트를 내보내는 이벤트.

샘플 EMR Serverless EventBridge 이벤트

EMR Serverless에서 보고하는 이벤트에는 다음 예제와 같이 sourceaws.emr-serverless의 값이 할당됩니다.

애플리케이션 상태 변경 이벤트

다음 예제 이벤트에서는 CREATING 상태의 애플리케이션을 보여줍니다.

{
    "version": "0",
    "id": "9fd3cf79-1ff1-b633-4dd9-34508dc1e660",
    "detail-type": "EMR Serverless Application State Change",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:16:31Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "applicationId": "00f1cbsc6anuij25",
        "applicationName": "3965ad00-8fba-4932-a6c8-ded32786fd42",
        "arn": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/00f1cbsc6anuij25",
        "releaseLabel": "emr-6.6.0",
        "state": "CREATING",
        "type": "HIVE",
        "createdAt": "2022-05-31T21:16:31.547953Z",
        "updatedAt": "2022-05-31T21:16:31.547970Z",
        "autoStopConfig": {
            "enabled": true,
            "idleTimeout": 15
        },
        "autoStartConfig": {
            "enabled": true
        }
    }
}

작업 실행 상태 변경 이벤트

다음 예제 이벤트에서는 SCHEDULED 상태에서 RUNNING 상태로 전환되는 작업 실행을 보여줍니다.

{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Run State Change",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "jobRunId": "00f1cbn5g4bb0c01",
        "applicationId": "00f1982r1uukb925",
        "arn": "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01",
        "releaseLabel": "emr-6.6.0",
        "state": "RUNNING",
        "previousState": "SCHEDULED",
        "createdBy": "arn:aws:sts::123456789012:assumed-role/TestRole-402dcef3ad14993c15d28263f64381e4cda34775/6622b6233b6d42f59c25dd2637346242",
        "updatedAt": "2022-05-31T21:07:42.299487Z",
        "createdAt": "2022-05-31T21:07:25.325900Z"
    }
}

작업 실행 재시도 이벤트

다음은 작업 실행 재시도 레코드의 예제입니다.

{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Run Retry",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "jobRunId": "00f1cbn5g4bb0c01",
        "applicationId": "00f1982r1uukb925",
        "arn": "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01",
        "releaseLabel": "emr-6.6.0",
        "createdBy": "arn:aws:sts::123456789012:assumed-role/TestRole-402dcef3ad14993c15d28263f64381e4cda34775/6622b6233b6d42f59c25dd2637346242",
        "updatedAt": "2022-05-31T21:07:42.299487Z",
        "createdAt": "2022-05-31T21:07:25.325900Z",
        //Attempt Details
        "previousAttempt": 1,
        "previousAttemptState": "FAILED",
        "previousAttemptCreatedAt": "2022-05-31T21:07:25.325900Z",
        "previousAttemptEndedAt": "2022-05-31T21:07:30.325900Z",
        "newAttempt": 2,
        "newAttemptCreatedAt": "2022-05-31T21:07:30.325900Z"
    }
}

작업 리소스 사용률 업데이트

다음 예제 이벤트에서는 실행 후 터미널 상태로 전환되는 작업에 대한 최종 리소스 사용률 업데이트를 보여줍니다.

{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Resource Utilization Update",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01"
    ],
    "detail": {
        "applicationId": "00f1982r1uukb925",
        "jobRunId": "00f1cbn5g4bb0c01",
        "attempt": 1,
        "mode": "BATCH",
        "createdAt": "2022-05-31T21:07:25.325900Z",
        "startedAt": "2022-05-31T21:07:26.123Z",
        "calculatedFrom": "2022-05-31T21:07:42.299487Z",
        "calculatedTo": "2022-05-31T21:07:30.325900Z",
        "resourceUtilizationFinal": true,
        "resourceUtilizationForInterval": {
            "vCPUHour": 0.023,
            "memoryGBHour": 0.114,
            "storageGBHour": 0.228
        },
        "billedResourceUtilizationForInterval": {
            "vCPUHour": 0.067,
            "memoryGBHour": 0.333,
            "storageGBHour": 0
        },
        "totalResourceUtilization": {
            "vCPUHour": 0.023,
            "memoryGBHour": 0.114,
            "storageGBHour": 0.228
        },
        "totalBilledResourceUtilization": {
            "vCPUHour": 0.067,
            "memoryGBHour": 0.333,
            "storageGBHour": 0
        }
    }
}

작업이 실행 중 상태로 전환된 경우에만 startedAt 필드가 이벤트 내에 표시됩니다.