【GoogleCloud】クラウド開発実行環境構築

# 背景
私はインフラ周りが苦手で、lazyな私は環境構築は最小限で済ませてきました。
最近勉強する中でGPUを使いたい場面が多くなってきており、騙し騙しやってましたが
過去にブログ記事を見ながらクラウド開発環境を構築した内容をまとめることにしました。

# 対象者
- クラウド開発環境構築が初めての方
- ずっとじゃないけど時々PCスペックが必要な処理が出てくる方

# 概要
今回はDockerを扱わず、クラウド上に開発マシンを作って簡単にアクセスするところまでをやってきます。
インスタンス設定も必要最低限のところの説明とします。
OS: MacOS
クラウドサービス： GoogleCloud
エディタ：VSCode

# 前提
- [GoogleCloud](https://cloud.google.com/)への登録（初回登録だと$300利用無料クーポンがついてきます）
- [VSCode](https://azure.microsoft.com/ja-jp/products/visual-studio-code)のインストール

# 作業
**プロジェクト構築**
GoogleCloudのトップ画面がから新しいプロジェクトを作成します。
私は”dev env”というプロジェクトを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/aaa7b7ed-56b9-fb18-5986-7b09d239371e.png)

**VMインスタンスの作成**
ハンバーガーマーク>Compute Engine>VMインスタンスを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/14fb7641-0571-6a75-3f27-92d4d9dca328.png)

名前、リージョンとゾーン、マシン構成を決めます。
今回は名前を”dev-env”, リージョンは”大阪”, ゾーンは”asia-northeast2-a”にします。
SeriesはE2とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/80e71a6b-3498-256c-f70a-08d0fa95f13f.png)

ここのプリセットでPCスペックを決めることができます。
基本はプリセットの中から選択しますが、カスタムで設定することも可能です。
今回はスペックが少し欲しいというモチベーションなので16vCPU 64GBメモリを選択します。
インスタンス利用が溢れた場合強制的に切られてしまいますが開発用途なので可用性ポリシーは”スポット”を選択します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/c2cefb0e-6075-a931-3866-4f35d5b802d2.png)

あとは一番下の”作成”を押下すればインスタンスが作成されます。
ここから課金が開始されますのでご認識ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/5f702b2e-67b3-fe91-30ba-342f05c691d9.png)

**認証鍵の作成**
VSCodeから接続するためのSSHの設定を行います。
ローカルでSSHの認証鍵を作成します。
1. ターミナルで`ssh-keygen -t ed25519 -C “{username}”` を実行します。{username}にはsshでログインするusernameを入れます。 
1. 保存場所が聞かれますが今回はデフォルトに保存しますのでそのままEnter
1. 次にパスコードですがこちらを設定すると鍵認証+パスコード認証となります。今回はスキップしたいのでそのままEnter

上記完了すると指定した保存先に2つのファイルが生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/cf86e978-31a2-42fb-cc75-04c0325ff8d4.png)

**公開鍵の登録**
再びGoogleCloudコンソール上で左上ハンバーガーマーク>Compute Engine>メタデータ>SSH認証鍵を選択し”SSH認証鍵を追加”を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/3ea8a32f-b26e-6f54-3e31-972b12374a29.png)

以下枠に先ほど作成した”id_ed25519.pub”のファイル内容をコピーして貼り付け、”保存”を押下して登録完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/47c99cac-3858-9fe9-5ae1-9f1c42b154c2.png)

**SSH configを作成**
sshの設定ファイルを作成します。保存先は~/.ssh
何かしらのテキストエディタでもVSCodeでも良いので以下のように記載します。

> Host gcp
    user {username}
    hostname xx.xxx.xxx.xxx
    identityfile ~/.ssh/id_ed25519
> 

Hostは適宜変更可能です。 userは認証鍵を作成した際に指定した{username}を入れます。
hostnameはインスタンスを立ち上げた際に割り振られた外部IPになります。

**VSCodeでSSH接続設定**
VSCode側でのSSH接続準備をします。
拡張機能メニューにて”Remote Development”と入力して検索を行い、インストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/bfc1bb6a-a43d-3116-1a27-e9cd69988c69.png)

インストール完了するとディスプレイアイコンのリモートエクスプローラが表示されるため選択します。
リモートエクスプローラを”リモート（トンネル/SSH）”で選択するとSSHは以下にgcpが表示されています。
こちらは先ほど作成したconfigから参照されています。　なのでこちらを選択すればSSH接続ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/6f94932d-eacc-494e-e9ea-d17087b284f3.png)

左下の緑網掛け部分が”SSH: gcp”となれば完了。これでクラウド開発環境接続できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/b83fc5a6-2452-509c-1410-3a58f59a126a.png)

### おまけ
現在のインスタンスでは外部IPが動的で停止するごとに変わってしまうのでsshのconfigを書き直す必要があります。
lazyな私は固定IPがいいと考えましたので設定加えました。
ハンバーガー>VPCネットワーク>IPアドレス>外部静的IPアドレスを予約するを選択して作成、この際に紐付け先のインスタンスも指定すればOKです。
こちらは別料金かかるのでお気をつけ下さい。（IP予約したけどインスタンスに紐づけてなかったらより一層料金とられるそうです。）

### まとめ
クラウド開発環境構築とSSH接続までの紹介でした。
ここから仮想環境作ったり、git cloneで持ってきたりすればインスタンスのスペック活用して実装が可能です。
今回GPUの説明は省略しましたが、マシンタイプ選択するときにGPUを選択すれば利用できます。ただ、GoogleCloudの場合、GPU使うのに枠拡大の申請が必要で今回は説明省略しました。
ただ、申請もすぐできて、approve mailも1hくらいで来たので大変ではなかったです。

### 参考文献
[【2023】爆速でGCPにリモートAI開発環境を構築する方法🔥 | TC3株式会社｜GIG INNOVATED.](https://www.tc3.co.jp/how-to-build-ai-environment-on-gcp/)

[VSCodeとGCPを使ってリモート開発マシン作ってみた](https://zenn.dev/noumi0k/articles/6ee90a47921cc6ee8743)

[Visual Studio CodeでSSH接続をしてみる](https://proclass.jp/blog/?p=7782)

[特定バージョンのCUDAのインストールおよびアップグレード手順 | ぺんぎんや](https://e-penguiner.com/install-upgrade-specific-cuda/)