Amazon EventBridge 이벤트로 AWS Glue 워크플로 시작 - AWS Glue

Amazon EventBridge 이벤트로 AWS Glue 워크플로 시작

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

EventBridge 지원으로 AWS Glue는 이벤트 중심 아키텍처에서 이벤트 생산자 및 소비자 역할을 할 수 있습니다. 워크플로의 경우 AWS Glue는 모든 유형의 EventBridge 이벤트를 소비자로 지원합니다. 가장 일반적인 사용 사례는 Amazon S3 버킷에 새 객체 도착입니다. 데이터가 불규칙하거나 정의되지 않은 간격으로 도착하는 경우 이 데이터를 도착에 최대한 가깝게 처리할 수 있습니다.

참고

AWS Glue는 EventBridge 메시지의 배달을 보장하지 않습니다. AWS Glue는 EventBridge가 중복 메시지를 전달하는 경우 중복 제거를 수행하지 않습니다. 사용 사례에 따라 멱등성을 관리해야 합니다.

원하지 않는 이벤트가 전송되지 않도록 EventBridge 규칙을 올바르게 구성해야 합니다.

시작하기 전 준비 사항

Amazon S3 데이터 이벤트로 워크플로를 시작하려면 관심 있는 S3 버킷에 대한 이벤트가 AWS CloudTrail 및 EventBridge에 기록되었는지 확인해야 합니다. 그러려면 CloudTrail 추적을 생성해야 합니다. 자세한 내용은 AWS 계정에 대한 추적 생성을 참조하세요.

EventBridge 이벤트로 워크플로를 시작하려면
참고

다음 명령에서 다음과 같이 바꿉니다.

  • <workflow-name>을 워크플로에 할당할 이름으로

  • <trigger-name>을 트리거에 할당할 이름으로

  • <bucket-name>을 Amazon S3 버킷의 이름으로

  • <account-id>를 유효한 AWS 계정 ID로

  • <region>을 리전 이름(예: us-east-1)으로

  • <rule-name>을 EventBridge 규칙에 할당할 이름으로

  1. EventBridge 규칙 및 대상을 생성하고 볼 수 있는 AWS Identity and Access Management(IAM) 권한이 있는지 확인합니다. 다음은 연결할 수 있는 샘플 정책입니다. 작업 및 리소스에 대한 제한을 설정하기 위해 범위를 좁힐 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:DisableRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets", "events:EnableRule", "events:List*", "events:Describe*" ], "Resource": "*" } ] }
  2. AWS Glue에 이벤트를 전달할 때 EventBridge 서비스가 수임할 수 있는 IAM 역할을 생성합니다.

    1. IAM 콘솔의 역할 생성 페이지에서 AWS 서비스를 선택합니다. 그런 다음 [CloudWatch Events] 서비스를 선택합니다.

    2. [역할 생성(Create role)] 마법사를 완료합니다. 마법사가 자동으로 CloudWatchEventsBuiltInTargetExecutionAccessCloudWatchEventsInvocationAccess 정책을 연결합니다.

    3. 다음 인라인 정책을 역할에 연결합니다. 이 정책은 EventBridge 서비스가 이벤트를 AWS Glue로 보낼 수 있도록 합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:notifyEvent" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>" ] } ] }
  3. 다음 명령을 입력하여 워크플로를 생성합니다.

    선택적 추가 명령줄 파라미터에 대한 자세한 내용은 AWS CLI Command Referencecreate-workflow를 참조하세요.

    aws glue create-workflow --name <workflow-name>
  4. 다음 명령을 입력하여 워크플로에 대한 EventBridge 이벤트 트리거를 생성합니다. 워크플로의 시작 트리거가 됩니다. <actions>를 수행할 작업(시작할 작업 및 크롤러)으로 바꿉니다.

    actions 인수를 코딩하는 방법에 대한 자세한 내용은 AWS CLI Command Referencecreate-trigger를 참조하세요.

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --actions <actions>

    단일 EventBridge 이벤트 대신 이벤트 일괄 처리에 의해 워크플로가 트리거되도록 하려면 대신 다음 명령을 입력합니다.

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds> --actions <actions>

    event-batching-condition 인수의 경우 BatchSize는 필수이고 BatchWindow는 선택 사항입니다. BatchWindow를 생략하면 기간의 기본값은 최대 기간 크기인 900초입니다.

    다음 예제에서는 3개의 EventBridge 이벤트가 도착한 후 또는 첫 번째 이벤트가 도착하고 5분 후 중 먼저 해당되는 시점에 eventtest 워크플로를 시작하는 트리거를 생성합니다.

    aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
  5. Amazon EventBridge에서 규칙을 생성합니다.

    1. 원하는 텍스트 편집기에서 규칙 세부 정보에 대한 JSON 객체를 생성합니다.

      다음 예에서는 Amazon S3를 이벤트 소스로, PutObject를 이벤트 이름으로, 버킷 이름을 요청 파라미터로 지정합니다. 이 규칙은 새 객체가 버킷에 도착하면 워크플로를 시작합니다.

      { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject" ], "requestParameters": { "bucketName": [ "<bucket-name>" ] } } }

      버킷 내의 폴더에 새 객체가 도착할 때 워크플로를 시작하려면 requestParameters를 다음 코드로 대체합니다.

      "requestParameters": { "bucketName": [ "<bucket-name>" ] "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}] }
    2. 선호하는 도구를 사용하여 규칙 JSON 객체를 이스케이프 처리된 문자열로 변환합니다.

      {\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}
    3. 다음 명령을 실행하여 후속 put-rule 명령에 대한 입력 파라미터를 지정하기 위해 편집할 수 있는 JSON 파라미터 템플릿을 생성합니다. 출력을 파일에 저장합니다. 이 예에서 파일 이름은 ruleCommand입니다.

      aws events put-rule --name <rule-name> --generate-cli-skeleton >ruleCommand

      --generate-cli-skeleton 파라미터에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서JSON 또는 YAML 입력 파일에서 AWS CLI 스켈레톤 및 입력 파라미터 생성을 참조하세요.

      출력 파일은 다음과 같습니다.

      { "Name": "", "ScheduleExpression": "", "EventPattern": "", "State": "ENABLED", "Description": "", "RoleArn": "", "Tags": [ { "Key": "", "Value": "" } ], "EventBusName": "" }
    4. 파일을 편집하여 선택적으로 파라미터를 제거하고 최소한 Name, EventPatternState 파라미터를 지정합니다. EventPattern 파라미터에 대해 이전 단계에서 생성한 규칙 세부 정보에 대한 이스케이프 처리된 문자열을 제공합니다.

      { "Name": "<rule-name>", "EventPattern": "{\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}", "State": "DISABLED", "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket" }
      참고

      워크플로 구축을 마칠 때까지 규칙을 사용 중지 상태로 두는 것이 가장 좋습니다.

    5. 파일 ruleCommand에서 입력 파라미터를 읽는 다음 put-rule 명령을 입력합니다.

      aws events put-rule --name <rule-name> --cli-input-json file://ruleCommand

      다음 출력은 성공을 나타냅니다.

      {
          "RuleArn": "<rule-arn>"
      }
      
  6. 다음 명령을 입력하여 대상에 규칙을 연결합니다. 대상은 AWS Glue의 워크플로입니다. <role-name>을 이 절차의 시작 부분에서 생성한 역할로 바꿉니다.

    aws events put-targets --rule <rule-name> --targets "Id"="1","Arn"="arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>","RoleArn"="arn:aws:iam::<account-id>:role/<role-name>" --region <region>

    다음 출력은 성공을 나타냅니다.

    {
        "FailedEntryCount": 0,
        "FailedEntries": []
    }
  7. 다음 명령을 입력하여 규칙과 대상이 성공적으로 연결되었는지 확인합니다.

    aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>

    다음 출력은 성공을 나타냅니다. 여기서 <rule-name>은 생성한 규칙의 이름입니다.

    {
        "RuleNames": [
            "<rule-name>"
        ]
    }
    
  8. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  9. 워크플로를 선택하고 시작 트리거와 해당 작업(시작되는 작업 또는 크롤러) 이 워크플로 그래프에 나타나는지 확인합니다. 그리고 3단계: 트리거 추가의 절차로 진행합니다. 또는 AWS Glue API나 AWS Command Line Interface를 사용하여 워크플로에 구성 요소를 더 추가합니다.

  10. 워크플로가 완전히 지정되면 규칙을 사용합니다.

    aws events enable-rule --name <rule-name>

    이제 EventBridge 이벤트 또는 이벤트 배치로 워크플로를 시작할 준비가 되었습니다.