GCP ComputeEngineを一時的なLinuxサーバーとして使う手順

概略

処理負担が軽いけれども定期的に動かしておきたいPythonプログラムというのが、ちょこちょこ発生する。

ただ、そのために、手元のPCを起動しっぱなしにしたり、ライブラリの対応可否が厳しいRaspberry Piを使うのは面倒。

そこで、GCPを使うことにより解決した。GCP Compute Engineであればリージョンとマシンタイプ限定で無料枠があり、費用をかけずに解決できた。

手順を以下にまとめておく。

GCP ComputeEngineの立ち上げ

  • リージョン: Oregon(us-west1)
  • マシンタイプ: e2-micro
  • ストレージ: 標準永続ディスク(デフォルト10GB,30GB以内)
  • OS: Debian 10 Buster

補足: リージョンの選択

GCPのリージョンごとの応答速度をGCPingというウェブサイトで確認する。

GCP ComputeEngineの無料枠となる以下の3つのリージョンである。これらのうち、応答速度が一番速いところを選択したい。

Oregon(123ms),Iowa(160ms)となっていてOregonのレスポンスのほうが早いとわかる。そのため、今回はOregonのus-west1-bをリージョンとして選択した。

sshの接続ポートを変更

クラウドのマシンにて、sshを22番ポートで待受していると攻撃されやすい。そのため、22番ではない他のポート番号へ変更する。

sshd_configをviで開いて、[Port 22] と記載がある部分を [Port <1024-65535までの好きな番号>] へ変更すればよい。

sudo vi /etc/ssh/sshd_config

sshサーバーを再起動。

sudo service ssh restart

これ以降、ブラウザから接続するときには「ブラウザウィンドウでカスタムポートを開く」から指定したポート番号を入力しないと接続できなくなることに注意。

また、ファイアーウォールの設定にも留意すること。

ブラウザからのssh接続を許可するためには、IAP(35.235.240.0/20)からインスタンスへのsshアクセス(sshd_configで新たに設定したポート番号)を許可するようにファイアーウォールへ設定を追加する。

OSとPythonのバージョンを確認

cat /etc/debian_version 
# 10.11

python3 -V
# Python 3.7.3

pipのインストール

Debian 10 Buster にはpipが入っていなかったため、インストールする。

sudo apt update
sudo apt install python3-distutils
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
pip -V
# pip 22.0.4 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

プログラムファイルの転送

SSHの右横にある三角印を選択。

「ブラウザウィンドウで開く」を選択。

ターミナルが起動したら、設定ボタン(下の図で赤丸の部分)を選択して、「ファイルをアップロード」。

tar圧縮したプログラムファイルを選択してアップロードする。

ホームディレクトリにファイルがアップロードされているので、tarコマンドで展開する。

ライブラリをインストール

pipとrequirement.txt(必要なライブラリを記述したファイル)を使ってインストールする。

pip install -r requirements.txt

sshからログアウトしたあとでもプログラムを動かし続ける

基本パターン

nohup python3 <xxx.py> &

バリエーション

以下のようなシェルスクリプト(例: run.sh)を書いてもよい。

sudo poweroff を加えておくと、処理が完了したときにインスタンスを自動で停止することができる。

python3 test.py
sudo poweroff

自動実行のバリエーション1 nohup

nohup bash run.sh &

自動実行のバリエーション2 screen

# screenコマンドをインストール
sudo apt install screen
# コマンド実行
screen -dm -S test bash run.sh

-dm : デタッチされた状態で仮想端末を作成 -S : セッション名を指定 (任意)

screenコマンドのTIPS

  • screen -ls とすれば、セッションの一覧を見ることができる
  • screen -r test とすれば、testのセッションにAttachできる
  • ctrl + a -> d で今のセッションをDetachできる

まとめ

GCPを使って、一時的なプログラムを動作させるためのLinuxサーバーを構築することができた。

これで、手元のPCを起動しっぱなしにしたり、Raspberry Piを酷使する必要がなくなる。

ただ、pipのインストールを手動で実施したり、プログラムファイルを転送したりするのは、今風なやり方ではない。

1回構築して長年使い回す環境なら今回の方法でいいけれど、使い捨てで何度も構築する環境ならコンテナを用いて自動化したいところ。

その場合は、pipとGCPCUI入りのdockerイメージをダウンロードし、プログラムはGitHubから取ってきて起動する形が理想的。

参考

lsp.hatenablog.jp

lsp.hatenablog.jp

lsp.hatenablog.jp