PyPI パッケージのインストールをトラブルシューティングする

Managed Airflow(第 3 世代) | Managed Airflow(第 2 世代) | Managed Airflow(レガシー第 1 世代)

このページでは、カスタム PyPI パッケージをインストールする際に依存関係の競合をトラブルシューティングする方法について説明します。

マネージド Airflow において直面する可能性のある PyPI パッケージの問題で最もよく見られるのは、依存関係の競合です。

インストールする新しいカスタム PyPI パッケージを指定すると、このパッケージまたはそのバージョンによって、環境内の他のカスタム PyPI パッケージまたはプリインストールされたパッケージとの依存関係が競合する場合があります。この場合、環境の更新オペレーションはエラーで失敗します。

Cloud Build とクラスタ内 build のエラー

パッケージで問題が発生した場合は、環境をデプロイする方法に応じて、次の 2 つの方法でエラー メッセージが表示されます。

  • Cloud Build。エラー メッセージと Cloud Build ログへのリンク。次に例を示します。

    UPDATE operation on this environment failed 25 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the Cloud Build log at ...
    
  • クラスタ内ビルド。エラー メッセージとビルドログの場所。次に例を示します。

    UPDATE operation on this environment failed 17 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the in-cluster build logs for
    details. They can be found in the Environment logs under the build-log-*
    log name.
    

詳細なエラー メッセージを参照する

パッケージのインストールが失敗すると、pip により詳細なエラー メッセージが報告されます。このエラー メッセージはビルドログで確認できます。

Cloud Build のログで pip エラーを見つける

Cloud Build のエラー メッセージのリンクを参照するか、ビルドログを見つけます。

  1. ビルドログを見つけます。

    1. コンソールで、[**ビルド履歴**] ページに移動します。 Google Cloud

      [ビルド履歴] に移動

    2. 失敗したビルドを選択してそのログを表示します。

  2. ビルドログで、pip からエラー メッセージを探します。次に例を示します。

    ERROR: apache-airflow-backport-providers-google 2021.2.5 has requirement
    google-cloud-logging<3.0.0,>=2.1.1, but you'll have google-cloud-logging
    1.15.0 which is incompatible.
    

クラスタ内 build のログで pip エラーを見つける

  1. ビルドログを見つけます。

    1. コンソールで、[**環境**] ページに移動します。 Google Cloud

      [環境] に移動

    2. 環境を選択します。

    3. [ログ] タブを開きます。

    4. [すべてのログ] > [Composer ログ] > [ビルド] > [ワーカーとスケジューラ イメージ] を選択します。

    5. [重大度] プルダウン リストで [情報] を選択します。

  2. 次のログが表示されます。

    1. installer.sh エラー メッセージを見つけます。次に例を示します。

      The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION
      fail' returned a non-zero code: 1
      
    2. 上記の情報メッセージには詳細な pip エラーが含まれています。次に例を示します。

      apache-airflow-backport-providers-google 2021.2.5 has requirement
      google-cloud-logging<3.0.0,>=2.1.1, but you have
      google-cloud-logging 1.15.0.
      

Python パッケージのインストール中のタイムアウト

最近のバージョンでは、依存関係を満たそうとするときに pip ユーティリティの動作が変更されました。指定された依存関係を満たせない場合、pip はパッケージの利用可能なすべてのバージョンを処理します。

パッケージをインストールすると、次のようになります。

  1. パッケージが環境にプリインストールされていて 、指定した Python 依存関係に変更が必要ない場合、 パッケージはそのまま残ります。

    例: aiodebug==2.3.0 がインストールされていて、aiodebug または aiodebug>=2 を指定します。

  2. パッケージが環境にまだインストールされていない場合、または指定した Python 依存関係を満たしていない場合、pip は依存関係を満たす最新バージョンを使用しようとします。バージョンを指定しなかった場合はパッケージの最新バージョン、指定した制限を満たすパッケージの最新バージョンです。

    例: aiodebug を指定すると、最新バージョン(2.*.*)がインストールされます。aiodebug<2 を指定すると、1.*.* がインストールされます。

    このバージョンがプリインストールされたパッケージとの依存関係の競合を引き起こす場合、pip はパッケージの利用可能なすべてのバージョンを処理 して、指定された依存関係を満たそうとします。この場合、ビルドログに次のメッセージが表示されます。

    INFO: pip is looking at multiple versions of PYTHON_PACKAGE_NAME
    to determine which version is compatible with other requirements.
    This could take a while.
    

    変更前は、pip は他のバージョンを確認せずに依存関係の競合で失敗していました。

利用可能なすべてのバージョンを処理するには時間がかかり、パッケージのダウングレードや Python パッケージのインストール中のタイムアウトが発生する可能性があります。

Managed Airflow のプリインストールされたパッケージは、セキュリティ上の理由から最新バージョンに定期的に更新されます。そのため、環境を新しい Managed Airflow バージョンにアップグレードするときにもタイムアウトが発生する可能性があります。

解決策の提示

  • カスタム Python 依存関係を定期的に更新します。

  • PythonVirtualenvOperator を使用して、競合するパッケージを必要とするコード スニペットを分離します。

プリインストールされた PyPI パッケージとの競合

インストールするカスタム PyPI パッケージとプリインストールされたパッケージの間で、パッケージの競合が発生する場合があります。

マネージド Airflow のバージョンにプリインストールされているパッケージの完全なリストは、 マネージド Airflow のバージョン ページで確認できます。

次のことを行って、この問題を解決すできます。

  • カスタム PyPI パッケージの異なるバージョンをインストールします。

  • プリインストールされたパッケージの異なるバージョンをインストールします。そうするには、プリインストールされたパッケージの名前でカスタム PyPI パッケージをインストールし、必要なバージョンを指定します。プリインストールされたパッケージのダウングレードはおすすめしません。

  • 新しいManaged Airflow バージョンで、プリインストールされたパッケージの異なるバージョンが使用されているかどうかを確認します。環境を新しいバージョンの Managed Airflow にアップグレードする前に、 PyPI パッケージの競合の可能性を確認できます。

  • PythonVirtualenvOperator を使用して、競合するパッケージを必要とするコード スニペットを分離します。

PyPI パッケージのインストール時にメタデータ サーバーを使用できない

環境でカスタム pip.conf ファイルを使用している場合、新しい PyPI パッケージを環境にインストールできないと問題が発生する可能性があります。パッケージのインストール エラーに関する Cloud Build ログに、次の警告メッセージが表示される場合があります。

WARNING: Compute Engine Metadata server unavailable on attempt 3 of 3. Reason:
timed out
WARNING: Authentication failed using Compute Engine authentication due to
unavailable metadata server.

この問題は、https://pypi.org/simpleデフォルト パッケージ インデックスにアクセスできないpip.confファイルが原因となっています。たとえば、pip.conf ファイルで、再定義された index-url パラメータによりカスタムの Artifact Registry リポジトリからのパッケージのインストールのみが許可されている場合、デフォルトのパッケージ インデックスからパッケージをインストールすることはできません。

この問題を解決するには、pip.conf ファイルに https://pypi.org/simple パッケージ インデックスが追加されていることを確認します。たとえば、プライマリ パッケージ インデックスが index-url パラメータで定義されている場合、extra-index-url パラメータには https://pypi.org/simple インデックスを追加します。

次のステップ