maybe daily dev notes

私の開発日誌

CDK Tips: 自作コンストラクトをPython向けに公開する

AWS CDK Tipsシリーズです。

AWS CDKのコンストラクトライブラリPython向けに公開する手順のメモです。 最近 upsert-slr というライブラリをPyPIにも公開したので、その時のコードを例に紹介します。

モチベーション

最近のサーベイによれば、CDKのPythonユーザーは23%ほどいるようです。

TS/JS + Pythonで97%を超えるため、npmとPyPIで利用できるようにすれば、ほとんどのユーザーをカバーできることになります。

PyPIへのリリース設定は以下の通りそれほど大変ではないため、やっておいて損はないかもしれません。

手順

1. .projenrc.ts の編集

ライブラリの .projenrc.tspublishToPypi プロパティを、以下を参考に指定します。

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. PyPIAPIトークンを取得

まずは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回目の産卵を始めました。