Como instalo bibliotecas no meu ambiente do Amazon MWAA?

Data da última atualização: 03/02/2022

Desejo instalar bibliotecas no meu ambiente do Amazon Managed Workflows for Apache Airflow (Amazon MWAA).

Breve descrição

Quando você cria um ambiente do Amazon MWAA, alguns pacotes/distribuições básicas são incluídos na instalação base do Apache Airflow. Você pode instalar pacotes além dos incluídos na instalação base usando o arquivo requirements.txt ou plugins.zip no seu ambiente do Amazon MWAA.

Por padrão, pacotes são instalados no Amazon MWAA a partir de repositórios públicos (PyPI.org). Você também pode instalar pacotes de repositórios hospedados em âmbito privado, como JFROG e AWS CodeArtifact.

Resolução

Você pode instalar bibliotecas do repositório público padrão (PyPi.org) ou de repositórios privados. Escolha a abordagem que melhor se adapta ao seu caso de uso.

Instalar de repositórios públicos

Para instalar pacotes do repositório público padrão, basta adicionar o nome e a versão do pacote (==) no seu arquivo requirements.txt. Em seguida, carregue o arquivo requirements.txt no bucket do Simple Storage Service (Amazon S3). Especifique a versão desse arquivo no campo Requirements file (Arquivo de requisitos) ao atualizar o ambiente usando o console do Amazon MWAA.

Instalar a partir de repositórios privados ou locais

Se você não tem acesso à Internet no seu ambiente para instalar pacotes do repositório público, poderá instalar bibliotecas/pacotes personalizados do seu repositório PyPI hospedado em âmbito privado. Para fazer isso, baixe todos os pacotes e inclua-os no seu repositório local, que pode ser JFROG, AWS CodeArtifact ou qualquer outro. Depois de adicionar os pacotes ao repositório, use o URL do repositório para importá-los. Para importar bibliotecas privadas, especifique o URL do repositório (--index-url) no arquivo requirements.txt.

Use uma das seguintes opções para instalar um pacote (exemplo: redis==3.5.3) do seu repositório local.

Se estiver usando um repositório privado, atualize o arquivo requirements.txt para incluir o seguinte:

--trusted-host artifactory-aws.example-org.com
--index-url https://artifactory-aws.example-org.com/artifactory/api/pypi/pypi-virtual/simple
redis==3.5.3

Se você estiver usando o repositório JFROG, atualize o arquivo requirements.txt para incluir o seguinte:

--index-url=https://${AIRFLOW__JFROG__USER}:${AIRFLOW__JFROG__PASS}@<server-name>.jfrog.io/artifactory/api/pypi/<repository>/simple
redis==3.5.3

Você também pode incluir -- index-url em um arquivo de texto em vez de adicionar diretamente o URL no arquivo requirements.txt. Você pode especificar --index-url em um arquivo de texto (por exemplo, codeartifact.txt) e, em seguida, fazer upload de codeartifact.txt no bucket do S3 na pasta /dags.

Em seguida, atualize o arquivo requirements.txt para incluir o caminho do arquivo codeartifact.txt:

-r /usr/local/airflow/dags/codeartifact.txt
<br>redis==3.5.3

Consulte o workshop do Amazon MWAA for Analytics - Repositório privado PyPI para saber como fazer o seguinte:

Observação: essa solução usa o arquivo codeartifact.txt para especificar --index-url.

  • Crie um repositório PyPI privado com uma conexão com uma fonte externa usando o AWS CodeArtifact.
  • Provisione um ambiente do MWAA privado sem uma conexão com a Internet pública e aproveite os Endpoints de VPC para se conectar ao AWS CodeArtifact.
  • Crie uma função do Lambda para manter o token de autorização do seu repositório PyPI privado atualizado.

Pacotes de instalação

Para instalar pacotes do repositório público ou privado, atualize seu ambiente para incluir o arquivo requirement.txt:

  1. Crie uma cópia local do arquivo requirements.txt e faça upload dessa cópia no bucket do Amazon Simple Storage Service (Amazon S3) (exemplo: s3://example-bucket/requirements.txt) usando o console do Amazon Simple Storage Service (Amazon S3) ou a AWS Command Line Interface (AWS CLI).
    Observação: lembre-se de ativar o versionamento no bucket do S3.
  2. Para editar o ambiente, abra a página Environments (Ambientes) no console do Amazon MWAA.
  3. Selecione o ambiente na lista e, em seguida, escolha Edit (Editar).
    Observação: se você estiver carregando o arquivo requirements.txt no seu ambiente pela primeira vez, siga as etapas 4, 5 e 6. Se você já carregou o arquivo e o atualizou recentemente, siga apenas a etapa 6.
  4. Na página Specify details (Especificar detalhes), na seção DAG code in Amazon S3 (Código do DAG no Amazon S3), escolha Browse S3 (Navegar no S3) no campo Requirements file - optional (Arquivo de requisitos - opcional).
  5. Selecione o arquivo requirements.txt no bucket do Simple Storage Service (Amazon S3) e, em seguida, escolha Choose (Escolher).
  6. Para Choose a version (Escolher uma versão) no campo Requirements file - optional (Arquivo de requisitos - opcional), selecione a versão mais recente que você carregou.
  7. Selecione Next (Próximo) e, em seguida, selecione Save (Salvar).

Você pode começar a usar os novos pacotes imediatamente após a atualização do ambiente.

O ambiente leva de 15 a 20 minutos para ser atualizado. Depois que o ambiente for atualizado, os pacotes listados no arquivo requirements.txt serão instalados. Se as dependências não forem instaladas em 10 minutos, o serviço AWS Fargate poderá atingir o tempo limite e tentar reverter o ambiente para um estado estável.

Solucionar problemas com o processo de instalação

Se você tiver problemas durante a instalação desses pacotes, poderá exibir o arquivo de log (requirements_install_ip) dos grupos de log do Apache Airflow Worker/Scheduler.

Se o arquivo de log tiver erros para os pacotes, você poderá tentar instalar os pacotes novamente adicionando uma versão diferente do pacote. É uma prática recomendada prefixar o arquivo requirements.txt com o arquivo de restrições.

Exemplo:

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-example-Airflow-version/constraints-3.7.txt"

Observação: certifique-se de substituir example-Airflow-version pelo número da versão do seu ambiente.

Importante: é uma prática recomendada testar as dependências do Python usando o utilitário da CLI do Amazon MWAA (aws-mwaa-local-runner) antes de instalar os pacotes no seu ambiente do Amazon MWAA.