AWS Glue를 사용하면 AWS Glue ETL과 함께 사용할 추가 Python 모듈 및 라이브러리를 설치할 수 있습니다.
주제
requirements.txt를 사용하여 AWS Glue 5.0에 추가 Python 라이브러리 설치
AWS Glue 5.0에서는 Python 라이브러리 종속성을 관리하기 위한 defacto-standard requirements.txt
를 제공할 수 있습니다. 이렇게 하려면 다음 두 가지 작업 파라미터를 제공합니다.
키:
--python-modules-installer-option
값:
-r
키:
--additional-python-modules
값:
s3://path_to_requirements.txt
AWS Glue 5.0 노드는 처음에 requirements.txt
에 지정된 python 라이브러리를 로드합니다. 다음은 샘플 requirements.txt입니다.
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
pip를 사용하여 AWS Glue 2.0 이상에 추가 Python 모듈 설치
AWS Glue는 Python 패키지 설치 프로그램(pip3)을 사용하여 AWS Glue ETL에서 사용할 추가 모듈을 설치합니다. --additional-python-modules
파라미터를 쉼표로 구분된 Python 모듈 목록과 함께 사용하여 새 모듈을 추가하거나 기존 모듈의 버전을 변경할 수 있습니다. Amazon S3에 배포를 업로드하여 라이브러리의 사용자 지정 배포를 설치한 다음, 모듈 목록에 Amazon S3 객체의 경로를 포함시킬 수 있습니다.
--python-modules-installer-option
파라미터를 사용하여 pip3에 추가 옵션을 전달할 수 있습니다. 예를 들어, "--upgrade"
를 전달하여 "--additional-python-modules"
로 지정된 패키지를 업그레이드할 수 있습니다. 더 많은 예제를 보려면 Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0
Python 종속성이 컴파일된 네이티브 코드에 전이적으로 종속되는 경우 AWS Glue는 작업 환경에서 네이티브 코드 컴파일을 지원하지 않는다는 제한과 충돌할 수 있습니다. 그러나 AWS Glue 작업은 Amazon Linux 2 환경 내에서 실행됩니다. Wheel 배포판을 통해 컴파일된 형식으로 네이티브 종속성을 제공할 수 있습니다.
예를 들어 새 scikit-learn
모듈을 업데이트하거나 추가하려면 키/값 "--additional-python-modules", "scikit-learn==0.21.3"
을 사용합니다.
또한 --additional-python-modules
옵션 내에서 Python 휠 모듈에 대한 Amazon S3 경로를 지정할 수 있습니다. 예제:
--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3
AWS Glue 콘솔의 Job parameters(작업 파라미터) 필드를 사용하거나 AWS SDK에서 작업 인수를 변경하여 --additional-python-modules
를 지정합니다. 작업 파라미터 설정에 대한 자세한 내용을 알아보려면 AWS Glue 작업에서 작업 파라미터 사용 섹션을 참조하세요.
PySpark 네이티브 기능으로 Python 파일 포함
AWS Glue는 PySpark를 사용하여 AWS Glue ETL 작업에 Python 파일을 포함합니다. 사용 가능한 경우 종속성을 관리하기 위해 --additional-python-modules
를 사용하고 싶을 것입니다. --extra-py-files
작업 파라미터를 사용하여 Python 파일을 포함할 수 있습니다. 종속성은 Amazon S3에서 호스팅되어야 하며, 인수 값은 공백 없이 쉼표로 구분된 Amazon S3 경로 목록이어야 합니다. 이 기능은 Spark에서 사용하는 Python 종속성 관리처럼 작동합니다. Spark의 Python 종속성 관리에 대한 자세한 내용을 알아보려면 Apache Spark 설명서의Using PySpark Native Features--extra-py-files
는 추가 코드가 패키징되지 않은 경우 또는 종속성 관리를 위해 기존 도구 체인으로 Spark 프로그램을 마이그레이션하는 경우에 유용합니다. 종속성 도구를 유지 관리하려면 제출하기 전에 종속성을 번들로 묶어야 합니다.
시각적 변환을 사용하는 프로그래밍 스크립트
AWS Glue Studio 시각적 인터페이스를 사용하여 AWS Glue 작업을 생성하면 관리형 데이터 변환 노드와 사용자 지정 시각적 변환을 사용하여 데이터를 변환할 수 있습니다. 관리형 데이터 변환 노드에 대한 자세한 내용은 AWS Glue 관리형 변환으로 데이터 변환 섹션을 참조하세요. 사용자 지정 시각적 변환에 대한 자세한 내용은 사용자 지정 시각적 변환으로 데이터 변환 섹션을 참조하세요. 시각적 변환을 사용하는 스크립트는 작업 언어가 Python 사용으로 설정된 경우에만 생성할 수 있습니다.
시각적 변환을 사용하여 AWS Glue 작업을 생성할 때 AWS Glue Studio는 작업 구성의 --extra-py-files
파라미터를 사용하여 런타임 환경에 이러한 변환을 포함합니다. 작업 파라미터에 대한 자세한 내용을 알아보려면 AWS Glue 작업에서 작업 파라미터 사용 섹션을 참조하세요. 생성된 스크립트 또는 런타임 환경을 변경할 때 스크립트가 성공적으로 실행되도록 하려면 이 작업 구성을 유지해야 합니다.
AWS Glue에서 이미 제공되는 Python 모듈
이러한 제공된 모듈의 버전을 변경하려면 새 버전에 --additional-python-modules
작업 파라미터를 제공합니다.
AWS Glue 버전 5.0은 기본적으로 다음과 같은 Python 모듈을 포함합니다.
aiobotocore==2.13.1
aiohappyeyeballs==2.3.5
aiohttp==3.10.1
aioitertools==0.11.0
aiosignal==1.3.1
appdirs==1.4.4
async-timeout==4.0.3
attrs==24.2.0
awscrt==0.19.19
boto3==1.34.131
botocore==1.34.131
certifi==2024.7.4
cffi==1.14.5
charset-normalizer==3.3.2
colorama==0.4.4
contourpy==1.2.1
cryptography==36.0.1
cycler==0.12.1
distlib==0.3.1
distro==1.5.0
docutils==0.16
filelock==3.0.12
fonttools==4.53.1
frozenlist==1.4.1
fsspec==2024.6.1
gpg==1.15.1
idna==2.10
importlib_resources==6.4.0
jmespath==0.10.0
kaleido==0.2.1
kiwisolver==1.4.5
libcomps==0.1.20
matplotlib==3.9.0
multidict==6.0.5
numpy==1.26.4
packaging==24.1
pandas==2.2.2
pillow==10.4.0
pip==21.3.1
pip==22.3.1
plotly==5.23.0
ply==3.11
prompt-toolkit==3.0.24
pyarrow==17.0.0
pycparser==2.20
Pygments==2.7.4
pyparsing==3.1.2
PySocks==1.7.1
python-dateutil==2.9.0.post0
pytz==2024.1
requests==2.32.2
rpm==4.16.1.3
ruamel.yaml==0.16.6
ruamel.yaml.clib==0.1.2
s3fs==2024.6.1
s3transfer==0.10.2
seaborn==0.13.2
setuptools==59.6.0
six==1.16.0
tenacity==9.0.0
typing_extensions==4.12.2
tzdata==2024.1
urllib3==1.25.10
virtualenv==20.4.0
wcwidth==0.2.5
wrapt==1.16.0
yarl==1.9.4
zipp==3.19.2
라이브러리 압축하여 포함
라이브러리가 하나의 .py
파일로 포함되지 않는 한 .zip
아카이브로 패킹되어야 합니다. 패키지 디렉터리는 아가이브의 루트에 있어야 하고 패키지용 __init__.py
파일을 포함해야 합니다. 그러면 Python은 정상적인 방법으로 패키지를 가져올 수 있습니다.
라이브러리가 하나의 .py
파일에 하나의 Python 모듈만 구성할 수 있으면 모듈을 .zip
에 넣을 필요가 없습니다.
AWS Glue Studio 노트북에서 Python 라이브러리 로드
AWS Glue Studio 노트북에서 Python 라이브러리를 지정하려면 추가 Python 모듈 설치를 참조하세요.
개발 엔드포인트에서 Python 라이브러리 로딩
다른 ETL 스크립트를 설치하기 위해 다른 라이브러리를 사용할 경우, 각 세트에 따라 개별 개발 엔드포인트를 설치하거나 개발 엔드포인트가 스크립트를 스위치할 때마다 로딩되는 라이브러리 .zip
파일(들)을 덮어쓰기할 수 있습니다.
콘솔을 사용하여 개발 엔드포인트를 생성할 때 개발 엔드포인트를 위한 하나 이상의 .zip 파일을 지정할 수 있습니다. 이름과 IAM 역할을 할당한 후 [스크립트 라이브러리 및 작업 파라미터(선택 사항)(Script Libraries and job parameters (optional))]를 선택하고 [Python 라이브러리 경로(Python library path)] 상자에 라이브러리 .zip
파일에 대한 전체 Amazon S3 경로를 입력합니다. 예:
s3://bucket
/prefix/
site-packages.zip
원한다면, 다음과 같이 빈 칸없이 쉼표로만 나뉜 파일까지의 전체 경로를 지정할 수 있습니다.
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
이런 .zip
파일을 나중에 업데이트하면 콘솔을 사용하여 개발 엔드포인트로 이러 파일을 다시 가져올 수 있습니다. 해당 개발자 엔드포인트로 이동하여 옆에 있는 확인란을 선택한 다음 [작업(Action)] 메뉴에서 [ETL 라이브러리 업데이트(Update ETL libraries)]를 선택합니다.
비슷한 방식으로 AWS Glue API를 사용하여 라이브러리 파일을 지정할 수 있습니다. CreateDevEndpoint 작업(Python: create_dev_endpoint)를 호출하여 개발 엔드포인트를 생성하고자 할 때 다음과 같은 호출에 따라 ExtraPythonLibsS3Path
파라미터의 라이브러리까지 하나 이상의 전체 경로를 지정할 수 있습니다.
dep = glue.create_dev_endpoint(
EndpointName="testDevEndpoint
",
RoleArn="arn:aws:iam::123456789012
",
SecurityGroupIds="sg-7f5ad1ff
",
SubnetId="subnet-c12fdba4
",
PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...
",
NumberOfNodes=3
,
ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
")
개발 엔드포인트를 업데이트할 때 DevEndpointCustomLibraries 객체를 사용하고 UpdateDevEndpoint(update_dev_endpoint)를 호출할 때 UpdateEtlLibraries
파라미터를 True
로 설정하여 로드하는 라이브러리를 업데이트할 수도 있습니다.
Job 혹은 JobRun에서 Python 라이브러리 사용
콘솔에서 새로운 작업을 생성하고자 할 경우, [스크립트 라이브러리 및 작업 파라미터(선택 사항)(Script Libraries and job parameters (optional))]를 선택하고 개발 엔드포인트를 생성할 때와 동일한 방식으로 전체 Amazon S3 라이브러리 경로를 입력하여 라이브러리 .zip 파일을 하나 이상 지정할 수 있습니다.
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
CreateJob(create_job)를 호출한다면 다음과 같은 --extra-py-files
기본 파라미터를 사용하여 기본 라이브러리까지 하나 이상의 전체 경로를 지정할 수 있습니다.
job = glue.create_job(Name='sampleJob
',
Role='Glue_DefaultRole
',
Command={'Name': 'glueetl',
'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py
'},
DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
'})
그런 다음 JobRun을 시작할 경우, 다른 것으로 기본 라이브러리 설정을 재정의할 수 있습니다.
runId = glue.start_job_run(JobName='sampleJob
',
Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip
'})