크롤러의 실행이 완료될 때 Lambda 함수를 사용하여 AWS Glue 작업을 자동으로 시작하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 3월 13일
크롤러 실행이 완료되면 AWS Lambda 함수를 사용하여 AWS Glue 작업을 자동으로 시작하려고 합니다. 어떻게 해야 합니까?
간략한 설명
크롤러 실행이 완료될 때 작업을 시작하려면 AWS Lambda 함수와 Amazon CloudWatch Events 규칙을 생성합니다. 이 메서드를 수정하여 다른 AWS Glue 함수를 자동화할 수 있습니다.
참고: AWS Glue 워크플로를 사용하여 크롤러 실행이 완료되면 작업을 자동으로 시작할 수도 있습니다. 이 방법을 사용하려면 AWS Glue 콘솔의 워크플로 페이지에서 크롤러를 시작해야 합니다. 자세한 내용은 크롤러 실행이 완료될 때 AWS Glue 워크플로를 사용하여 작업을 자동으로 시작하려면 어떻게 해야 합니까?를 참조하십시오.
해결 방법
다음 단계를 수행하기 전에 다음이 있는지 확인해야 합니다.
- AWS Glue ETL(추출, 변환 및 로드)작업
- AWS Glue 크롤러
- Lambda에 대한 AWS Identity and Access Management(IAM) 역할(AWS Glue 작업을 실행할 권한이 부여되어 있어야 함) 예를 들어 AWSGlueServiceRole 정책이 연결되어 있는 Lambda에 대한 service-linked 역할을 설정합니다.
Lambda 함수 생성
1. Lambda 콘솔을 엽니다.
2. [Create function]을 선택합니다.
참고: Lambda 함수가 없는 경우 [Get started] 페이지가 나타납니다. [Create a function]을 선택한 후 다음 단계를 계속 진행합니다.
3. [Author from scratch]가 선택되어 있는지 확인한 후 다음 옵션을 구성합니다.
[Name(이름)]에 함수 이름을 입력합니다.
[Runtime(런타임)]에서 Python 옵션 중 하나를 선택합니다.
[Role(역할)]에서 [Choose an existing role(기존 역할 선택)]을 선택합니다.
[Existing role]에서 AWS Glue 작업을 실행할 권한이 있는 IAM 역할을 선택합니다.
4. [Create function]을 선택합니다.
5. [Function code(함수 코드)] 섹션에 다음과 비슷한 코드를 붙여 넣습니다. MyTestJob은 AWS Glue ETL 작업의 이름으로 바꾸어야 합니다.
# Set up logging
import json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')
# Variables for the job:
glueJobName = "MyTestJob"
# Define Lambda function
def lambda_handler(event, context):
logger.info('## TRIGGERED BY EVENT: ')
logger.info(event['detail'])
response = client.start_job_run(JobName = glueJobName)
logger.info('## STARTED GLUE JOB: ' + glueJobName)
logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
return response
6. 페이지 오른쪽 상단에서 [Save]를 선택한 다음 [Test]를 선택합니다.
7. AWS Glue 콘솔을 열고 작업이 시작되었는지 확인합니다.
CloudWatch Events 규칙 생성
1. CloudWatch 콘솔을 엽니다.
2. 탐색 창에서 [Rules]를 선택하고 [Create rule]을 선택합니다.
3. [Event Source] 섹션에서 [Event Pattern]을 선택한 다음 [Build event pattern to match events by service]라는 요소를 선택합니다. 표시되는 드롭다운 목록에서 [Custom event pattern]을 선택합니다.
4. [Build custom event pattern] 상자에서 기존 코드를 다음 코드로 바꿉니다. MyTestCrawl은 AWS Glue 크롤러의 이름으로 바꾸어야 합니다.
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
5. 페이지 오른쪽에 있는 [Targets] 섹션에서 [Add target]을 선택합니다.
6. 드롭다운 목록에서 [Lambda function]을 선택합니다(선택되어 있지 않은 경우).
7. [Function] 드롭다운 목록에서 해당 Lambda 함수의 이름을 선택합니다.
8. 페이지 오른쪽 하단에서 [Configure details]를 선택합니다.
9. CloudWatch Events 규칙의 [Name]과 [Description]을 입력한 다음 [Create rule]을 선택합니다.
Lambda 함수와 CloudWatch Events 규칙을 테스트하려면 AWS Glue 크롤러를 실행합니다. 그런 다음, AWS Glue ETL 작업의 [History] 탭을 확인합니다. [Run status(실행 상태)]가 [Starting(시작 중)] 또는 [Running(실행 중)]으로 표시되어야 합니다.
참고: CloudWatch Events는 최선의 노력으로 생성됩니다. 드문 경우지만 이벤트가 시퀀스를 벗어나거나 누락되어 Lambda 함수가 실행되지 않을 수 있습니다.