views4GCPのストレージサービスについてまとめてみた。Exp:190284普段はGCP専門のエンジニアをやっています。最近は個人的な活動としてGOとswiftでアプリ作ってます。G+TweetShareHatena注意この記事は2017年8月21日に更新されたもので、内容が古い可能性がありますのでご注意ください。scalingを徹底比較!」という記事を公開しました。scalingは大量データのバッチ処理に向いたスケーリング設定となります(表1参照)。scalingの違い同一プロジェクト内でそれぞれのスケーリング設定を利用したい場合は別々のサービス(モジュール)で定義する必要があるのですが、この2つの設定のインスタンスはそれぞれお互いを呼び出すことが可能です。今回のapps-gcpでは、デフォルトサービス(=サービス名を未指定でデプロイした場合のサービス)から別サービスのインスタンス(=任意のサービス名でデプロイした場合のサービス)をCronとTaskQueueから呼び出す方法について説明します(※2)。本記事はGAEのCronとTaskQueueを触れたことがあるユーザを対象としています。Cron・TaskQueueの基礎についてはそれぞれ以下のページを参考にしてください。Environmentを前提とした説明になります。目次Cronから任意サービスをキックするcron設定で任意のサービスを指定する動作検証をおこなうTaskQueueから任意サービスをキックするqueueの設定をおこなう動作検証をおこなうまとめCronから任意サービスをキックするCronサービスは、特定時刻または一定周期で定期的なスケジュールタスクを実行するための機能です。この機能によって、「1時間に1回」「毎週月曜日0:00」といった頻度・日時に任意のプログラムを実行することができます。cron設定で任意のサービスを指定するcronから特定サービスをキックするための設定は非常に簡単です。cron.yamlという設定ファイルにタスクのURLとスケジューリング、サービスを定義するだけです。上記は1分毎に「cron」サービスのURL「/hello」にGETリクエストを発行するための設定です。descriptionには定義したスケジューリング設定についての分かりやすい説明を書いておくと良いでしょう。以下の表の通り任意のサービスを指定する「target」は必須項目ではありません。「target」を指定しない場合は、デフォルト(※3)のサービスのURLがキックされます。タスクの概要を記載する。定義したスケジューリングで起動するURLを定義する。実行するスケジュールを定義する(※4)。起動対象のサービス(モジュール)を定義する。サービスを未設定でデプロイした場合は「デフォルト」サービスとなります。スケジュールのフォーマットについては以下を参考にしてください。https://cloud.google.com/appengine/docs/standard/python/config/cronref#schedule_format動作検証をおこなう一定時間毎にメールやバッチ処理を行いたいというのはシステム開発においてよくあるケースだと思います。前述した通り、cronを使えば定期的なスケジュールでタスクを実行することができます。今回行う検証は、cronを使って1分毎に任意のサービスのURLを呼び出しその内容をログに出力する、というシンプルな内容です。この検証で利用するコードは、そのまま前述した要件で再利用可能なコードになります。この検証で利用するプログラム(main.go)とGAEの設定ファイル(app.yaml)は以下の通りです。あとは前章で説明したcron.yamlを含めた3つのファイルで検証をおこないます(そのまま利用します)。scalingとします。scalingを徹底比較!!を参考にしてください。scalingを徹底比較!!尚、本検証を実際に試すためにはGCPプロジェクトの作成が必要です。GCPプロジェクトの作成方法については初心者のためのGCPプロジェクト始め方入門を参考にしてください。任意のフォルダを作成し「main.go」「app.yaml」「cron.yaml」を作成したフォルダ直下に移動します。cron(2)サービスのデプロイ以下のコマンド(※4)を実行しGAEアプリ(サービス)のデプロイをおこないます。以下のコマンドに対して任意のパラメータを指定してください。本記事ではサービス名を「cron」としてデプロイします。最後のコマンド引数「cron/」は1で作成したフォルダです。SDKに同梱されているコマンドです。SDKのインストール手順については以下をご確認ください。Engine]-[タスクキュー]を選択し、画面から「cronジョブ」を選択します。選択すると、デプロイしたcron設定が表示されます。「ステータス」はcronの実行状況を表し、これが「成功しました」になるとcronの実行が成功したことになります。cronが成功したことを確認したら次は4に進みます。(4)ログの確認Cloudコンソールにアクセスし左メニューから「ロギング」を選択します。ロギング画面に遷移後、プルダウンメニューから[GAEアプリケーション]-[<サービス名>]-[<バージョン>]を選択します。ログを見てみると、cronの設定通り、1分毎にログが出力されていることがわかります。このログの一覧からいずれかのログを開いてみましょう。world」(main.goから出力した文字列)が正常に出力されていることがわかります。以上でcronからサービスを呼び出す手順の説明は終了です。次はタスクキューからサービスをキックする方法について説明します。TaskQueueから任意サービスをキックするTaskQueueとは、ユーザリクエスト外部でタスクを非同期で実行するためのサービスです(※6)。scalingのbackendインスタンスを非同期で起動することができます。TaskQueueではPullとPushの2種類のQueueを選択することができます。Queueの方ですが、この2つのQueueの違いを知りたい場合は以下のリンクを参考にしてください。APIを使って、GCEからPullQueueをさわってみる!queueの設定をおこなうTaskQueueの設定もcronと同様に非常に簡単です。queue.yamlという設定ファイルに実行するキューの名前とrate、サービスを定義するだけです。今回の検証で利用するqueueの名前は「myqueue」とします。targetには、前章でデプロイした「cron」サービスを指定します。cronただし、cron.yamlの場合と同様に「target」は必須項目ではありません。「target」を指定しない場合は、デフォルト(※2)のサービスがターゲットになります。キューの名前を定義する。プログラムからTaskQueueを実行するときに指定するキューの名前となる。queueの速度を定義する(※6)。起動対象のサービス(モジュール)を定義する。タスクキューの処理速度の定義については以下を参考にしてください。https://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-push-queueshl=ja動作検証をおこなうそれでは実際に検証してみます。scaling)からキックしてみます。キックするサービスは既にデプロイ済みなので、今回デプロイするのはqueueを発行するためのデフォルトサービスのみです。scalingの設定項目についてはコチラを参考にしてください。今回デプロイするのは「main.go」「app.yaml」「queue.yaml」です。main.goでは「myqueue」(queue.yamlで定義したキュー)という名前のqueueを利用してタスクの発行を行っています。プログラム中の「/hello」は実際に実行されるURLです(cronの章でデプロイしたプログラムです)。任意のフォルダを作成し「main.go」「app.yaml」「queue.yaml」を作成したフォルダ直下に移動します。queue(2)デフォルトサービスのデプロイ以下のコマンドを実行しGAEアプリ(デフォルトサービス)のデプロイをおこないます。以下のコマンドに対して任意のパラメータを指定してください。「-M」オプションを利用せずにデプロイすれば、デフォルトサービスとしてデプロイされます。最後のコマンド引数「queue/」は1で作成したフォルダです。http://<GCPプロジェクトID>.appspot.com/queue(4)ログの確認プログラム実行後、Cloudコンソールのロギング画面からログの確認を行います。以下の通り、ログからもqueueが正常に実行されていることがわかります。一つ目の赤枠がqueueの発行元のURLで、2つ目の赤枠が実行されたqueueが出力したログとなります。以上でTaskQueueからサービスを呼び出す手順の説明は終了です。まとめCronやTaskQueueによってGAEのサービスを用途によって実行できることが理解できたと思います。scaling)にすることも可能です。CronやTaskQueueを利用すれば、要件に応じて柔軟にサービスを組み合わせることができます。2008年のサービス開始直後はいろいろな制限があったGAEですが、現在は多くの面で制限が緩和されより使いやすいサービスになっていると言えます。GAE、GCPにご興味もしくはご相談のある方は吉積情報、またはクラウドエースまでお問い合わせください。GAEに限らず、あらゆるGCPサービスのサポートが可能です。