Usar bibliotecas Python com o AWS Glue
É possível instalar módulos e bibliotecas Python adicionais para uso com o ETL do AWS Glue. Para o AWS Glue 2.0 ou superior, o AWS Glue usa o Python Package Installer (pip3) para instalar módulos adicionais a serem usados pelo ETL do AWS Glue. AWS O Glue oferece várias opções para levar os módulos adicionais do Python ao seu ambiente de trabalho do AWS Glue. O parâmetro "—additional-python-modules" pode ser utilizado para trazer módulos por meio de arquivos wheel do Python, arquivo de requisitos (requirement.txt, AWS Glue 5.0 e superior) ou uma lista de módulos Python separados por vírgula.
Tópicos
| Versão do AWS Glue | Versão do Python | Imagem base | versão glibc |
|---|---|---|---|
| 5,0 | 3.11 | Amazon Linux 2023 (AL2023) |
2.34 |
| 4,0 | 3.10 | Amazon Linux 2 (AL2) |
2.26 |
| 3.0 | 3.7 | Amazon Linux 2 (AL2) |
2.26 |
| 2.0 | 3.7 | Amazon Linux AMI (AL1) |
2.17 |
| 1,0 | 3.6 | Amazon Linux AMI (AL1) |
2.17 |
| 0.9 | 2.7 | Amazon Linux AMI (AL1) |
2.17 |
No modelo de responsabilidade compartilhada da AWS
O AWS Glue não oferece suporte à compilação de código nativo no ambiente de trabalho. No entanto, os trabalhos do AWS Glue são executados em um ambiente Linux gerenciado pela Amazon. Talvez você possa fornecer suas dependências nativas em formato compilado por meio de um arquivo wheel Python. Consulte a tabela acima para obter detalhes sobre a compatibilidade de versões do AWS Glue.
Se suas dependências do Python dependerem provisoriamente de código compilado nativo, você poderá se deparar com a seguinte limitação: o AWS Glue não é compatível com a compilação de código nativo no ambiente de trabalho. No entanto, os trabalhos do AWS Glue são executados em um ambiente Linux gerenciado pela Amazon. Talvez você possa fornecer suas dependências nativas em formato compilado por meio de uma distribuição wheel. Consulte a tabela acima para obter detalhes sobre a compatibilidade de versões do AWS Glue.
Importante
O uso de dependências incompatíveis pode resultar em problemas de tempo de execução, especialmente para bibliotecas com extensões nativas que devem corresponder à arquitetura e às bibliotecas do sistema do ambiente de destino. Cada versão do AWS Glue é executada em uma versão específica do Python com bibliotecas pré-instaladas e configurações do sistema.
Instalar módulos Python adicionais com pip no AWS Glue 2.0 ou posterior
O AWS Glue usa o Python Package Installer (pip3) para instalar módulos adicionais a serem usados pelo ETL do AWS Glue. Você pode usar o parâmetro --additional-python-modules com uma lista de módulos do Python separados por vírgulas para adicionar um novo módulo ou alterar a versão de um módulo existente. Você pode instalar distribuições personalizadas de uma biblioteca carregando a distribuição para o Amazon S3 e incluindo o caminho para o objeto do Amazon S3 na sua lista de módulos.
Você pode transmitir opções adicionais para o pip3 com o parâmetro --python-modules-installer-option. Por exemplo, você pode transmitir "--upgrade" para atualizar os pacotes especificados por "--additional-python-modules". Para obter mais exemplos, consulte Desenvolver módulos do Python de um wheel para workloads de ETL do Spark usando o AWS Glue 2.0
O AWS Glue oferece suporte à instalação de pacotes Python personalizados usando arquivos wheel (.whl) armazenados no Amazon S3. Para incluir arquivos wheel em seus trabalhos do AWS Glue, forneça uma lista separada por vírgula dos arquivos wheel armazenados no S3 para o parâmetro do trabalho do --additional-python-modules. Por exemplo:
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
Essa abordagem também pode ser aplicada quando você precisa de distribuições personalizadas ou pacotes com dependências nativas pré-compilados para o sistema operacional correto. Para obter mais exemplos, consulte Desenvolver módulos Python de um wheel para workloads de ETL do Spark usando o AWS Glue 2.0
Especifique --additional-python-modules no campo Parâmetros de trabalho do console do AWS Glue ou alterando os argumentos do trabalho no AWS SDK. Para obter mais informações sobre como configurar parâmetros de trabalho, consulte Usar parâmetros de trabalho em trabalhos do AWS Glue.
No AWS Glue 5.0, você pode fornecer o arquivo requirements.txt padrão de fábrica para gerenciar as dependências da biblioteca Python. Para fazer isso, forneça os seguintes dois parâmetros de trabalho:
-
Chave:
--python-modules-installer-optionValor::
-r -
Chave:
--additional-python-modulesValor::
s3://path_to_requirements.txt
Os nós do AWS Glue 5.0 carregam inicialmente as bibliotecas Python especificadas em requirements.txt.
Exemplo de 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
Importante
Evite versões de biblioteca não fixadas em seu arquivo requirements.txt para garantir que você tenha um ambiente AWS Glue confiável e determinístico para seus trabalhos.
Ao usar o wheel para dependências diretas, existe a possibilidade de você transportar uma versão incompatível das suas dependências transitivas se elas não estiverem fixadas corretamente. Como prática recomendada, todas as versões da biblioteca devem ser fixadas para garantir a consistência em trabalhos do AWS Glue. AWS O Glue recomenda empacotar seu ambiente python em um arquivo de wheel para garantir a consistência e a confiabilidade da sua workload de produção.
Para atualizar ou adicionar um novo módulo do AWS Glue, é possível passar parâmetros --additional-python-modules com uma lista de módulos Python separados por vírgulas como valores. Por exemplo, para atualizar ou adicionar o módulo scikit-learn, use a seguinte chave/valor: "--additional-python-modules",
"scikit-learn==0.21.3". Existem duas opções para configurar diretamente os módulos Python.
-
Módulo Python fixado (recomendado)
"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6" -
Módulo Python não fixado: (não recomendado para workloads de produção)
"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"OU
"--additional-python-modules", "scikit-learn,ephem"
Importante
Quando os módulos Python são configurados diretamente em --additional-python-modules, o AWS Glue recomenda usar versões fixas da biblioteca para garantir a consistência no ambiente de trabalho do AWS Glue. Usar versões de biblioteca não fixadas extrai a versão mais recente dos módulos Python. No entanto, isso pode introduzir alterações significativas ou transportar um módulo Python incompatível e fazer com que um trabalho falhe devido à falha na instalação do Python no ambiente de trabalho do AWS Glue. Recomendamos que os clientes não usem versões de biblioteca não fixadas para workloads de produção. Como prática recomendada do AWS Glue, empacote seu ambiente Python em um arquivo wheel para garantir a consistência e a confiabilidade da sua workload de produção.
Inclusão de arquivos Python com recursos nativos do PySpark
O AWS Glue usa PySpark para incluir arquivos Python em trabalhos de ETL do AWS Glue. Recomenda-se usar --additional-python-modules para gerenciar suas dependências quando disponíveis. Você pode usar o parâmetro de trabalho --extra-py-files para incluir arquivos Python. As dependências devem ser hospedadas no Amazon S3, e o valor do argumento deve ser uma lista delimitada por vírgulas de caminhos do Amazon S3 sem espaços. Essa funcionalidade se comporta como o gerenciamento de dependências do Python que você usaria com o Spark. Para obter mais informações sobre o gerenciamento de dependências do Python no Spark, consulte a página Using PySpark Native Features--extra-py-files é útil em casos nos quais seu código adicional não está empacotado ou quando você está migrando um programa Spark com uma cadeia de ferramentas existente para gerenciar dependências. Para que suas ferramentas de dependência sejam passíveis de manutenção, você precisará empacotar suas dependências antes de enviá-las.
Scripts de programação que usam transformações visuais
Ao criar uma tarefa do AWS Glue usando a interface visual do AWS Glue Studio, é possível transformar seus dados com nós de transformação de dados gerenciados e transformações visuais personalizadas. Para obter mais informações sobre nós de transformações de dados gerenciados, consulte Transformar dados com transformações gerenciadas do AWS Glue. Para obter mais informações sobre transformações visuais personalizadas, consulte Transformar dados com transformações visuais personalizadas . Os scripts que usam transformações visuais só poderão ser gerados quando a Linguagem do trabalho estiver configurada para usar Python.
Ao gerar uma tarefa do AWS Glue usando transformações visuais, o AWS Glue Studio incluirá essas transformações no ambiente de runtime usando o parâmetro --extra-py-files na configuração da tarefa. Para obter mais informações sobre parâmetros de trabalho, consulte Usar parâmetros de tarefa em tarefas do AWS Glue. Ao fazer alterações em um script gerado ou em um ambiente de runtime, será necessário preservar essa configuração de trabalho para que seu script seja executado com êxito.
Compactar bibliotecas para inclusão
A menos que uma biblioteca esteja contida em um único arquivo .py, ela precisará ser compactada em uma pasta .zip. O diretório do pacote deve estar na raiz do arquivo e precisa conter um arquivo __init__.py para o pacote. Em seguida, o Python poderá importar o pacote normalmente.
Se a sua biblioteca contém um único módulo Python em um arquivo .py, você não precisará compactá-la em uma pasta .zip.
Carregar bibliotecas do Python em cadernos do AWS Glue Studio
Para especificar bibliotecas do Python nos cadernos do AWS Glue Studio, consulte Instalar módulos Python adicionais.
Carregar bibliotecas Python em um endpoint de desenvolvimento no AWS Glue 0.9/1.0
Se você estiver usando diferentes conjuntos de bibliotecas para diferentes scripts de ETL, poderá configurar um endpoint de desenvolvimento separado para cada conjunto ou substituir os arquivos .zip da biblioteca carregados pelo seu endpoint de desenvolvimento sempre que os scripts são alternados.
Você pode usar o console para especificar um ou mais arquivos .zip da biblioteca para um endpoint de desenvolvimento ao criá-lo. Depois de atribuir um nome e um perfil do IAM, escolha Script Libraries and job parameters (optional) (Bibliotecas de script e parâmetros de trabalho [opcional]) e insira o caminho completo do Amazon S3 para o arquivo .zip da sua biblioteca na caixa Python library path (Caminho da biblioteca Python). Por exemplo:
s3://bucket/prefix/site-packages.zip
Se quiser, você poderá especificar vários caminhos completos para arquivos, separando-os com vírgulas, mas sem espaços, da seguinte maneira:
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
Se você atualizar esses arquivos .zip posteriormente, poderá usar o console para importá-los novamente para o seu endpoint de desenvolvimento. Navegue até o endpoint do desenvolvedor em questão, marque a caixa de seleção ao lado e escolha Update ETL libraries no menu Action.
De forma semelhante, você pode especificar arquivos de biblioteca usando as APIs do AWS Glue. Ao criar um endpoint de desenvolvimento chamando Ação CreateDevEndpoint (Python: create_dev_endpoint), você pode especificar um ou mais caminhos completos para bibliotecas no parâmetro ExtraPythonLibsS3Path. Essa chamada é semelhante à seguinte:
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")
Ao atualizar um endpoint de desenvolvimento, você também pode atualizar as bibliotecas que ele carrega usando um objeto DevEndpointCustomLibraries e definindo o parâmetro UpdateEtlLibraries como True ao chamar UpdateDevEndpoint (update_dev_endpoint).
Usar bibliotecas Python em trabalho ou JobRun
Ao criar um novo trabalho no console, você pode especificar um ou mais arquivos .zip de biblioteca escolhendo a opção Script Libraries and job parameters (optional) (Bibliotecas de script e parâmetros de trabalho [opcional]) e inserindo os caminhos completos das bibliotecas do Amazon S3, da mesma maneira como você faria ao criar um endpoint de desenvolvimento:
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
Se você estiver chamando CreateJob (create_job), poderá especificar um ou mais caminhos completos para bibliotecas padrão usando o parâmetro padrão --extra-py-files, da seguinte maneira:
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'})
Assim, quando estiver iniciando um JobRun, você poderá substituir a configuração da biblioteca padrão por uma diferente:
runId = glue.start_job_run(JobName='sampleJob',
Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})
Analisar proativamente dependências do Python
Para identificar proativamente possíveis problemas de dependência antes de implantar no AWS Glue, é possível usar a ferramenta de análise de dependências para validar seus pacotes Python em relação ao ambiente AWS Glue de destino.
A AWS oferece uma ferramenta de análise de dependências Python de código aberto projetada especificamente para ambientes AWS Glue. Essa ferramenta está disponível no repositório de amostras do AWS Glue e pode ser usada localmente para validar suas dependências antes da implantação.
Essa análise ajuda a garantir que suas dependências sigam a prática recomendada de fixar todas as versões da biblioteca para implantações de produção consistentes. Para obter mais detalhes, consulte o arquivo README
O AWS Glue Python Dependency Analyzer ajuda a identificar dependências não fixadas e conflitos de versão simulando a instalação do pip com restrições específicas da plataforma que correspondem ao seu ambiente AWS Glue de destino.
# Analyze a single Glue job python glue_dependency_analyzer.py -j my-glue-job # Analyze multiple jobs with specific AWS configuration python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
A ferramenta sinalizará:
-
Dependências não fixadas que poderiam instalar versões diferentes em todas as execuções de tarefas
-
Conflitos de versão entre pacotes
-
Dependências não disponíveis para seu ambiente AWS Glue de destino
O Amazon Q Developer é um assistente conversacional baseado em inteligência artificial (IA) generativa que pode ajudar você a entender, criar, estender e operar aplicações da AWS. Você pode baixá-lo seguindo as instruções no guia de introdução do Amazon Q.
O Amazon Q Developer pode ser usado para analisar e corrigir falhas de trabalho devido à dependência do Python. Sugerimos o prompt a seguir, onde <Job-Name> deve ser substituídopelo nome do seu trabalho do Glue.
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available. Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment. Step 1: Root Cause Analysis • Retrieve the most recent failed job run ID for the specified Glue job • Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix • Analyze the logs to identify: • The recently added or modified Python module that triggered the dependency conflict • The specific dependency chain causing the installation failure • Version compatibility conflicts between required and existing modules Step 2: Baseline Configuration Identification • Locate the last successful job run ID prior to the dependency failure • Document the Python module versions that were functioning correctly in that baseline run • Establish the compatible version constraints for conflicting dependencies Step 3: Targeted Resolution Implementation • Apply pinning by updating the job's additional_python_modules parameter • Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary • Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints • Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions. Implementation Example: Scenario: Recently added pandas==2.0.0 to additional_python_modules Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20) Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5" Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
O prompt instrui o Q a:
-
Obter o ID de execução do trabalho com falha mais recente
-
Encontrar logs e detalhes associados
-
Encontrar execuções de trabalho bem-sucedidas para detectar quaisquer pacotes Python alterados
-
Fazer quaisquer correções na configuração e acionar outra execução de teste
Módulos do Python já fornecidos no AWS Glue
Para alterar a versão desses módulos fornecidos, forneça novas versões com o parâmetro de trabalho --additional-python-modules.