環境:Winodws 10 pro
python 3.9
VS-Code
私は、インフラのコード化ツールのTeraformを使い学んだばかりです。
インフラのコード化と言えばAWS のCloudFormationとかありますが、
これ以外でのインフラのコード化のできるツールを発見しました。
pulumi
pythonでAWSのS3やEC2インスタンスが作れてしまう。
pythonの他に,Type,JavaScript,Go,C#などが使えます。
私はPythonでインフラのコード化をしたいのでPythonを使用します。
Pythonは3.6以上です。
関連記事を読むとLInuxやMacが多いのでWindowsベースでインストールから
AWSのS3パケット作成と確認まで行いました。
#1. Pulumiのアカウント作成
Pumi
サインアップができたら、NEW PROJECを作成します。
「次へ」をクリックする。初回はこの下に必要な情報があるのでそこを入力する。
私の場合はテストなのでほぼデフォルトです。
下のAWSのリージョンを東京リージョンに指定しています。
デフォルトでアメリカのリージョンです。
Create Projectをクリックしたら。
アカウントの部分をクリックします。
ユーザのホーム画面に移動
Settingsをクリックします。
Create Tokenをクリックすると中央にアクセストークンが表示されます。これをコピーして控えておきます。
#2.Pulumiインストール
Chocolateyと言うパッケージマネージャーを使います。
インストールさえていない場合、以下のリンクが参考
[Chocolatey]パッケージマネージャーの威力 (Windows)
インストールしたら
choco install pulumi
インストール確認
pulumi version
バージョンが表示されたら完了です。
#3.AWS IAMユーザー作成
AWSにログインしてIAMユーザを作成します。
Admin権限を付与して、
「アクセスキー - プログラムによるアクセスAWS API、CLI、SDK などの開発ツールの
アクセスキー IDと シークレットアクセスキーを有効にします。」
にチェックを入れます。
ユーザ名は任意です。
あとはデフォルトで進めて、アクセスキーとシークレットアクセスキーを控えておきます。
#4.AWS CLIの設定
Powershell
aws configure
AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID>
AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY>
Default region name [None]:
Default output format [None]:
```
控えておいたアクセスキーとシークレットアクセスキーを入力してEnter
後は、そのままEnter
#5.Pythonでのリソース作成とAWSでのリソース確認
プロジェクト用のディレクトリーを作成
Pulumiは、デフォルトでプロジェクト名としてディレクトリ名を使用します。
専用のディレクトリを作成してその下にプロジェクト名ディレクトリを作成します。
mkdir aws-python
作成したディレクトリに移動。
cd aws-python
次のコマンドを実行します。
#プロジェクトの初期化
PS C:\Users\User\projects\aws-python> pulumi new aws-python -y
仮想環境をセットアップする
py -3.9 -m venv teestvenv
.\venv\Scripts\activate
(venv) PS C:\Users\User\projects\aws-python>
となればOKです。
(venv) PS C:\Users\User\projects\aws-python> pip3 install -r requirements.txt
Requirement already satisfied: pulumi<4.0.0,>=3.0.0 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from -r requirements.txt (line 1)) (3.18.0)
Requirement already satisfied: dill>=0.3.0 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (0.3.4)
Requirement already satisfied: grpcio>=1.33.2 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (1.42.0)
Requirement already satisfied: six>=1.12.0 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (1.16.0)
Requirement already satisfied: protobuf>=3.6.0 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (3.19.1)
Requirement already satisfied: pyyaml>=5.3.1 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (6.0)
Requirement already satisfied: semver>=2.8.1 in c:\users\user\projects\iac-lab1\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (2.13.0)
(venv) PS C:\Users\User\projects\aws-python1>
エラーがなく
正常に初期化が完了すると以下のファイルが生成されます。
・ main.py
・ Requirements.txt
・ Pulumi.yaml
・ venv
main.pyファイルを見ると、次の1行のコードが書いてあります。
import pulumi
AWSパッケージをインストールする
(venv) PS C:\Users\User\projects\aws-python1>pip3 install pulumi-aws
Downloading pulumi_aws-4.29.0.tar.gz (3.8 MB)
|████████████████████████████████| 3.8 MB 6.8 MB/s
Collecting parver>=0.2.1
Using cached parver-0.3.1-py2.py3-none-any.whl (14 kB)
Collecting pulumi<4.0.0,>=3.0.0
Using cached pulumi-3.18.0-py2.py3-none-any.whl (168 kB)
Collecting semver>=2.8.1
Using cached semver-2.13.0-py2.py3-none-any.whl (12 kB)
Collecting attrs>=19.2
Using cached attrs-21.2.0-py2.py3-none-any.whl (53 kB)
Collecting six~=1.13
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting arpeggio~=1.7
Using cached Arpeggio-1.10.2-py2.py3-none-any.whl (54 kB)
Collecting pyyaml>=5.3.1
Using cached PyYAML-6.0-cp39-cp39-win_amd64.whl (151 kB)
Collecting dill>=0.3.0
Using cached dill-0.3.4-py2.py3-none-any.whl (86 kB)
Collecting protobuf>=3.6.0
Using cached protobuf-3.19.1-cp39-cp39-win_amd64.whl (895 kB)
Collecting grpcio>=1.33.2
Using cached grpcio-1.42.0-cp39-cp39-win_amd64.whl (3.3 MB)
Using legacy 'setup.py install' for pulumi-aws, since package 'wheel' is not installed.
Installing collected packages: six, semver, pyyaml, protobuf, grpcio, dill, attrs, arpeggio, pulumi, parver, pulumi-aws
Running setup.py install for pulumi-aws ... done
Successfully installed arpeggio-1.10.2 attrs-21.2.0 dill-0.3.4 grpcio-1.42.0 parver-0.3.1 protobuf-3.19.1 pulumi-3.18.0 pulumi-aws-4.29.0 pyyaml-6.0 semver-2.13.0 six-1.16.0
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the 'C:\Users\User\projects\iac-lab1\teestvenv\Scripts\python.exe -m pip install --upgrade pip' command.
main.pyに次の行をインポートします。
"""A Python Pulumi program"""
import pulumi
import pulumi_aws as aws
##AWSリージョンを設定する
(venv) PS C:\Users\User\projects\aws-python1>pulumi config set aws:region ap-northeast-1
#S3パケット作成
main.pyに以下を記述する。
import pulumi
import pulumi_aws as aws
bucket = aws.s3.Bucket("my-bucket")
デプロイします。
(venv) PS C:\Users\User\projects\aws-python1> pulumi up
Previewing update (dev)
View Live: https://app.pulumi.com/beaucarnes/aws-python1/dev/previews/827f9488-cc23-441f-946a-9852090ab0e3
Type Name Plan
- pulumi:pulumi:Stack iac-lab1-dev create
- └─ aws:s3:Bucket my-bucket create
Resources:
+ 2 to create
Do you want to perform this update? [Use arrows to move, enter to select, type to filter]
yes
no
details
矢印キーでyesを選択します。
Do you want to perform this update? yes
Updating (dev)
View Live: https://app.pulumi.com/アカウント名/aws-python1/dev/updates/1
Type Name Status
- pulumi:pulumi:Stack iac-lab1-dev created
- └─ aws:s3:Bucket my-bucket created
Resources:
+ 2 created
Duration: 10s
(venv) PS C:\Users\User\projects\aws-python1>
S3が生成されたので、AWSコンソール上で確認します。
![s3pucket.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/a82d4b1f-2ea8-b5f7-8782-3dae92f1635f.jpeg)
Windowsでは環境によってはエラーが起きます。
Chocolateyと言うパッケージマネージャーのインストールでPowerShellでエラーが発生しました。
エラーのたびに検索してググってきましたが。
Pumiのサイトを良く読むのが一番良かったです。
何度もサイト上の手順を読むのが良いです。
参考資料
[Pulumiを使ってみた【AWS】](https://qiita.com/ttkn9a/items/6fb71af2d265939184c3)
[プログラム の超個人的なメモ](https://dk521123.hatenablog.com/entry/2021/10/23/025230)
[Infrastructure as Codeのホープ、Pulumiを試す](https://blog.serverworks.co.jp/tech/2019/05/08/post-69751/)
[Pulumi のコンセプト - プログラミングモデル](https://tech.guitarrapc.com/entry/2019/12/02/011359)