SE吾郎の備忘録

24歳SEの勉強用の備忘録です.皆様の役にも立てれば幸いです.

【備忘録】Google Cloud Platformを使用してpython定期実行する設定

前回,Jenkinsでpythonの自動実行を出来るように設定しました.

segoro.hatenablog.com

しかし,私の個人環境ではサーバPCなどないため,ノートPCを常に接続していないと定期実行出来ないためあまり恩恵を受けられませんでした.

(Jenkinsの勉強にはなったので良かったですが)

そのため,クラウドサーバ上の定期実行が無料で行うことが出来るGoogle Cloud Platform(GCP)を使用することにしました.

GCPで定期実行出来るようになるまでの設定の仕方と苦戦したポイントを備忘録として残しておきたいと思います.

  • GCPの設定で苦戦している人
  • プログラムの定期実行をしたい人
  • どのクラウドサーバプラットフォームを使えば良いか分からない人

プラットフォームの選択

まず,GCPを使用するに至った経緯について説明します.世の中にはクラウドサーバプラットフォームも複数種類あり,どれを使用すれば良いのか迷ってしまいます.

良く使用されているクラウドプラットフォームのGoogle Cloud Platform,Amazon Web Service, Herokuの3種類ピックアップして比較します.

Platform GCP AWS Heroku
無料枠 200万回/月の呼び出し
40万GB秒のコンピューティング時間
100万回/月の呼び出し
40万GB秒のコンピューティング時間
1000時間/月のコンピューティング時間
対応言語 Node.js、PythonRuby
Go、PHPJava
Java、Go、PowerShell
Node.js、C#PythonRuby
RubyJavaPHPPython
Node、Go、ScalaClojure

対応言語はHerokuが一番多いですね.個人的にはpythonが使えれば問題ないですが,対応言語が少ない場合は自然に使用するPFが決まってしまう可能性もありますね.

この中ではHeroku先駆者で,AWSGCPの方が後発なのですが,AmazonGoogleの資本に参入されてしまうと資本の力でシェアを取られてしまうことも多いので,AWSGCPから選ぶことにしました.

AWSGCPではGCPの方が無料枠が広く,AWSは少し複雑という記事を見たのでGCPを選択しました.

実際,アカウント開設から定期実行の設定完了まですぐ終える事ができました.

 

GCPの無料サーバー設定

ここから,GCPの設定について説明していきます.下記サイトを参考に設定を進めました.

GCP初期設定参考リンク

まず,任意の名前で新しいプロジェクトを作成します.

そして,左上のナビゲーションメニューからCompute Engine > VMインスタンスを選択します.

VMインスタンスの生成を押すと使用するサーバーの設定画面に移ります.正しく設定できていない場合,使用料を払うことになるので注意してください.

f:id:IPOgoro:20211204203032p:plain

f:id:IPOgoro:20211204203038p:plain

名前 : free

    (任意なので分かりやすい名前を設定してください)

リージョン : us-wesr1(オレゴン)

    (リージョンは低CO2のエコマークが付いている地域ならどこでもOKです)

ゾーン : us-west1-b

     (これもどこでも構いません)

シリーズ : E2

マシンタイプ : e2-micro

    (e2-microに変更必須です)

ブートディスク : 新しい標準永続ディスク30GB

    (デフォルトは10GBですが,30GBまで料金が変わらないので30GBに変更しましょう)

 

これらの設定をしても,月間予測の料金がいくらか発生することがありますが,マシンを回し続けた場合の料金なので安心してください.

こちら一日一回実行した時の実際の請求書なのですが,きちんと0円になっています.

f:id:IPOgoro:20211204203352p:plain

リンクの設定ではsshの設定をしていますが,今回は使用しないので設定しませんでした.ssh接続を使用する方は設定リンクを参考に設定してください.

 

GCP python定期実行プログラム

次に実際に定期実行を行うプログラム部分について説明します.

まず,定期実行のスケジューリング設定を行います.

ナビゲーションメニューからPub/Subを選択し,任意の名前を設定してください.

次に,ナビゲーションメニューからCloud Schedulerを選択します.

f:id:IPOgoro:20211204211309p:plain

タイムゾーンを日本に設定し,頻度をcron形式で入力します.

0 9 * * *では毎日9:00に実行される,

0 9 1 1 *では毎年1/1 9:00に実行される,

0 9 * * 1-51では月曜から金曜の9:00に実行されるといった形式になっています.

 

スケジュールジョブの定義が完了したら,実行内容を構成するを選択します.

f:id:IPOgoro:20211204213650p:plain

ターゲットタイプでPub/Subを選択し,トピック選択で先ほど作成したトピックを選んでください.

ここまでで定期実行の設定完了になり,実行するプログラムの中身を作成していきます.

 

スケジュール設定が完了したら,ナビゲーションメニューからCloud Functionを選択します.

関数の作成を選択し,トリガーでCloud Pub/Subを選択し,トピックで先ほど生成した名前を選択します.

次に関数の編集画面に移ります.

pythonの定期実行を例に説明しますが,使用する言語が違う場合は各自対応してください.

f:id:IPOgoro:20211204215857p:plain

デフォルトの関数を消して,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.

f:id:IPOgoro:20211204220449p:plain

そのため,一度自分のローカルで実行に成功したコードをコピーすることをお勧めします.

また,全コピーしてmainの引数なしにしてしまうとエラーになってしまうので気をつけてください.mainの引数は最初に作成されるデフォルトの関数を参考にしてください.

 

コードを書き終えたら,デプロイし,編集した関数を選択します.

テスト中のタブを選択し,[...]関数をテストするを選択してください.

f:id:IPOgoro:20211204221513p:plain

出力部分でOKと出れば,エラーなしで関数が実行されたことになります.

また,printなどはログ部分に出力されます.

これで,毎日9時にHello, worldと出力されるpython定期実行プログラムの完成です!

【備忘録】JenkinsとGitHubの設定で接続出来なかった話

 

segoro.hatenablog.com

 

こちらで設定を行っていたのですが,なぜか接続でエラーが出てしまいます.
URL入力でこのようなエラーが出てしまいました.

リポジトリ : Command "git ls-remote -h -- git@github.com:username HEAD" returned status code 128:
stdout:
stderr: ERROR: Repository not found.
fatal: Could not read from remote repository.
ターミナルから接続できるはずなのでsshやURLは間違っていないはずなのに...
実はビルド出来るんじゃないかと思い,ビルドしてみてもエラーです...
Please make sure you have the correct access rights
and the repository exists.
との接続に失敗しました。
ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.
Finished: FAILURE

エラーコードでググっても出てこない...
と悩んでいたのですが,調べて見るとこのようなGitの変更が見つかりました.
変更概要のリンク
ざっくりまとめると,Gitのデフォルトのブランチ名がmasterからmainに変わっていたみたいです.
branch名はデフォルトでmasterが入力されていたので問題ないものだと思い込んでいました.
今までもgit push origin masterでgitの更新してたのに...
しばらく触っていないうちに色々変更があるんですね.
変更の背景には人権問題があり,master/slaveの表現は良くないので,mainに変更されたみたいですね.
近年の人権や差別に関してはやりすぎのような気もしますが...
人権問題とIT用語は関係ないやろ...

ということで,ビルド設定のmasterをmainに変更したところビルドエラーが解消しました.
皆さんもこんなしょうもないところで躓かないように力になれたら幸いです.

【備忘録】JenkinsとGitHubの連携設定

今回,JenkinsとGitHubを連携させて自動ビルドを行う環境を構築したので方法を備忘録として残しておきたいと思います.
この記事は次の方におすすめです.
  • GitHubのコードをJenkisでビルドしたい方
  • JenkinsとGitHubのアカウント作成済みの方

プライバシーポリシー

 

当ブログにおける個人情報の取扱いについて、以下のとおりにプライバシーポリシーを定めます。 

<strong>運営者情報</strong>
運営者:SE吾郎
ブログURL:https://ipocalender.hatenablog.com/
====A


<strong>個人情報の利用目的</strong>
当ブログでは、メールでのお問い合わせやコメントの際に、お名前(ハンドルネーム)・メールアドレス等の個人情報をご登録いただく場合があります。 これらの個人情報は、質問に対する回答や必要な情報をご連絡するために利用し、それ以外の目的では利用しません。 

<strong>個人情報の第三者への開示</strong>
個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。 ・本人のご了解がある場合 ・法令等への協力のため、開示が必要となる場合

<strong>個人情報の開示・訂正・追加・削除・利用停止</strong>
個人情報の開示・訂正・追加・削除・利用停止をご希望の場合には、ご本人であることを確認したうえで、速やかに対応致します。

<strong>Cookieについて</strong>
当ブログでは、一部のコンテンツにおいてCookieを利用しています。 Cookieとは、webコンテンツへのアクセスに関する情報であり、お名前・メールアドレス・住所・電話番号は含まれません。 また、お使いのブラウザ設定からCookieを無効にすることが可能です。
<strong>広告の配信について</strong>
当サイトは第三者配信の広告サービス(Google AdsenseAmazon アソシエイト、TCS Affiliate)を利用しています。(予定) 広告配信事業者は、過去にアクセスしたサイトの情報に基づきユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 また、第三者がコンテンツおよび宣伝を提供し、訪問者から直接情報を収集し、訪問者のブラウザにCookie(クッキー)を設定したりこれを認識したりする場合があります。 なお、Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細はポリシーと規約にてご確認ください。

<strong>アクセス解析ツールについて</strong>
当ブログでは、Google Inc.が提供するアクセス解析ツール「Googleアナリティクス」を利用しています。 Googleアナリティクスは、トラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。この機能はCookieを無効にすることで収集を拒否することが出来ます。 Googleアナリティクスの詳細は「Googleアナリティクス利用規約」をご覧ください。

<strong>当ブログへのコメントについて</strong>
当ブログでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。 これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。 また、以下の内容を含むコメントは運営者の裁量によって削除することがあります。 ・特定の自然人または法人を誹謗し、中傷するもの ・極度にわいせつな内容を含むもの ・禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの ・その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの

<strong>著作権について</strong>
当ブログで掲載している画像の著作権・肖像権等は各権利所有者に帰属します。権利を侵害する目的ではありません。 記事の内容や掲載画像等に問題がある場合、各権利所有者様本人が直接メールでご連絡下さい。本人確認後、対応致します。 また、当ブログのコンテンツ(記事・画像・その他プログラム)について、許可なく転載することを禁じます。引用の際は、当ブログへのリンクを掲載するとともに、転載であることを明記してください。 

<strong>免責事項</strong>
当ブログからリンクやバナーなどによって他のサイトに移動した場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。 当ブログのコンテンツについて、可能な限り正確な情報を掲載するよう努めていますが、誤情報が入り込んだり、情報が古くなっている場合があります。当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。 

<strong>プライバシーポリシーの変更について</strong>
当ブログは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。 修正された最新のプライバシーポリシーは常に本ページにて開示されます。 
初出掲載:2020年11月1日