はてなの金次郎

Pythonエンジニアの奮闘記。Python, Django, GitLab, Docker, AWS, k8s, etc...

AWS Secrets Managerから環境変数を取得するPyPIを公開しました

はじめに

PyPIデビューをしましたので、登録したライブラリとPyPI登録方法を紹介させていただきます。

aws-sm

github.com

Secrets Managerからデータベースの認証情報やAPIKeyなどのアプリケーションの環境変数を安全に取得することができます。

CircleCIでテスト・文法チェック・コードメトリクス計測のCI構築や、pyupでサードパーティ自動セキュリティアップデートの構築を行いました。

Secrets Managerの説明や利用するシチュエーションなどの詳細は別記事をご覧ください。

qiita.com

インストール

pipで簡単にインストールできます。

$ pip install aws-sm

使い方

SecretsManager クラスをインポートして、シークレット名と取得したい環境変数名を適切に設定することで環境変数を取得できます。

from aws_sm import SecretsManager

AWS_ACCESS_KEY_ID = ***************
AWS_SECRET_ACCESS_KEY = ***************

secretsmanager = SecretsManager('ap-northeast-1', AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
secrets = secretsmanager.get_secret_values('tutorials/MyFristTutorialSecret')

USER_NAME = secretsmanager.get_secret_value('USER_NAME', secrets)
PASSWORD = secretsmanager.get_secret_value('PASSWORD', secrets)

PyPI登録方法

Packaging Python Projects — Python Packaging User Guide

公式ドキュメントにPyPIの登録方法がまとまっているのでこの通りに行いましたが、私の環境では一点だけうまくいきませんでした。

それは、TestPyPIやPyPIへのアップロードで利用するtwineコマンドを利用する時です。

$ twine upload dist/*
-bash: twine: command not found

ドキュメント通りにコマンドを叩いたのですが、 twine: command not found と怒られてしまいました。 検索してみると同じような現象に遭遇している方がいらっしゃいました。

$ python3 -m twine upload dist/*

とすることで正常に動作しました。ちなみに、 -m-m mod : run library module as a script (terminates option list) というオプションです。

おわりに

OSSへの貢献は身につく力が大きいなと改めて感じました。はじめてのこととなると失敗も多かったですが、そのトライアンドエラーの工程が自分を大きく成長させてくれたと思います。 PyPIへの登録自体はドキュメントのおかげで比較的簡単にできましたので興味のある方はぜひ試してみてはいかがでしょうか。