Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyPIデビュー手前の人のための地下活動手法 -PyPICloudを使ったプライベートレジストリの構築- / Using PyPICloud as private registry for pre-debut to PyPI

252e6c31a6452aa80deb9ad0107975c7?s=47 attakei
October 16, 2021

PyPIデビュー手前の人のための地下活動手法 -PyPICloudを使ったプライベートレジストリの構築- / Using PyPICloud as private registry for pre-debut to PyPI

PyCon JP 2021で発表した同タイトルの登壇で使用した時点のスライドのPDF版です。

このファイルはReveal.jsで制作したプレゼンテーションをPDF化したものとなっています。
誤字などの理由で元のHTMLを修正・編集することがあります。
最新の内容を参照したい場合はこちらのHTML版を閲覧してください。

252e6c31a6452aa80deb9ad0107975c7?s=128

attakei

October 16, 2021
Tweet

More Decks by attakei

Other Decks in Programming

Transcript

  1. PyPIデビュー手前の人のための 地下活動手法 PyPICloudを使ったプライベートレジストリの構築 date 2021-10-15 event PyCon JP 2021 speaker

    Kazuya Takei / @attakei / NIJIBOX Co., Ltd. hashtag #pyconjp
  2. はじめに

  3. お前誰よ? Kazuya Takei / @attakei (Tw, GT, GL,,,) 趣味系Pythonista/ライブラリ‧拡張系 の開発がメイン

    sphinx-revealjs sphinxcontrib-gtagjs Errbotプラグインいろいろ
  4. お前誰よ? Kazuya Takei / 株式会社ニジボックス バックエンド寄りのフルスタック 気味(CI系が一番コア?) 技術ハードルの突破要因をしたり POSTDの運用設計とかをしたり

  5. AD:株式会社ニジボックス 株式会社ニジボックスは、UXデザインに特化した、リクル ートグループのWeb制作会社です。 新規事業の立ち上げ支援、UXデザイン、UIデザイン、Web 制作、開発、動画制作、イラスト制作、リリース後のグロ ースハックまで、一気通貫でサポートしています。

  6. AD:株式会社ニジボックス 海外のテクノロジー系記事を日本語で読むことができ るエンジニア向けのキュレーションメディア 株式会社ニジボックスが運営を引き継ぎ再始動 POSTD

  7. アジェンダ PyPIデビュー手前の人のためのPyPI体験記 PyPICloudからの自己紹介 PyPICloudの使い方あれこれ PyPICloudを実際に使ってみて

  8. 話すこと pypucloudの… 使い方 使い道 使い勝手 これらを通じて、PyPIデビュー手前の「地下活動」手法

  9. 話さないこと PyPICloudにアップロードするものの作り方 => いわゆるPyPIデビューのためのパッケージ作成周り PyPICloudの突っ込んだ使い方 => PyPICloudのエキスパートになる方法

  10. PyPIデビュー手前の人のた めのPyPI体験記

  11. PyPIデビューしてますか? or PyPIデビューしてみようと思ったこと ありますか?

  12. 3行で説明する大雑把な「PyPIデビュ ー」 「これ何度も使うな?」というコードをひとまとめに する 実コード以外にも必要なファイルを揃えてパッケージ を作成して PyPIにアップロードする

  13. デビューしていない方向け

  14. PyPIデビュー時/デビュー後の悩みご と ※以下、個人の感想です グローバルな名前空間を1個使って良いものか パブリックなパッケージにしか出来ない ↑を踏まえて、PyPIにいきなりアップロードすること に抵抗がある

  15. ※グローバルな名前空間 PyPIに登録するパッケージ名は単一の名前空間上に登録さ れる。 (Pythonのライブラリとしてはサブパッケージは可能) そうじゃない例: npm(Node.js): @attakei/sync-nextjs-rewrites Packagist(PHP): phpunit/phpunit

  16. ※グローバルな名前空間 PyPIに登録するパッケージ名は単一の名前空間上に登録さ れる。 (Pythonのライブラリとしてはサブパッケージは可能) => メンテナンスを放置したときに、利用者がちょっと困 る…かも?

  17. ※グローバルな名前空間 (まだ、おとぎ話です) とあるパッケージ errcron があります。 たまたま使ってた人が改善し てみたのですが、作者が放置気味のため、 「同じ機能を提供してい る」のに改善版の反映が出来ません。 仕方がないので、

    errcron3 を公開することにしました。 そして、カオスが始まります…
  18. ※パブリックにしかならない PyPI自体に登録するパッケージはプライベートに出来な い。 => 「社内限定の特定用途ライブラリ」「PyPIにあるやつに 固有なチューニングしたい」

  19. よくある解決例 アーカイブを直接配布する Gitリポジトリだけ公開する 専用のパッケージレジストリを用意する

  20. よくある解決例 アーカイブを直接配布する pip install /opt/my-package.whl Gitリポジトリだけ公開する pip install git+https://github.com/attakei/my- package.git

    専用のパッケージレジストリを用意する ↑今日のお題はここ!
  21. PyPICloudからの自己紹介

  22. PyPICloudとは 意訳すると: S ,GCS,Azure Blobでパッケージファイルを管 理できるPyramid製のPyPIサーバー https://pypi.org/project/pypicloud/ This package is

    a Pyramid web app that provides a PyPI server where the packages are stored on Amazon’s Simple Storage Service (S ), Google’s Cloud Storage (GCS) or Azure’s Blob Storage. ※README序文より引用
  23. PyPICloudとは 使用感としては、 最初からクラウドサービス上での運用を前提とした 各種IaaS向けのインターフェース設計をしている プライベートなPyPIサーバーアプリケーション ※もちろんローカルでの利用も可能 https://pypi.org/project/pypicloud/

  24. ちょっと使ってみる (デモ予定)

  25. ちょっと使ってみる ターミナル1 ターミナル2 $ python -m venv .venv $ .

    .venv/bin/activate (.venv) $ pip install 'pypicloud[server]' (.venv) $ pypicloud-make-config config.ini (.venv) $ pserve config.ini $ python -m venv .venv $ . .venv/bin/activate (.venv) $ pip install --index-url bottle
  26. ところで 最初からクラウドサービス上での運用を前提とした 各種IaaS向けのインターフェース設計をしている …って何だ?

  27. pypicloudの仕組み(図解) PyPICloudに加えて、Storage/Cacheの 3層構成 PyPICloud Cache Storage

  28. pypicloudの仕組み(図解) Storageは、実際にインストールされて いくパッケージファイルの管理が役 割。 S in AWS GCS in GCP

    ローカルファイルシステム PyPICloud Cache Storage
  29. pypicloudの仕組み(図解) Cacheはパッケージのメタ情報をファ イルから取り出してキャッシュする。 パッケージの検索や情報閲覧をする際 のKVSとして用いる。 RDB DynamoDB PyPICloud Cache Storage

  30. 設定ファイルの中身紹介 [app:main] ; PyPICloudに指定パッケージがないときどうするか pypi.fallback = cache ; everyone =

    誰でも、 authenticated = 認証済みユーザーのみ ; 読み取り(パッケージ情報の取得・検索など)の権限 pypi.default_read = everyone ; 書き込み(パッケージの登録など)の権限 pypi.default_write = authenticated ; キャッシュ関連の更新の権限 pypi.cache_update = everyone
  31. 設定ファイルの中身紹介 ; Storageに何を使うか pypi.storage = s3 storage.XXXXX = XXX ;

    Cacheに何を使うか pypi.db = dynamo db.region_name = ap-northeast-1 db.namespace = mypypicloud ; 管理者(パッケージをアップロードする人) auth.admins = admin user.admin = $6$rounds=20500$Nooooooooooooooooooooooooooooooooo
  32. 構成例 シンプルにローカルで動かしてみた り… PyPICloud Local sqlite3 Local filesystem

  33. 構成例 AWSを可能な限り使ってみたり… AppRunner DynamoDB S3

  34. 構成例 GCP上で動かしてみたり… PyPICloud Local sqlite3 GCS

  35. 構成例 特殊な基盤向けに、StorageもCacheを 自作してみたり PyPICloud Custom Cache Custom Storage

  36. PyPICloudの使い方あれこ れ

  37. 大まかに3種類の使い方を考える LAN内のPyPIプロキシサーバー 個人パッケージの公開用サーバー 組織用プライベートレジストリ

  38. LAN内のPyPIプロキシサーバー 構成 PyPICloud Client1 Client2 PyPI LAN内(AWS-VPC内)などのパターン Clientらは外部アクセスをせず、PyPICloudだけが通 信するイメージ

  39. LAN内のPyPIプロキシサーバー 設定例(抜粋) ; 自身が知らないパッケージはfallback先からダウンロードしてキャッシュする pypi.fallback = cache ; 上記キャッシュの更新を誰でも出来るようにする pypi.cache_update

    = everyone
  40. LAN内のPyPIプロキシサーバー 特徴とか ⭕ 通信経路の限定化が出来る ⭕ パッケージがLAN内に残るので、2台目以降が高速 ❌ PyPICloudである必要性がない ❌ ゴールデンイメージで十分

  41. 個人パッケージの公開用サーバー 構成 PyPICloud PyPI Client 外部公開されたWebアプリケーション (heroku, EC , docker

    services) Storage, Cacheにはローカル以外を使う(ことが良 い)
  42. 個人パッケージの公開用サーバー 設定例(抜粋) ; 自身が知らないパッケージはfallback先へリダイレクトする pypi.fallback = redirect ; (初期設定)認証済みユーザーによってパッケージをアップロードできる pypi.default_write

    = authenticated
  43. 個人パッケージの公開用サーバー 特徴とか ⭕ 自分の好きなパッケージを登録できる ⭕ 公開サービスなので、READMEの案内がしやすくな る ❌ 他人が利用する可能性があるため、サービス維持 を意識する必要がある

  44. 組織用プライベートレジストリ 構成 PyPICloud PyPI Client Webアプリケーション(heroku, EC , docker services)

    アクセス制限はあったほうが良い(なくても一応平 気) Storage, Cacheにはローカル以外を使う(ことが良 い)
  45. 組織用プライベートレジストリ 設定例(抜粋) ; 自身が知らないパッケージはfallback先へリダイレクトする pypi.fallback = redirect ; アクセス自体も認証状態であることを求める pypi.default_read

    = authenticated
  46. 組織用プライベートレジストリ 特徴とか ⭕ アクセス制限のあるPyPIを提供できるので、プライ ベートなパッケージを気兼ねなく登録できる ❌ 組織内で積極利用することが前提になり、きちんと したサービス維持を要求される

  47. PyPICloudを実際に使って みて

  48. PyPICloudを外部公開する 私が個人用に公開しているPyPICloud => https://pypi.attakei.net

  49. PyPICloudを外部公開する Readmeのインストールガイドが pip install --extra- index-url https://pypi.attakei.net/simple/ ~~ といっ たように、

    PyPICloudのURLを指定している状態で記述で きる。 As python packege ----------------- 1. Run ``pip install --extra-index-url https://pypi.attakei.net/simple/ errbot-slack-bo 2. | Import function to get plugin directory from ``errbot_slack_bolt_backend``. | example: ``from errbot_slack_bolt_backend import get_plugin_dir``
  50. 構成 StorageはGCS(標準提供) CacheはFirestore用の実装(自 作) ※ PyPICloudはCloud Runで動作 Firebase Hostingをフロントにし て強キャッシュ

    Firebase(CDN) Cloud Run(PyPICloud) Firestore(Cache) GCS(Storage) ※需要がわからないので、これ自体もPyPICloudで公開
  51. 運用しての感想 パッケージ管理 「とりあえずPyPICloud上で公開すればいい」と気持 ちがちょっと楽になる 自分以外に使っている人がいるっぽい コスト周り パッケージの数もそんなに多くなく、費用はほぼゼロ 間違ってバズったりする前にPyPIに引っ越すのでコス トはそんなに増えない…はず

  52. まとめ

  53. 振り返り PyPICloudの紹介を、使い方‧使い道の面で紹介しま した 一度構築するとシンプルな運用で、地下活動できます この地下活動で弾みをつけて、よりPyPIアップロード が捗ると良いですね

  54. おまけ AWS上に、サーバーレスなアーキテクチャでPyPICloudを 構築するAnsible playbookを作ってみています。 S DynamoDB App Runner ECR (※

    余裕があればデモ) https://github.com/attakei-lab/pypicloud-trials
  55. Thanks! ※ここからは参考リンクなどです

  56. Thanks! ※ここからは参考リンクなどです NIJIBOX Co., Ltd. https://nijibox.jp/ https://recruit.nijibox.jp/ https://postd.cc/