로컬에서 AWS용 ETL 파이프라인 개발 및 테스트

소스 노드 : 997665

로컬에서 AWS용 ETL 파이프라인 개발 및 테스트

일반적으로 ETL 파이프라인 개발 및 테스트는 설정에 시간이 많이 걸리고 유지 관리가 필요한 실제 환경/클러스터에서 수행됩니다. 이 문서는 Docker 및 LocalStack을 사용하여 로컬에서 ETL 파이프라인을 개발하고 테스트하는 데 중점을 둡니다. 이 솔루션은 클라우드에서 서비스를 설정하지 않고도 로컬 환경에서 테스트할 수 있는 유연성을 제공합니다.


By 수바시 스리니바사차르, Epsilon의 소프트웨어 엔지니어 기술 책임자

개요

 
 
AWS는 엔지니어, 데이터 과학자가 인프라 설정에 대한 걱정 없이 솔루션 구축 및 문제 해결에 집중할 수 있도록 돕는 데 중추적인 역할을 합니다. 서버리스 및 종량제 방식의 가격 책정 방식을 통해 AWS는 즉시 서비스를 쉽게 생성할 수 있도록 지원합니다.

AWS Glue는 데이터 엔지니어가 서버리스 ETL 파이프라인을 구축하는 데 널리 사용됩니다. PySpark는 개발에 사용되는 일반적인 기술 스택 중 하나입니다. 그러나 서비스 가용성에도 불구하고 해결해야 할 몇 가지 과제가 있습니다.

ETL 스크립트(PySpark)이든 다른 서비스이든 AWS 환경에서 코드를 디버깅하는 것은 어려운 일입니다.

  • 비용 요소를 통제하려면 AWS 서비스 사용을 지속적으로 모니터링하는 것이 중요합니다.
  • AWS는 모든 Spark 라이브러리가 설치된 Dev Endpoint를 제공하지만 가격을 고려하면 대규모 개발 팀에서 사용하기에는 적합하지 않습니다.
  • AWS 서비스의 접근성은 다음과 같습니다. 제한된 특정 사용자의 경우

해법

 
 
AWS용 솔루션은 접근성이나 비용 요소에 대한 걱정 없이 로컬 환경에서 개발하고 테스트할 수 있습니다. 이 기사를 통해 우리는 두 가지 문제를 해결하고 있습니다.

  1. AWS 개발 엔드포인트를 사용하지 않고 PySpark 코드를 로컬로 디버깅합니다.
  2. AWS 서비스와 로컬로 상호 작용

Docker 이미지를 사용하면 두 가지 문제를 모두 해결할 수 있습니다.

  1. 첫째, AWS 환경에서 서버가 필요하지 않으며 대신 머신에서 실행되는 도커 이미지가 코드를 실행하는 환경 역할을 합니다.

AWS는 PySpark 스크립트에 사용할 수 있는 샌드박스 이미지를 제공합니다. Docker 이미지를 설정하여 PySpark 코드를 실행할 수 있습니다. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. 코드를 실행하는 데 Docker 머신을 사용할 수 있으므로 ETL 파이프라인을 구축하는 동안 파일을 저장(읽기/쓰기)하려면 S3와 같은 서비스가 필요합니다.

S3와의 상호 작용은 다음으로 대체될 수 있습니다. 로컬스택 클라우드 애플리케이션 개발을 위한 사용하기 쉬운 테스트/모의 프레임워크를 제공합니다. 실제 AWS 클라우드 환경과 동일한 기능과 API를 제공하는 로컬 시스템에서 테스트 환경을 가동합니다.

헤더

지금까지 기사에서는 ETL 파이프라인 구축과 사용 가능한 서비스 사용에 대해 다뤘습니다. 그러나 SNS, SQS, CloudFormation, Lambda 함수 등과 같은 AWS 서비스를 사용하는 동안 유사한 접근 방식을 모든 사용 사례에 적용할 수 있습니다.

Approach

  • Docker 컨테이너를 원격 인터프리터로 사용
  • 컨테이너에서 PySpark 세션 실행
  • LocalStack을 사용하여 로컬로 S3 서비스 가동
  • PySpark 코드를 사용하여 LocalStack에서 실행되는 S3 버킷에서 읽고 쓰기

사전 요구 사항

 
컴퓨터에 다음 도구를 설치해야 합니다.

  • 도커
  • PyCharm Professional/VisualStudio 코드

설정

  • Docker 이미지 다운로드 또는 가져오기(docker pull )
    • libs:glue_libs_1.0.0_image_01
    • 로컬스택/로컬스택
  • Docker 컨테이너는 PyCharm Professional 버전에서 원격 인터프리터로 사용할 수 있습니다.

실시

 
Docker를 설치하고 이미지를 로컬 시스템으로 가져온 후 컨테이너를 시작하기 위한 구성으로 PyCharm 설정을 시작하세요.

  • docker-compose.yml 파일 만들기

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-docker-compose-yml

  • DockerFile 만들기

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile

  • 설치할 패키지와 함께 요구 사항 파일 사용

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-requirements-txt
 

  • Python 원격 인터프리터 설정
    • docker-compose 파일을 사용하여 Python 인터프리터를 설정합니다.
    • PyCharm Docker Compose 설정에서 'glue-service'를 선택하세요.
    • Docker-compose 파일은 두 이미지 모두에 대한 컨테이너를 생성하고 실행합니다.
    • LocalStack은 기본적으로 포트 4566에서 실행되며 S3 서비스가 활성화됩니다.

암호

  • 가져올 필수 라이브러리

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports

  • LocalStack에서 실행되는 S3 버킷에 파일 추가

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 도커 컨테이너 내부에서 로컬로 실행되는 S3입니다.

  • S3에서 읽도록 PySpark 세션 설정

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-create_pyspark_session

  • PySpark 세션은 제공된 모의 자격 증명을 통해 S3에 연결됩니다.
  • 생성된 PySpark 세션을 사용하여 S3에서 직접 읽을 수 있습니다.

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3

  • 마지막으로 원하는 형식으로 S3에 쓸 수 있습니다.

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3

위에서 언급한 단계를 수행하면 테스트용 모의 데이터가 포함된 더미 csv 파일을 만들 수 있습니다.

  • S3에 파일 추가(LocalStack에서 실행 중)
  • S3에서 읽기
  • 쪽모이 세공으로 S3에 다시 쓰기

.py 파일을 실행하여 실행할 수 있어야 하며 LocalStack API를 사용하여 로컬로 실행되는 S3 버킷에서 읽을 수 있는 PySpark 세션이 생성됩니다.

또한 LocalStack이 실행 중인지 확인할 수도 있습니다. http://localhost:4566/health

LocalStack은 AWS CLI를 사용하여 명령을 실행하는 기능도 제공합니다.

결론

 
 
Docker 및 Localstack을 사용하면 Pyspark 코드를 실행하고, 컨테이너에서 디버그하고, 로컬에서 실행되는 S3에 쓰는 빠르고 쉬운 방법을 제공합니다. AWS 서비스에 연결할 필요 없이 이 모든 작업을 수행할 수 있습니다.

 
참조 :

 
바이오 : 수바시 스리니바사차르 Epsilon Digital Experience 팀의 수석 소프트웨어 엔지니어로, 데이터 과학 문제, 특히 개인화를 해결하고 고객의 ROI를 높이는 데 도움이 되는 엔지니어링 솔루션을 구축하고 있습니다.

관련 :

출처: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

타임 스탬프 :

더보기 너 겟츠