Apache Airflow AWS Lambda Executor로 워크플로우 실행하기(2)

Apache Airflow AWS Lambda Executor로 워크플로우 실행하기

지난 1편에서 AWS Lambda Executor와 ECS Executor의 특징을 비교하며 우리 환경에 맞는 최적의 실행 엔진을 고민해 보았습니다. 각 익제큐터의 장단점을 파악하셨다면, 이제는 이론을 넘어 실제 구축에 들어갈 차례입니다.

오늘 포스팅에서는 2편 시리즈의 핵심인 AWS Lambda Executor의 구체적인 구현 방법을 다루어 보려고 합니다.

사실 Airflow에서 Lambda를 익제큐터로 사용하는 것은 단순히 설정 파일 한 줄을 고치는 것으로 끝나지 않습니다. Airflow 스케줄러가 보낸 신호를 Lambda가 이해하고 작업을 수행할 수 있도록 전용 Lambda 핸들러(Handler)를 작성해야 하고, 두 서비스가 안전하게 통신할 수 있도록 IAM 권한과 네트워크(VPC) 환경을 세밀하게 조율해야 합니다.

많은 분이 이 과정에서 발생하는 권한 문제나 라이브러리 종속성 관리 때문에 어려움을 겪으시곤 하는데요. 이번 글에서는 제가 직접 삽질하며 얻은 노하우를 바탕으로, 인프라 설정부터 코드 구현까지 막힘없이 따라오실 수 있도록 단계별 가이드를 정리했습니다.

 

 

1. 에어플로우 설정 및 이미지 빌드

airflow.cfg 설정 파일 또는 환경 변수를 통해 AWS Lambda Executor 관련 설정을 명시하여 설정값을 적용시킵니다. 아래는 몇 가지 설정 옵션입니다(빨간색은 필수 옵션).

AIRFLOW__AWS_LAMBDA_EXECUTOR__FUNCTION_NAME
– 실행기가 호출할 AWS Lambda 함수 이름 또는 ARN
AIRFLOW__AWS_LAMBDA_EXECUTOR__QUEUE_URL
– Task 결과를 전송할 SQS URL
AIRFLOW__AWS_LAMBDA_EXECUTOR__DEAD_LETTER_QUEUE_URL
– Task 실패 처리를 위한 데드레터 큐 URL
 
AIRFLOW__AWS_LAMBDA_EXECUTOR__REGION_NAME
– AWS Lambda, AWS SQS의 리전명
AIRFLOW__AWS_LAMBDA_EXECUTOR__CONN_ID
– Lambda Executor가 Lambda 함수 호출 또는 SQS 메시지 송수신에 필요한 권한을 가진 에어플로우 Conn ID
AIRFLOW__AWS_LAMBDA_EXECUTOR__CHECK_HEALTH_ON_STARTUP
– Lambda Executor가 시작할 때 사용하는 AWS 서비스 연결 상태를 테스트할지 여부
AIRFLOW__AWS_LAMBDA_EXECUTOR__FUNCTION_QUALIFIER
– FUNCTION_NAME에 등록된 Lambda 함수의 버전 또는 별칭
 
Dockerfile 예제에서 Lambda Executor를 통해 실행될 워커 이미지를 빌드할 Dockerfile을 확인할 수 있습니다.
 
Airflow Hybrid Executor를 통해 여러 Executor를 사용할 경우
AIRFLOW__CORE__EXECUTOR 설정에 AwsLambdaExecutor를 추가합니다.
 
 
2. AWS SQS, Lambda 함수 생성
 
SQS 대기열
1에서 필요한 큐와 데드레터 큐 생성을 위해 AWS SQS를 생성합니다.
AWS 관리 콘솔에서 SQS로 이동하여 표준 대기열을 두 개 생성합니다.(기본 큐와 데드레터 큐)
 
Lambda 함수
1에서 빌드한 이미지를 기반으로 Docker 컨테이너 기반 Lambda 함수를 생성합니다.
생성 후 구성에서 메모리, 임시 스토리지, 제한 시간을 워크로드에 맞게 조정합니다.
 
실행 역할에 함수가 SQS에 접근할 수 있도록 IAM Role을 추가합니다.
 
 
 
3. DAG Task 작성 및 실행
 

@task(
    executor=”AwsLambdaExecutor”,
    on_failure_callback=None,
    trigger_rule=TriggerRule.ALL_DONE,
)
def lambda_task(**kwargs):

     dag_run: DagRun = kwargs.get(“dag_run”)

     return dag_run.id

 
task의 파라미터로 executor를 추가하여 AwsLambdaExecutor 실행기에 의해 Task가 생성될 것임을 명시합니다.
 

Airflow의 강력한 스케줄링 능력과 AWS Lambda의 유연한 확장성을 결합한 ‘서버리스 오케스트레이션’ 환경을 구축해보았습니다.

처음에는 airflow.cfg 설정부터 IAM 권한 설정까지 과정이 다소 복잡하게 느껴질 수 있지만, 한 번 세팅해 두면 워커 노드의 리소스를 관리하거나 비용 낭비를 걱정할 필요가 없는 매우 쾌적한 데이터 파이프라인을 구축할 수 있을 것입니다.

하지만 모든 기술이 그렇듯, Lambda Executor 역시 만능은 아닙니다. 실제 운영 환경에서는 Lambda의 15분 실행 제한이나 동시성 한도(Concurrency Limit)를 지속적으로 모니터링하며 최적의 값을 찾아가는 과정이 중요합니다. 

Apache Airflow AWS Lambda Executor로 워크플로우 실행하기(1)

Popular & Related Posts

Apache Airflow 2.10.0 새로운 기능 Hybrid Executor 블로그 배너 이미지

Tech

2025년 3월

Apache Airflow 2.10.0 새로운 기능 Hybrid Executor

Apache Airflow 2.10.0 버전에 새로 생긴 Hybrid Executor 기능 살펴보기
Airflow Dynamic Task Mapping으로 동적 태스크 실행하기 배너 이미지

Tech

2025년 7월

Airflow의 Dynamic Task Mapping으로 동적 태스크 실행하기

Airflow에서 특정 태스크 개수가 동적으로 실행되어야 할때, Airflow Dynamic Task Mapping을 사용할 수 있습니다.
AWS Athena를 사용하여 분석 플랫폼 만들기 배너 이미지

Tech

2025년 8월

AWS Athena를 사용하여 분석 플랫폼 만들기

AWS Athena를 사용하여 SQL을 통해 간단하게 데이터를 분석할 수 있는 플랫폼을 만들기