GCPのCompute EngineにPython実行環境を整える

#はじめに（この記事に書いていること）
データサイエンティスト？（自問）の私は、趣味でpythonの競馬予想プログラムを作成しています(自己紹介参照)。
プログラミングが未熟なせいもありますが、過去20年（現在約93万頭）のデータを用いてプログラムを実行すると、現在16GBの自前ローカルマシン（※）のメモリ使用率は99%になっており、将来の継続性に不安を感じるようになりました。
そうした中、**クラウドサービスの高性能コンピュータ**を用いることが出来れば、将来の不安を取り除くことが出来ることから、**Google Cloud Platform（GCP）**の**$300無料クレジット枠でpythonの実行環境を整える**ことにチャレンジしました。
なお、Google Colabの方が安価で手っ取り早いことが分かったのですが、そうしたコストパフォーマンスの記事は別に書きたいと思っています。
（※）ローカルマシンの環境:(OS)Windows10

この記事は以下の項目で整理しています。
- **VMインスタンスの作成**
- **ssh-keyの作成と登録およびwindowsマシンからVMへの接続**
- **WindowsマシンからVMへのファイルの送受信とAnacondaのインストール**
- **pythonの実行**
- **イメージの保存**

#VMインスタンスの作成
googleアカウントのGCP無料クレジット枠への登録は留意事項をよく読んで承認してください。
GCPへの登録が済みましたら、**Compute Engine**に入り、**インスタンスの作成**に進んでください。
![スクリーンショット 2021-05-03 140028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/b7028605-b297-3441-0558-26e3a6beab80.png)

次に設定は以下の通りです。

- インスタンス名
任意に命名します。

- リージョン：**us-west1、us-central1、us-east1　のいずれか**
（この３つのリージョンだとf1-microを無料クレジット枠が無くなっても無料で使えます。）

- マシンの構成: 8CPU以下のマシン　（無料クレジットで選択できる上限）
（https://cloud.google.com/compute/vm-instance-pricing?hl=ja#general-purpose_machine_type_family）を参照してください。
この**マシン構成はいつでも変更可能**です。
以下の図で選択しているマシンは（$0.10848/h 約12円/h）です。
![スクリーンショット 2021-05-03 141507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/b0e0fab0-4c17-d872-a625-898edee52384.png)

- ブートディスク
![ブーとディスク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/eec9396f-e354-df0c-8bde-cae781dd9a7d.png)
![ブーとディスク2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/544df2a7-ac7a-f668-ac40-8471b9ad4d3a.png)
　ここでの注意事項はこの容量を**途中で変更はできない**ので、30GBを選択しておくのが無難です。30GB以下なら無料クレジット後も無料です。
　マシンはデフォルトのDebian GNU/Linux 10　を選択します。
（**Linuxに不慣れな方も以下の通り実行すれば大丈夫！**）

以上を設定したら**作成**をクリックします。
「必ず**無料トライアルクレジットが適用されているか**を確認してください」
![スクリーンショット 2021-05-03 184843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/88a0c8a4-b672-1b94-6765-01572f118814.png)

#ssh-keyの作成と登録およびwindowsマシンからVMへの接続
windowsマシンからVMインスタンス（以下VM）にはsshという方式で接続します。
その際に、誰でも固有のVMを操れるようでは問題なので、ローカルマシンで暗号鍵を作成し、VMに登録します。

#### Puttyのインストール

暗号鍵は**PuTTyというアプリケーション**で作成するので、まずはググってPuTTyをインストールしてください。

#### ssh-keyの作成

PuTTygenを起動させ、
 1.generate
　マウスをクルクル動かしてください。暗号key(ssh-key)が作成されます。

 2.use-nameとパスワードの登録
　ここでは＜google.account＞で登録する例を示します。
　入力すると暗号keyの最後に=google.accountと追加されます。
  その下に任意のパスワードをconfirmとともに入力してください。
 3. 保存
 ローカルマシンの適当なディレクトリに任意の名前で拡張子**ppk**のファイルを保存します。
 4. keyのコピー
　この後にVMに設定するためにkey全体をコピーします。
![PuTTygen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/c5f893ee-9304-d6de-1dbb-9be2fd69f2c2.png)


#### VMにssh-keyの登録
1.鍵の登録
GCPのCompute EngineのページでVMを編集から、下の方へ進み、
以下のSSH鍵のところを編集します。その際、先ほどコピーしたものをペーストします。
するとgoogle.accountが反映されるのが確認できます。
![ssh_reg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/cf7c3a9e-6c13-5467-babc-1b9dc6e48a91.png)
2.IPアドレスのコピー
VMの外部IPアドレスは起動のたびに割り当てられます。
現在のIPアドレスを次の接続用にコピーしておいてください。

####SSH接続
先ほどインストールしたPuTTyのファミリーからPuttyを起動させます。
![puttyファミリー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/57b355d4-28db-ef0c-63ed-10ec3fbb6c7c.png)
1.IPアドレスの入力
google.account@コピーしたIPアドレス
![スクリーンショット 2021-05-03 203455.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/2226b0d9-fe24-b7e4-e05b-0cd033867ace.png)
2.SSH鍵のppkファイルを指定して接続
![スクリーンショット 2021-05-03 203555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/7cc51c9b-1187-c3eb-acd2-d38ddbda6f94.png)
3.パスワードを入力してログイン
下のようなshellが現れ、PuTTygenで２回入力したパスワードを入力してログインします。
成功したら次のようなShellが現れます。
![スクリーンショット 2021-05-03 144628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/0b724f5d-2379-e6ed-19d8-6cdda1bb7977.png)
(画像では次のステップで行うAnacondaインストーラーをアップロードしている)


#WindowsマシンからVMへのファイルの送受信とAnacondaのインストール
ファイルの送受信方法は色々ありますが、Guiで分かりやすい、WinSCPを用いる方法がおすすめです。ですので、WinSCPをダウンロード、インストールしてください。
####WinSCPの設定
転送プロトコルにSCPを選択し、IPアドレス、google.account、上と同じパスワードを入力し、設定をクリックします。
![スクリーンショット 2021-05-03 211934.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/c7cce744-8497-232a-30ac-869f9fd4d959.png)
次にppkファイルを指定して、ログインします。
成功するとVMインスタンスのhome/google.accountのディレクトリーが表示されます。
WinSCPはいろいろ試した中で、アップロードとダウンロードが**最速で最も簡易**にできると感じています。
![スクリーンショット 2021-05-03 213043.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/a0765048-87f9-708b-52d5-c077ffa4b6eb.png)
####Linux用のAnacondaインストーラーをSCPでVMにアップロード
https://www.anaconda.com/products/individual
からLinux用のインストーラー（拡張子sh）をローカルマシンにダウンロードします。
ダウンロード後、先ほど設定したWinSCPからhome/google.accountにアップロードします。
####Anacondaのインストール
PuTTyのShellにて以下のコマンド(bash以下）を入力してください。
$**　bash Anaconda3-2020.11-Linux-x86_64.sh**
(Anacondaのバージョンは適宜変更）
同意確認に入るので、しばらく[enter]を押してください（下にMOREと表示されます）
![スクリーンショット 2021-05-03 144748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/71fa9e24-33fa-0de4-67da-fbf1d02b803b.png)
３回ほど、Yes/Noの入力要求があるので、すべて**Yes**で入力します。
![スクリーンショット 2021-05-03 145204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/548fb0b4-0b5a-9886-4fcf-b9dc0f1472f4.png)

####VMインスタンスへの再ログイン
無事インストールが終了したら、Anaconda環境を起動させるためにVMを一度閉じて、再ログインします。
1. shellに**exit**と入力して閉じる。
2. PuTTyからVMに再度ログイン。
3. Anacondaの仮想環境が(base)でログインされる。
**(base)**が表示されたらAnacondaがインストールされた証です。
![スクリーンショット 2021-05-03 150040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/ead6dd38-6390-9e91-0d84-784344eb522f.png)
(PuTTyの外観（カラーやフォント）はchenge settingから変更できます。）

####任意の仮想環境の設定とactivate
1. condaのupdateをしておく。　  
$**conda update -n base -c defaults conda**
   と入力。

2. 任意の仮想環境設定（例は任意の仮想環境「qiita」でpython3.7を用いる）
$**conda create --name qiita python=3.7**

3. 任意の仮想環境に入る
$**conda activate qiita**

4. **(qiita)google.account@インスタンス名**　になっているのを確認

#Pythonの実行
ローカル環境で作成したpythonファイル（sample.py）をWinSCPでVMにアップロードし、
$**python3 sample.py**

と入力すると実行できるはずです。
ただし、必要なモジュールをinstallする必要がありますので、エラーが出るたびにインストールされていないモジュールをinstallします。
例えば　$**conda install pandas**

#イメージの保存
構築した環境はイメージで保存でき、次に作成するVMインスタンスに反映させることができます。
（このことを知らずに、しばらくVMインスタンスを削除した後、環境の再構築をしていました）
![スクリーンショット 2021-05-05 220713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328121/2338a6ea-f2d3-68ff-5768-89a368d4c0e0.png)
この後、jupyter notebookなども設定されると思いますが、そうした手間のかかった構築作業や作成したファイルも次のVMインスタンスに引き継ぐことができるので、環境が補強されるたびにイメージを保存しておくとよいです。
なお、イメージの保管にはギガベース当たり＄0.8の費用が発生するので、サイズの大きなファイルはローカルマシンにダウンロードしておき、削除したほうが賢明に思われます。
また、VMインスタンスは都度シャットダウンか削除しておかないと、起動中は料金が発生します。**無料クレジット枠は約30,000円分あり、承諾しない限りは課金モードに入らない**ので、知らずに課金されることはないと思いますが注意が必要です。
イメージファイルをうまく利用し、無駄な課金の抑制をすることで、健康なクラウドコンピューティングライフを楽しむことができると思います。

#あとがき
以上です。画像が入り乱れてしまっており、乱雑な記事で失礼します。
2021年のGWはクラウドコンピューティングのpython環境構築をマスターすることに明け暮れました。
記事はGCPですが、AWSでもほぼ同様にできることが分かりました。
記事にはしていないjupyter環境構築は、configファイルの編集とファイアーウォールの設定でつまずきましたが、いろいろな方のQiita記事の良いところを繋ぎ合わせて、達成出来ました。
将来の見晴らしがよくなり、非常に充実したGWになったのですが、家族には不評です・・・

皆様のクラウドコンピューティングライフを始める一助になればと思います。