AWS CDKのコンストラクトライブラリをPython向けに公開する手順のメモです。
最近 upsert-slr
というライブラリをPyPIにも公開したので、その時のコードを例に紹介します。
モチベーション
最近のサーベイによれば、CDKのPythonユーザーは23%ほどいるようです。
TS/JS + Pythonで97%を超えるため、npmとPyPIで利用できるようにすれば、ほとんどのユーザーをカバーできることになります。
PyPIへのリリース設定は以下の通りそれほど大変ではないため、やっておいて損はないかもしれません。
手順
1. .projenrc.ts
の編集
ライブラリの .projenrc.ts
で publishToPypi
プロパティを、以下を参考に指定します。
const project = new awscdk.AwsCdkConstructLibrary({ // 中略 publishToPypi: { distName: 'upsert-slr', module: 'upsert_slr', }, });
distName はPyPIにおけるパッケージ名になります。module はインポートするときの名前です。上記の例だと、以下のようになります。
# インストールコマンド pip install upsert-slr # Pythonコードからのインポート文 import * from upsert_slr
命名に関する慣例や制約はこちらが参考になります。PEP 8 – Style Guide for Python Code | peps.python.org
変更したら、projenを実行して変更を反映します。
yarn projen
2. PyPIのAPIトークンを取得
まずはPyPIのユーザー登録をしてください。PyPI · The Python Package Index
登録後 Account settings を開くと、APIトークンを作成するパネルに飛べると思います。
作成するとトークン文字列 (pypi-xxxx
) が得られるので、コピーしておきます。
もしコピーし忘れたなどでトークン文字列を失ったときは、削除して作り直しましょう。
3. GitHub actionsの環境変数を設定
CDKコンストラクトのProjenでは、Twineというツールを用いてPyPIにアクセスするようです。
このツールを使うため、GitHubリポジトリのSettings -> Security -> Secrets and variablesから以下の変数を作成します。こちらも参考になります。Using secrets in GitHub Actions - GitHub Docs
TWINE_USERNAME
:__token__
TWINE_PASSWORD
:2で生成したAPIトークンの文字列
これにて設定は完了です!
動作確認
動作確認をするため、適当な変更をしてmainブランチにpushしましょう。自動的にPyPIへのリリースプロセスが走るはずです。
作成されたパッケージは、PyPIのアカウント画面などから確認できます。
この時点で、APIトークンの権限範囲として該当のパッケージにしぼり込めるようになります。
セキュリティを更に強化したい場合は、範囲を制限した上でトークンを作り直し、TWINE_PASSWORD
変数を再設定すると良いでしょう。
10分程度待つと、Construct HubもPythonパッケージを認識してくれます。
それでは!
今月のもなちゃんです。今年2回目の産卵を始めました。