1044
3 分 - Python の実行環境、開発環境をチームメンバー間で揃える。(非 Docker)
- Mac のグローバルで Python のバージョンを切り替えずに実行できる。
- VSCode でデバッグ実行できる。
前提条件
- macOS
- 使いたい Python のバージョンが Mac にインストールされている。(dmg、Homebrew) ※この記事で使う pipenv は pyenv と一緒に使うことができるようだが未検証。
- VSCode に拡張機能 Python(ms-python.python)がインストールされている。
使うツール
pip
- Python パッケージのインストールなどを行うユーティリティで、Python 3.4 以降には、標準で付属している。
pipenv
- 手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理する。また Pipenv は、いかなるときも重要な Pipfile.lock を生成し、これを利用しビルドが常に同じ結果になるようにする。
環境構築
- Python のソースコードを格納するディレクトリを作る。
1
2
| mkdir myproject
cd myproject
|
- ソースコードのディレクトリに仮想環境を作るために環境変数を設定する。
1
| export PIPENV_VENV_IN_PROJECT=1
|
- Python のバージョンを指定して pipenv で初期化する。
- このコマンドで作成される
.venv
ディレクトリはバージョン管理に含めない。(チームメンバーがpipenv sync
すれば作成されるため)
- Python のバージョンを 3.X.Y のようにパッチバージョンまで指定する場合は Pipfile を書き換える必要がある。
# Pipfile
[requires]
python_version = "3.8.3"
1
2
3
4
5
| # 作成した仮想環境のshellに切り替える
pipenv shell
# Pythonのバージョンを確認する
python --version
|
- VSCode が pipenv で作った仮想環境を Python 拡張機能とデバッグ実行で使うために
.vscode/settings.json
を作る。※バージョン管理に含めてチームで共有する。
1
2
3
4
| # .vscode/settings.json
{
"python.pythonPath": ".venv/bin/python"
}
|
- エントリーポイントになる
main.py
を作成する。(ファイル名は任意)
1
2
| msg = "Hello World!"
print(msg)
|
- VSCode でデバッグ実行したときに実行されるファイルを定義するために
.vscode/launch.json
を作る。※バージョン管理に含めてチームで共有する。
1
2
3
4
5
6
7
8
9
10
11
12
13
| //.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: main.py",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"console": "internalConsole"
}
]
}
|
チームメンバーが上記のソースコードを取得した後に行うこと
Pipfile.lock
で指定されたバージョンのパッケージをインストールするためにinstall
ではなくsync
を使う。
GitHub リポジトリ
参考
AWS
619
2 分 - AWS CLI で AWS にアクセスする際に AssumeRole で別の AWS アカウントの IAM ロールを引き受け、更に MFA でログインする。
前提条件
- AWS CLI をインストールしていること。
- IAM に AssumeRole の権限が付与されている。
- MFA の設定が済んでいる。
事前に確認しておく情報
- アクセスキー
- シークレットアクセスキー
- AssumeRole で引き受けるロール ARN
- MFA の ARN
初期設定
- AWS のアクセスキーとシークレットアクセスキーを設定する。
1
2
3
4
5
| $ aws configure
AWS Access Key ID [None]:<アクセスキー>
AWS Secret Access Key [None]:<シークレットアクセスキー>
Default region name [None]:ap-northeast-1
Default output format [None]:text
|
- 上記のコマンドを実行すると入力した情報が保存されたファイルが作成される。
1
2
3
| ~/.aws
├ config
└ credentials
|
~/.aws/config
を下記のように変更する。- profile_name:任意の名前。CLI を開くたびに入力するため入力しやすいものがおすすめ。
- role_arn:AssumeRole するロール ARN。
- mfa_serial:MFA デバイスの ARN。
- source_profile:スイッチロール元のプロファイル名。
[default]
region = ap-northeast-1
output = text
[profile profile_name]
role_arn = arn:aws:iam::yyyyyyyyyyyy:role/zzz
mfa_serial = arn:aws:iam::xxxxxxxxxxxx:mfa/name
region = ap-northeast-1
source_profile = default
CLI で AssumeRole できるか確認
1
2
3
| $ export AWS_DEFAULT_PROFILE=上記で設定したprofile_name
$ aws sts get-caller-identity
Enter MFA code for arn:aws:iam::XXXXXXXXXXXX:mfa/AAAA:<MFAコードを入力する>
|
- MFA コード入力後に表示される AccoutID がスイッチロール先の AWS アカウントになっていれば成功。
参考
【小ネタ】AWS CLI でスイッチロールして作業を行うための設定をやってみた