【備忘録】Google Cloud Platformを使用してpython定期実行する設定
前回,Jenkinsでpythonの自動実行を出来るように設定しました.
しかし,私の個人環境ではサーバPCなどないため,ノートPCを常に接続していないと定期実行出来ないためあまり恩恵を受けられませんでした.
(Jenkinsの勉強にはなったので良かったですが)
そのため,クラウドサーバ上の定期実行が無料で行うことが出来るGoogle Cloud Platform(GCP)を使用することにしました.
GCPで定期実行出来るようになるまでの設定の仕方と苦戦したポイントを備忘録として残しておきたいと思います.
プラットフォームの選択
まず,GCPを使用するに至った経緯について説明します.世の中にはクラウドサーバプラットフォームも複数種類あり,どれを使用すれば良いのか迷ってしまいます.
良く使用されているクラウドプラットフォームのGoogle Cloud Platform,Amazon Web Service, Herokuの3種類ピックアップして比較します.
Platform | GCP | AWS | Heroku |
無料枠 | 200万回/月の呼び出し 40万GB秒のコンピューティング時間 |
100万回/月の呼び出し 40万GB秒のコンピューティング時間 |
1000時間/月のコンピューティング時間 |
対応言語 | Node.js、Python、Ruby Go、PHP、Java |
Java、Go、PowerShell Node.js、C#、Python、Ruby |
Ruby、Java、PHP、Python Node、Go、Scala、Clojure |
対応言語はHerokuが一番多いですね.個人的にはpythonが使えれば問題ないですが,対応言語が少ない場合は自然に使用するPFが決まってしまう可能性もありますね.
この中ではHeroku先駆者で,AWSとGCPの方が後発なのですが,AmazonとGoogleの資本に参入されてしまうと資本の力でシェアを取られてしまうことも多いので,AWSとGCPから選ぶことにしました.
AWSとGCPではGCPの方が無料枠が広く,AWSは少し複雑という記事を見たのでGCPを選択しました.
実際,アカウント開設から定期実行の設定完了まですぐ終える事ができました.
GCPの無料サーバー設定
ここから,GCPの設定について説明していきます.下記サイトを参考に設定を進めました.
まず,任意の名前で新しいプロジェクトを作成します.
そして,左上のナビゲーションメニューからCompute Engine > VMインスタンスを選択します.
VMインスタンスの生成を押すと使用するサーバーの設定画面に移ります.正しく設定できていない場合,使用料を払うことになるので注意してください.
名前 : free
(任意なので分かりやすい名前を設定してください)
リージョン : us-wesr1(オレゴン)
(リージョンは低CO2のエコマークが付いている地域ならどこでもOKです)
ゾーン : us-west1-b
(これもどこでも構いません)
シリーズ : E2
マシンタイプ : e2-micro
(e2-microに変更必須です)
ブートディスク : 新しい標準永続ディスク30GB
(デフォルトは10GBですが,30GBまで料金が変わらないので30GBに変更しましょう)
これらの設定をしても,月間予測の料金がいくらか発生することがありますが,マシンを回し続けた場合の料金なので安心してください.
こちら一日一回実行した時の実際の請求書なのですが,きちんと0円になっています.
リンクの設定ではsshの設定をしていますが,今回は使用しないので設定しませんでした.ssh接続を使用する方は設定リンクを参考に設定してください.
GCP python定期実行プログラム
次に実際に定期実行を行うプログラム部分について説明します.
まず,定期実行のスケジューリング設定を行います.
ナビゲーションメニューからPub/Subを選択し,任意の名前を設定してください.
次に,ナビゲーションメニューからCloud Schedulerを選択します.
タイムゾーンを日本に設定し,頻度をcron形式で入力します.
0 9 * * *では毎日9:00に実行される,
0 9 1 1 *では毎年1/1 9:00に実行される,
0 9 * * 1-51では月曜から金曜の9:00に実行されるといった形式になっています.
スケジュールジョブの定義が完了したら,実行内容を構成するを選択します.
ターゲットタイプでPub/Subを選択し,トピック選択で先ほど作成したトピックを選んでください.
ここまでで定期実行の設定完了になり,実行するプログラムの中身を作成していきます.
スケジュール設定が完了したら,ナビゲーションメニューからCloud Functionを選択します.
関数の作成を選択し,トリガーでCloud Pub/Subを選択し,トピックで先ほど生成した名前を選択します.
次に関数の編集画面に移ります.
pythonの定期実行を例に説明しますが,使用する言語が違う場合は各自対応してください.
デフォルトの関数を消して,main関数を作成しました.エントリポイントに設定している関数がmain関数になります.
また,注意点としてCloud Function上でエラーを発生させてしまった場合エラーコードは全て同じ以下のコードが出てしまいます.
$ Error: function terminated. Recommended action: inspect logs for termination reason. Additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#logging Details:
500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
そのため,一度自分のローカルで実行に成功したコードをコピーすることをお勧めします.
また,全コピーしてmainの引数なしにしてしまうとエラーになってしまうので気をつけてください.mainの引数は最初に作成されるデフォルトの関数を参考にしてください.
コードを書き終えたら,デプロイし,編集した関数を選択します.
テスト中のタブを選択し,[...]関数をテストするを選択してください.
出力部分でOKと出れば,エラーなしで関数が実行されたことになります.
また,printなどはログ部分に出力されます.
これで,毎日9時にHello, worldと出力されるpython定期実行プログラムの完成です!