インフラのコード化ツール Pulumi のインストール　for Windows


環境：Winodws 10 pro
python 3.9
VS-Code
私は、インフラのコード化ツールのTeraformを使い学んだばかりです。
インフラのコード化と言えばAWS のCloudFormationとかありますが、
これ以外でのインフラのコード化のできるツールを発見しました。

**pulumi**

pythonでＡＷＳのS3やEC2インスタンスが作れてしまう。
pythonの他に,Type,JavaScript,Go,C#などが使えます。

私はPythonでインフラのコード化をしたいのでPythonを使用します。
Pythonは3.6以上です。


関連記事を読むとLInuxやMacが多いのでWindowsベースでインストールから
AWSのＳ３パケット作成と確認まで行いました。

#１． Pulumiのアカウント作成
[Pumi](https://www.pulumi.com/)
サインアップができたら、NEW PROJECを作成します。

![pumi01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/4d892e2f-8f46-2039-cc3e-7fcd0f77b3af.jpeg)

「次へ」をクリックする。初回はこの下に必要な情報があるのでそこを入力する。
![vfdfdsrfesr.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/55b9a851-d913-836b-d677-72b75d783e81.jpeg)

私の場合はテストなのでほぼデフォルトです。
下のAWSのリージョンを東京リージョンに指定しています。
デフォルトでアメリカのリージョンです。
Create Projectをクリックしたら。

![pulumi02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/13434ea9-7128-bc91-d34b-65f03b7bf6e6.jpeg)
アカウントの部分をクリックします。
ユーザのホーム画面に移動
![pulumi03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/7ef7058f-36ba-da0a-f3f4-0d824e323481.jpeg)
Settingsをクリックします。

![pulumi04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928107/1f1014b1-0bb1-8325-f22f-9983e0ed7d0c.jpeg)


Create Tokenをクリックすると中央にアクセストークンが表示されます。これをコピーして控えておきます。

#2.Pulumiインストール
Chocolateyと言うパッケージマネージャーを使います。
インストールさえていない場合、以下のリンクが参考
[[Chocolatey]パッケージマネージャーの威力 (Windows)](https://pouhon.net/chocolatey-howtouse/5461/)
インストールしたら

````
choco install pulumi
````
インストール確認

```
 pulumi version

````
バージョンが表示されたら完了です。

#3.ＡＷＳ　ＩＡＭユーザー作成
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
後は、そのままＥｎｔｅｒ

#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)