自宅のインターネット速度が遅すぎて開発が捗らない件をGoogle Comupte Engineで解決する

TL;DR

  • 自宅のインターネット速度が遅すぎて開発が捗らない問題を解決する
  • Google Comupte Engineに開発環境を構築する
  • Cloud IAPを利用した安全なVMへの接続

自宅作業の課題

Covid19の影響により、自宅でテレワークされるITエンジニアのかたが増えたと思います。 突然の自宅作業で環境が整っていないことも多いのではないでしょうか。

私が特に困ったのは、自宅ネットワークのインターネット速度です。

  • 自宅インターネット速度が遅い・安定しない

    集合住宅では、インターネット回線を共用しているのが一般的で、インターネット速度は利用量が増えると帯域制限がかかるようです。 docker pullなど、大きなファイルをダウンロードするととても時間がかかって作業が進まないことがあります。 一時的とはいえ、一旦遅くなるとその日一日中遅かったり、いつ元に戻るのか予測もできません。

  • オフィスVPNの帯域制限

    VPNを利用されている企業をニュースなどでたまに目にします。

解決策

VPNを使わないソリューションとしてゼロトラストネットワークが注目されています。

Google CloudではCloud IAPが提供されています。

GCEでVMを立てて、IAP TCP転送を使ってSSH接続して開発をすればネットワークの速度問題が解決できるのではないかと考えました。

メリット

GCEに開発環境を映すと何がいいのか?

  • インターネット速度が速い・安定している

    Googleのネットワークを使うので高速に通信ができます。

  • 柔軟にリソースの変更ができる

    物理マシンのスペックを変更するのは容易ではありません。 ディスク増設、メモリー増設ならまだしも、CPUを交換するのはハードルが高いです。 こうしたスペックの変更がコンソールからポチポチするだけですぐに変更できます。

  • 自動化が容易

    ディスクのスナップショット作成が簡単です。また、Packer,Ansible,TerraformなどIaCツールを使えば自動化が容易です。

    • Ansibleでデフォルトでインストールするツール類を定義する
    • それをPackerでVM Imageを作る
    • Terraformでデプロイする

    こうすると、チームで同じ開発環境を共有できるメリットがあります。 開発環境のセットアップにかかる時間も短縮できます。

  • モニタリングが簡単

    GCEを起動したらCPU, Memoryなどのリソースがどれくらい使用されているかデフォルトで記録されます。

    Cloud Monitoring から閲覧できます。

    使用率に応じてリソースを増やすなど柔軟に対応できます。

    テレワークだとだと物理マシンのスペックアップをするのは手間がかかるものです。

  • 踏み台管理が不要

    Cloud IAPを使うと、踏み台を立てる必要がありません。 VPC上にPublicIPがついていないVMでもIAPを通して接続することができます。これは安全です。 一方、踏み台を立てると管理する必要性があります。 外部IPを取得してポート開放する必要があるので、攻撃のリスクがあります。こうした攻撃を検知できるよう監視して、セキュリティアップデートなどのメンテナンスも必要になると思います。 また、踏み台は1台だとSPOFとなり、障害が発生したりリソースを食いつぶすと使えなくなる可能性がありますので、踏み台1つにしても考えることは多いです。

    テレワークで作業者が分散している状況では、Cloud IAPは理想的だと思います。

デメリット

  • 使用量がかかる

    GCEインスタンス利用、ディスク利用、ネットワーク使用量がかかってきます。 ディスクは増設可能なので、最小構成で始めると良いでしょう。ネットワーク使用量は、使い方によりますが、開発するためであれば、キーストロークの送信やファイルの受信が主なものなのでそれほど気にならない程度に収まると思います。 GCEインスタンスは、作業を行う時間だけ起動して、夜間や土日は停止させると節約できます。 個々人の使い方によって変わりますので、こちらのGCP費用計算ツールを使うと見積もりが出せます。

  • インターネットにつながってないと利用できない

    当然ですが、インターネットが不通になることがある多いケースだと使えないと思います。 ただ、テレワークの時点でインターネットがつながっていないと開発に限らず、チャットやEmailもできないので、別問題とも言えます。

  • ローカルマシンに比べて遅延がある

    近いリージョンにGCEのVMを配置すれば、あまり気にならないと思います。 これも各人の環境によってかわるので実際に試してみるのが良いと思います。 個人的には実用レベルだと思います。

  • リモートマシン上のファイルを、Webサービスなどにアップロードしたいときに手間がかかる

    Webサービスを利用していると、ファイルをアップロードする場面があります。 このとき、リモートマシン上のファイルをアップロードしようとすると一度クライアント側にダウンロードしてからアップロードするという手間があります。 リモートマシン上でクラウドストレージサービス(Dropboxなど)をマウントしてクライアントマシンと共有すれば解決できそうな気がします。

  • OSが限られる

    Mac, Windowsでしか開発できないようなケースだと合わないです。 VMに利用できるOSは、クラウドプロバイダーが提供しているOSしか選択できませんので。

GCE開発環境構築手順

構成

  • Client PC
    • Ubuntu20.04
      • VSCode
        • SSH Remote Extension
      • gcloud
      • OpenSSH
  • GCP
    • GCE Instance
      • Ubuntu20.04
        • OpenSSH

GCE Instanceの作成

Cloud Shellから下記を実行します。

gcloud beta compute instances create my-instance --zone=asia-northeast1-b --image=ubuntu-2004-focal-v20210108 --image-project=ubuntu-os-cloud 

IAPの使用準備

Google Cloud公式ページの下記の手順を実施します

TCP 転送での IAP の使用

  • ファイアウォール ルールの作成
  • IAP を使用する権限を付与する

上記の手順のあとは、ClientPCからVS CodeからSSH接続したいので 他の TCP 接続のトンネリングを行います。

例えば下記のコマンドでGCE Instanceの22番ポートと、ローカルホストの10022番ポート(任意)をトンネルします。my-instanceの部分はGCEのNameを指定します。zoneはGCEのインスタンスを立てたzoneを指定します。

gcloud compute start-iap-tunnel my-instance 22 \
    --local-host-port=localhost:10022 \
    --zone=asia-northeast1-b

SSH接続

初回は、gcloudコマンド経由でSSH接続しておくと、自動的にSSH鍵が作られるのでそれをSSH接続で利用します。

gcloud compute ssh my-instance --zone=asia-northeast1-b

上記コマンドのあとに.sshフォルダを確認するとSSH鍵が作られていることが確認できます

ls .ssh/
config  google_compute_engine  google_compute_engine.pub

.ssh/configに10022番ポート向けにSSH接続設定をします。

# .ssh/config
Host iap
  HostName localhost
  Port 10022
  User yourname
  IdentityFile ~/.ssh/google_compute_engine

VSCode Remote接続

VS Codeを開くとRemote ExploreでiapというSSH Targetが確認できると思います。

これでSSH接続できれば完了です。

ssh target

VSCodeのSSH Remote Extensionは、リモートマシンのVSCodeのインストール作業不要です。VSCode Remoteから接続するだけでリモートマシン上のVSCodeが利用できるので非常に簡単です。

効果

今回、Cliでインターネット速度を測ることができるSPEEDTEST CLIというツールを利用させていただきました。

さすがに爆速!ですね。

爆速

SSHを通してVS Code上でソースコードの編集、実行など、大抵のことはできますから開発が捗ると思います。重たいDocker Imageでも気にせずPullすることが出来ます。手軽にGCEインスタンスを立ち上げて、作業が終わったらVMを終了するという運用をすればかなり費用を圧縮できると思います。

まとめ

今回は、自宅のインターネット速度が遅すぎて開発が捗らない件をGoogle Comupte Engineで解決すると題して、開発環境を改善しました。 Covid19の影響は、しばらく続きそうですから、社員のインターネット環境で課題を抱えている企業は、ローカルで開発をせずにクラウド上で開発環境を提供する企業が今後増えそうだと思います。 GithubCodespaceのようなリモート開発環境が整備されるとリモートマシン上で開発することが当たり前になるかも!?


クラウドアンドビルド合同会社ではGoogle Cloudを使ったインフラ構築、システム開発、働き方改革ソリューションを提供しています。ご気軽に、ご相談・お問い合わせください。