Python/ツールパッケージ管理とインベントリ
このページの主な目的は、データプラットフォームで使用しているインベントリの詳細をすべて管理することです。主に Python ライブラリと以下のツールについて考えています。 動機は、誰が、なぜ、いつ、何をアップグレードするかに関する詳細と基準を含む整然としたインベントリリストを維持することです。また、Python ライブラリの最新バージョンに関するすべての詳細を収集するコマンドラインアプリケーションについての、アップグレードに関する詳細な条件を公開する予定です。インベントリリストには以下が含まれます:
- 🐍 使用中の
Pythonバージョン - 🛠 使用中のツール(
dbt、airflow、permifrost、meltano) - 📚 使用中の Python ライブラリ_(パッケージ)_(例:
pandas、requests、matplotlib)
すべてのツールやパッケージに DRI を設定することを目指しています。DRI の責任は、そのツールやパッケージを健全な状態に保つよう助言し、アップグレードを主導することです。
アップグレードの一般的な動機
ツールのアップグレード戦略は各ツールに固有であるため、アップグレードをいつ行うか、どのような状況で行うかは DRI 次第です。
アップグレードの動機:
- 脆弱性の低減
- バグとクラッシュの修正
- 更新された他のテクノロジーとの互換性確保
- 使用する予定の新機能の導入
- 適切なサポートの確保
- 将来のアップグレードの容易化(バージョンを大幅に遅らせないため)
- マーケットプレイスの関連性
- サポート終了
サポート終了のチェックアップ
最低限、サポート終了ポリシーを遵守します。サポートが終了したものは通常、重大なセキュリティ上のバグ修正も受け取れなくなるため、セキュリティリスクになります。
Python バージョンを更新する主なベンチマークは end-of-life(サポート終了)パラメーターです。バージョンがサポートされなくなった場合は、アップグレードの候補とすべきです。
バージョンアップグレードの開始/スケジュール
DRI はツールやパッケージのドメインの専門家であり、新しいバージョンとリリースを監視します。アップグレードが適用可能な場合は、アップグレードを推薦・開始します。この推薦には以下が含まれます:
- アップグレードの動機
- 影響と依存関係
- アップグレードの重要性(タイムライン)
上記は Issue に文書化され、毎週の Data Platform チームミーティングで議論されます。
計画
アップグレードは、Data Planning ドラムビートに従い、四半期ごとに OKR(P2)としてスケジュールされます。必要に応じて(セキュリティ脆弱性の場合など)、四半期中に P1 としてスケジュールできます。これにより、すでにスケジュールされていた P2-OKR の作業が妥協されることになります。
Python イメージ/コンテナインベントリリスト
🐍Python を使用しているイメージがいくつかあります。以下の理由から、複数のバージョン(>=3.7)が使用されています:
- 異なるプロジェクトに対してユースケースが様々
- 一部のライブラリは特定の 🐍
Pythonバージョン_(依存関係による)_を必要とする - 複数のチームがイメージを使用しており、特定のバージョン実装に要件がある
表 1: 使用中のイメージのリスト
| イメージ | 使用中のバージョン | イメージバージョン | DRI | ユーザー |
|---|---|---|---|---|
| analytics | 3.10 | N\A | TBA | Data Platform |
| airflow-image | 3.10.3 | python:3.10.3 | TBA | Data Platform |
| ci-python-image | 3.8.3 | python:3.8.3-slim-buster | TBA | Data Platform |
| data-image | 3.10.3 | python:3.10.3 | TBA | Data Platform |
| dbt-image | 3.10.3 | python:3.10.3 | TBA | Data Platform |
| gitlab-data-meltano | 3.8 | meltano/meltano:v2.16.1-python3.8 | TBA | Data Platform |
| mlfow-infra | 3.8 | python:3.8 | TBA | Data Scientists |
| ci-streamlit-image | 3.12 | python:3.12-slim | @rbacovic | Data Platform |
| ci-accountiq-image | 3.12 | python:3.12-slim | @rbacovic | Data Platform |
依存関係グラフ(クリックして展開)
---
title: Dependency graph for images and Python versions
---
flowchart LR
P38 --> pip
P310 --> pip
P312 --> poetry
P312 --> pip
pip --> airflow-image
pip --> ci-python-image
pip --> data-image
pip --> dbt-image
pip --> mlfow-infra
pip --> gitlab-data-meltano
pip --> permifrost
pip --> ci-accountiq-image
poetry --> ci-streamlit-image
data-image --Inherit--> gitlab-data-utils
data-image --Inherit--> analytics
ci-python-image --Inherit--> analytics
subgraph Python
P38[Python 3.8.3]
P310[Python 3.10/3.10.3]
P312[Python 3.12]
end
subgraph Package manager
pip[pip]
poetry[poetry]
end
subgraph Images
airflow-image
ci-python-image
data-image
data-science
dbt-image
gitlab-data-utils
mlfow-infra
gitlab-data-meltano
permifrost
ci-streamlit-image
ci-accountiq-image
end
subgraph DEV [Development environment]
analytics
endPython バージョンの更新アプローチ
このセクションは、特定のイメージで 🐍Python バージョンをアップグレードする方法とタイミングについてのガイドラインです。リストされた項目のほとんどは推奨事項とベストメソッドであるため、いつ Python バージョンをアップグレードするかに統一された条件はありません。この理由は、使用しているイメージの多様なユースケースです。
セキュリティの脆弱性もアップグレードの重要なベンチマークです。潜在的な Python 脆弱性を確認するためのソース:
既知および確認された Python 脆弱性がある場合は、できるだけ早く Python バージョンのアップグレードプロセスを開始する必要があります。
一般的に、以下のテキストでは一連のアドバイスを公開しており、🐍Python バージョンをアップグレードしない特定の理由がある場合は、説明を公開することが良いでしょう。
🐍Python バージョンの維持・アップグレードと、特定のバージョンがいつ廃止されるかを確認するには、Python サポートタイムラインまたは代替として endoflife.date を確認してください。使用しているイメージのインベントリリストは以下の表にリストされています。
Python バージョンのアップグレードは、イメージへの影響が大きい場合があるため、ケースバイケースで決定されます。特定のバージョンの end-of-life(サポート終了)を考慮することは良い選択です。
end-of-life ポリシーの例:
アップグレードポリシーに関しては、最低限サポート終了ポリシーを遵守すべきと考えています。
サポートが終了したものは通常、重大なセキュリティ上のバグ修正も受け取れなくなるため、セキュリティリスクになります。
- Python ライフサイクルでは、現在使用している以下の Python バージョンがサポート終了または終了間近です:
3.7はすでにサポート終了3.8は 2024 年末にサポート終了
ツールインベントリリスト
表 2: GitLab Data チームが使用しているツールのリスト
| ツール名 | 使用中のバージョン | バージョンサポートタイムライン | アップグレード方法 | DRI | ユーザー | アップグレードポリシー |
|---|---|---|---|---|---|---|
| dbt | 1.9.2 | リンク | - dbt のアップグレードのベストプラクティス - dbt バージョンのアップグレード | TBA | - Data Platform- Analytics Engineers- Data Scientists | 2バージョン以上遅れない(ベータリリースを除く)、最小サポートレベルは critical |
| airflow | 2.10.5 | リンク | Airflow のアップグレード計画 | TBA | Data Platform | 現在のバージョンリリースから 1 年以上経過 |
| permifrost | 0.15.4 | リンク | permifrost バージョンのアップグレード | @rbacovic | Data Platform | 2バージョン以上遅れない(ベータリリースを除く) |
| meltano | 2.16.1 | リンク | Meltano バージョンのアップグレード | TBA | Data Platform | 現在のバージョンリリースから 1 年以上経過 |
dbt パッケージインベントリ
| パッケージ名 | 使用中のバージョン | DRI | ユーザー |
|---|---|---|---|
| snowflake_spend | 1.1 | N\A | -Data Engineers -Analytics Engineers |
| data-tests | N\A | N\A | -Data Engineers -Analytics Engineers |
| dbt-labs/audit_helper | 0.9.0 | N\A | -Data Engineers -Analytics Engineers |
| dbt-labs/dbt_utils | 1.1.1 | N\A | -Data Engineers -Analytics Engineers |
| dbt-labs/snowplow | 0.15.1 | N\A | -Data Engineers -Analytics Engineers |
| dbt-labs/dbt_external_tables | 0.8.7 | N\A | -Data Engineers -Analytics Engineers |
| brooklyn-data/dbt_artifacts | 2.8.0 | N\A | -Data Engineers -Analytics Engineers |
ツールバージョンの更新アプローチ
end-of-life ポリシーの例:
アップグレードポリシーに関しては、最低限サポート終了ポリシーを遵守すべきと考えています。
サポートが終了したものは通常、重大なセキュリティ上のバグ修正も受け取れなくなるため、セキュリティリスクになります。
- airflow ライフサイクル では、
1.10.15のサポート終了は2021年6月17日でした。今後は、このサポート終了ルールに従ってより早くアップグレードするよう努める必要があります- dbt 最新リリース
v1.2とv1.3はすでにサポート終了で、2023 年末には完全に廃止予定- dbt はアップグレードのためのベストプラクティスを説明しており、そのうちの1つは少なくとも新しい
パッチバージョン(「バグフィックス」 または 「セキュリティ」 リリース)にアップグレードすることです
ライブラリインベントリリスト
ライブラリインベントリリストは部分的に自動化されたプロセスです。ライブラリのアップグレードに必要なすべての情報を収集するコマンドラインアプリケーションがあります。ライブラリに関するすべての情報を収集することに加えて、アップグレードプロセスに役立つ 2 つのレポートを生成します:
- 各イメージのインベントリリストを取得 - 実装しているライブラリが古くなっていないか、最新バージョンからどれだけ遅れているかを確認するためのユーティリティ。
- イメージ間の重複バージョンを確認 - イメージ間でバージョンが同期していない場合があるかどうか確認します。ライブラリのバージョンが同期していない場合、特定の理由がある可能性があります。一般的に、イメージ間でユニークなバージョンを維持することが有益です_(可能であれば、かつ支障がなければ)_。
このプログラムを実行するには、/package_inventory リポジトリ をチェックアウトして、以下のコードを実行してください:
- プログラムを実行する
# run file
python3 gitnventory.py [--dry-run] [--logging [print/logging]] [--report_folder DEFINE_FOLDER] [--log_file DEFINE_LOG_FILE] [--help]
プログラムの実行方法の詳細は、ソースコードを参照してください。
注意: ライブラリの最新バージョンのプライマリソースとして PyPi と GitLab Data グループを使用していることに注意してください。
表 3: Python ライブラリの DRI
| ツール名 | DRI |
|---|---|
| Python ライブラリ | @rbacovic |
ライブラリの更新アプローチ
アップグレード候補リスト作成の提案:
表 4: Python、ツール、ライブラリバージョンのアップグレード基準の例
| 基準 | 例 | 実装リスク (1.0 低, 5.0 高) |
|---|---|---|
現在のバージョンが古くなってサポートされなくなった(end-of-life ポリシー) | Python 2.7 | 4.0 ⭐⭐⭐⭐☆ |
| 現在のバージョンに脆弱性がある | 記事 | N\A |
| メジャーバージョンがリリース | 現在のバージョン: 2.1.0最新バージョン 3.0.0 | 3.0 ⭐⭐⭐☆☆ |
| マイナーバージョンがリリース | 現在のバージョン: 2.1.0最新バージョン 2.2.0 | 1.0 ⭐☆☆☆ |
| パッチバージョンがリリース | 現在のバージョン: 2.1.0最新バージョン 2.1.8 | 1.0 ⭐☆☆☆☆ |
ライブラリの更新時期を決定することは難しい場合があるため、いくつかの考慮事項が役立ちます。アップグレードを検討する(end-of-life 基準に加えて):
- 特定のバージョンに必要な新機能 - 必要/使いたい重要な機能がある場合は、アップグレードに進みます
- パッケージに深刻な脆弱性がある場合のみアップグレード - これは常にレッドフラグであり、すぐにアップグレードを開始する必要があります
- x メジャー/マイナーバージョン以上遅れている場合にアップグレード - アップグレードに進む十分な理由であると思われますが、影響を真剣に考慮する必要があります。例えば、新しいメジャーバージョンへのジャンプが、場合によっては Python の新バージョンを必要とします。リスクが適切に評価されていれば、アップグレードに進む必要があります
依存関係のチェックアップ
アップグレードの理由は、依存しているツール/パッケージにある場合があります。例えば、dbt をアップグレードする予定があり、場合によっては 🐍 Python のアップグレードも必要になることがあります (dbt-image の場合)。それが Python のアップグレードの理由になることがあります。他のツール (この例では dbt) が必要とするからです。
アップグレードのヒントとコツ
✅ やること:
- プラットフォームに影響を与える可能性のある既知の Issueがある場合は特別なアップグレードを行う
- 🐍
Pythonパッケージをメジャーバージョン変更にアップグレードする際は、イメージで使用されている Python バージョンとの互換性を確認してください(衝突が生じる可能性があります) - インストール/アップグレードしたい 🐍
Pythonパッケージが安全で悪意のあるコードが含まれていないかを確認する - 他のパッケージとの後方互換性を常に確認する (プロジェクトの CI パイプラインがイメージビルド中に役立ちます)。
🛑 やらないこと:
- ソフトウェアの
pre-releaseバージョンにアップグレードしない。常に安定版リリースバージョンを使用する non-trustedソースを使用しない。インストールのソースとして PyPi または GitLab Data グループのパッケージを優先する
アップグレードのロギング
表 5: アップグレードに関する活動のログ
| 四半期 (どの四半期にアップグレード計画を行うか) | アップグレード確認の Issue (アップグレード計画に使用する Issue へのリンク) | アップグレード実行 (どの四半期にアップグレードを実行するか) | 計画されたアップグレードの Epic (アップグレード実行に使用する Epic へのリンク) | アップグレードの種類 [ Python|Tool|Libraries](アップグレード予定のオブジェクトの種類) | DRI (アップグレード計画に必要なことを確認する個人) |
|---|---|---|---|---|---|
FY24Q4 | #19248 | FY25Q1 | @rbacovic | ||
FY25Q1 | #20233 | FY25Q2 | @rbacovic | ||
FY25Q2 | #21082 | FY25Q3 | @rbacovic | ||
FY27Q1 | #26436 | @rbacovic |
