AWS Glue 작업 재시도에 실패할 경우 Lambda 함수를 사용하여 SNS 알림을 수신하려면 어떻게 해야 합니까?

4분 분량
0

AWS Lambda 함수를 사용하여 AWS Glue 작업 재시도에 실패할 때 Amazon Simple Notification Service(Amazon SNS) 알림을 수신하려고 합니다.

간략한 설명

수신 이벤트에서 특정 문자열을 확인하는 Lambda 함수를 생성할 수 있습니다. 이벤트의 문자열이 Lambda 함수의 문자열과 일치하면 함수는 Amazon SNS에 메시지를 게시합니다.

재시도 후 AWS Glue 작업이 실패할 때 Amazon SNS 알림을 수신하려면 Amazon SNS 주제 및 구독을 생성합니다. 그런 다음 Lambda 함수를 생성합니다. Amazon EventBridge를 사용하여 이메일 알림을 시작합니다.

해결 방법

전제 조건:

  • AWS Glue ETL(추출, 전환, 적재) 작업.
  • Amazon SNS 알림을 게시할 수 있는 권한을 포함하는 Lambda의 AWS Identity and Access Management(IAM) 역할.

Amazon SNS 주제 및 구독 생성

다음 단계를 완료합니다.

  1. Amazon SNS 콘솔을 엽니다.
  2. 주제를 선택하고, 주제 생성을 선택합니다.
  3. 유형에서 표준을 선택합니다.
  4. 이름에 주제 이름을 입력합니다.
  5. (선택 사항) 표시 이름에 주제의 표시 이름을 입력합니다.
  6. 주제 생성을 선택합니다.
  7. 주제 페이지에서 구독 생성을 선택하고 다음 단계를 완료합니다. 
    주제 ARN에서 주제를 선택합니다. 
    프로토콜에서 알림 방법(예: 이메일)을 선택합니다.
    엔드포인트에 Amazon SNS 알림을 받을 이메일 주소를 입력합니다.
  8. 구독 생성을 선택합니다.

AWS Lambda 함수 생성

다음 단계를 완료합니다.

  1. Lambda 콘솔을 엽니다.

  2. 함수 생성을 선택합니다.

  3. 함수 생성 페이지에서 다음 단계를 완료합니다.
    새로 작성을 선택합니다.
    **Function name(함수 이름)**에 함수의 이름을 입력합니다.
    런타임에서 사용 가능한 Python 버전을 선택합니다.
    기본 실행 역할 변경 드롭다운 목록을 확장합니다.
    실행 역할에서 기존 역할 사용을 선택합니다.
    기존 역할에서 Amazon SNS 알림을 전송할 권한이 있는 IAM 역할을 선택합니다.

  4. 함수 생성을 선택합니다.

  5. 코드 탭의 코드 소스 섹션에서 파일을 선택하고, 새 파일을 선택합니다.

    파일 이름을 지정하고, 다음 코드를 입력합니다.

    import json
    import logging
    import boto3
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    client = boto3.client('sns')
    
    SNS_TOPIC_ARN = "REPLACE_WITH_YOUR_SNS_TOPIC_ARN"
    
    def lambda_handler(event, context):
        logger.info(f"## INITIATED BY EVENT: \n{event['detail']}")
    
        glue_job_name = event['detail']['jobName']
        jobrun_id = event['detail']['jobRunId']
    
        if jobrun_id.endswith('_attempt_1'):
            logger.info(f'## GLUE JOB FAILED RETRY: {glue_job_name}')
            message = (
                f"A Glue job failed after retrying.\n"
                f"Job name: {glue_job_name}\n"
                f"JobRun ID: {jobrun_id}"
            )
            client.publish(
                TargetArn=SNS_TOPIC_ARN,
                Message=json.dumps({'default': json.dumps(message)}),
                Subject='AWS Glue Job Retry Failure Notification',
                MessageStructure='json'
            )

    참고: SNS_TOPIC_ARN을 Amazon SNS 주제의 ARN으로 바꾸십시오.

  6. 파일을 선택한 다음 저장을 선택합니다.

  7. 파일 이름에 파일 이름을 입력합니다.

  8. 배포를 선택합니다.

(선택 사항) 이벤트를 테스트하려면 다음 단계를 완료합니다.

  1. 테스트 탭을 선택합니다.

  2. 이벤트 이름에 이름을 입력합니다.

    이벤트의 JSON 본문에 다음 코드를 입력합니다.

    {    "version": "0",
        "id": "abcdef01-1234-5678-9abc-def012345678",
        "detail-type": "Glue Job State Change",
        "source": "aws.glue",
        "account": "123456789012",
        "time": "2017-09-07T06:02:03Z",
        "region": "us-west-2",
        "resources": [],
        "detail": {
            "jobName": "MyTestJob",
            "severity": "ERROR",
            "state": "FAILED",
            "jobRunId": "jr_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_attempt_1",
            "message": "JobName:MyTestJob and JobRunId:jr_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef failed to execute with exception Role arn:aws:iam::123456789012:role/Glue_Role should be given assume role permissions for Glue Service."
        }
    }

    참고: MyTestJob을 AWS Gle 작업 이름으로 바꾸십시오.

  3. 변경 사항 저장을 선택하고, 테스트를 선택합니다.

  4. 표시되는 실행 결과를 확인합니다.

  5. Amazon SNS 알림을 수신했는지 확인합니다.

Amazon EventBridge를 사용하여 이메일 알림 시작

다음 단계를 완료합니다.

  1. EventBridge 콘솔을 엽니다.

  2. 탐색 창에서 규칙를 선택한 다음 규칙 생성을 선택합니다.

  3. 규칙 생성 페이지에서 다음 단계를 완료합니다.
    이름에 규칙 이름을 입력합니다.
    (선택 사항) 설명에 규칙의 설명을 입력합니다.
    패턴 정의에서 이벤트 패턴을 선택합니다.
    이벤트 일치 패턴에서 사용자 지정 패턴을 선택합니다.
    이벤트 패턴에서 다음 패턴 또는 고유한 패턴을 입력합니다.

    {  
    "detail-type": [ "Glue Job State Change"],
      "source": ["aws.glue"],
      "detail": {
        "state": ["FAILED"]
      }
    }
  4. 저장을 선택합니다.

  5. 대상 선택 섹션에서 다음 단계를 완료합니다.
    대상에서 Lambda 함수를 선택합니다.
    함수에서 Lambda 함수를 선택합니다.

  6. 다음을 선택하고, 규칙 생성을 선택합니다.

AWS Glue 작업 실패 테스트

다음 단계를 완료합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 작업을 선택하고, 테스트하려는 AWS Glue 작업을 선택합니다.
  3. 작업 드롭다운 목록을 선택한 다음 작업 편집을 선택합니다.
  4. **보안 구성, 스크립트 라이브러리 및 작업 파라미터(선택 사항)**를 확장합니다.
  5. 보안 구성에서 재시도 횟수1을 입력합니다.
  6. 저장을 선택합니다.
  7. 작업 페이지에서 AWS Glue 작업을 선택합니다.
  8. 작업 드롭다운 목록을 선택하고, 스크립트 편집을 선택합니다.
  9. 작업이 실패하도록 코드 요소를 변경합니다. 예를 들어, 테이블 이름에 "_BROKEN"을 추가합니다.
  10. 저장을 선택합니다.
  11. 작업 페이지에서 AWS Glue 작업을 선택합니다.
  12. 작업 드롭다운 목록을 선택하고, 작업 실행을 선택합니다.

AWS Glue 작업이 두 번째로 실패하면 Amazon SNS 알림을 수신하는지 확인합니다. 구성된 엔드포인트에서 알림을 확인합니다. 그런 다음 코드에서 작업이 실패하도록 변경한 요소를 제거합니다.

관련 정보

Amazon EventBridge의 이벤트

Amazon SNS 알림 설정

Amazon EventBridge 문제 해결

AWS 공식
AWS 공식업데이트됨 2달 전
댓글 없음