Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
このページでは、カスタム PyPI パッケージをインストールする際に依存関係の競合をトラブルシューティングする方法について説明します。
Cloud Composer において直面する可能性のある 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 のエラー メッセージのリンクを参照するか、ビルドログを見つけます。
ビルドログを見つけます。
Google Cloud コンソールで、[ビルド履歴] ページに移動します。
失敗したビルドを選択してそのログを表示します。
ビルドログで、
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
エラーを見つける
ビルドログを見つけます。
Google Cloud コンソールで、[環境] ページに移動します。
環境を選択します。
[ログ] タブを開きます。
[すべてのログ] > [Composer ログ] > [ビルド] > [ワーカーとスケジューラ イメージ] を選択します。
[重大度] プルダウン リストで [情報] を選択します。
次のログが表示されます。
installer.sh
エラー メッセージを見つけます。次に例を示します。The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION fail' returned a non-zero code: 1
上記の情報メッセージには詳細な
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
はパッケージの利用可能なすべてのバージョンを確認します。
パッケージをインストールすると、次の処理が行われます。
パッケージが環境にすでにプリインストールされており、指定した Python の依存関係に変更が不要な場合、パッケージはそのままになります。
例:
aiodebug==2.3.0
がインストールされており、aiodebug
またはaiodebug>=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 パッケージのインストール中のタイムアウトにつながる可能性があります。
セキュリティ上の理由から、Cloud Composer にプリインストールされているパッケージは最新バージョンに定期的に更新されます。したがって、環境を Cloud Composer の新しいバージョンにアップグレードするときにもタイムアウトが発生する可能性があります。
解決策の提示
カスタム Python 依存関係を定期的に更新します。
PythonVirtualenvOperator を使用して、競合するパッケージを必要とするコード スニペットを分離します。
プリインストールされた PyPI パッケージとの競合
インストールするカスタム PyPI パッケージとプリインストールされたパッケージの間で、パッケージの競合が発生する場合があります。
お使いの Cloud Composer のバージョンのプリインストール済みパッケージの完全な一覧については、[Cloud Composer のバージョン] ページをご覧ください。
次のことを行って、この問題を解決すできます。
カスタム PyPI パッケージの異なるバージョンをインストールします。
プリインストールされたパッケージの異なるバージョンをインストールします。そうするには、プリインストールされたパッケージの名前でカスタム PyPI パッケージをインストールし、必要なバージョンを指定します。プリインストールされたパッケージのダウングレードはおすすめしません。
後のCloud Composer のバージョンが、プリインストールされたパッケージの異なるバージョンを使用しているかどうかを確認します。環境を Cloud Composer の新しいバージョンにアップグレードする前に、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
インデックスを追加します。