もっと簡単にGoogleCloudPlatformを使う

Posted: , Modified:   GoogleCloudPlatform Docker Go Qiita

本稿は Qiita 投稿記事 のバックアップです.

はじめに

Google Cloud Platform で単発処理を行う Docker コンテナ は,Cloud Platform を使うための事前・事後処理を助けてくれるものの,Docker の知識や Cloud Platform でのインスタンス管理の知識は必要だった.そこで,もっと簡単に Google Cloud Platform を使うためのコマンドラインツール roadieを作成した.

このツールはローカル端末で動作し,インスタンスの作成,ソースコードの配置,実行,そして計算結果の管理まで行う.クラウドに関する知識はほとんど不要でクラウドが利用可能になると思う.

インストールと事前準備

まず Google Cloud Platform が利用可能な状態になっている必要がある.また,ローカル端末から Google Cloud Platform にアクセスするために,Cloud SDK が必要になる.別途インストールした後,初期化を行ってください.gcloud auth list を実行してみて,Credentialed accounts にアカウントが表示されれば初期化済みである.

roadie のインストールは,コンパイル済みバイナリ をパスの通った所へ置くか,Go言語が設定済みの場合は

$ go get github.com/jkawamoto/roadie

にて,Mac ユーザで Homebrew を使っている場合は,

$ brew tap jkawamoto/roadie
$ brew install roadie

によって行える.

インストール後,クラウドで実行したいソースコードのあるディレクトリで,

$ roadie init

を実行する.Google Cloud Platform に登録してある Project ID とデータ保存先のバケット名を聞かれるので適宜適宜入力する.バケット名は,特にこだわりが無ければ Project ID と同じで良い.なお,設定可能な Project ID 一覧は,ここから取得できる.

クラウドで実行するスクリプト

roadie では,Docker コンテナの時と同様に,クラウド上で実行する手順をまとめた YAML スクリプトファイルを使用する.

例えば,

場合,スクリプトファイルは,

apt:
  - unrar
data:
  - http://mmnet.iis.sinica.edu.tw/dl/wowah/wowah.rar
run:
  - unrar x -r wowah.rar
  - python analyze.py WoWAH
upload:
  - "*.png"

となる.(ちなみにこれは,オンラインゲームプレイデータから不正ユーザを見つける研究の例.)

スクリプトファイルの

なお,uploadセクションでは,上記の例からも分かる通りワイルドカードが使用できる.なお,実行したプログラムが標準出力に書き出したメッセージは,stdout{i}.txt{i} は run セクションの何番目に記載されたコメントかを表す番号.最初のコマンドは 0)として自動で保存される.

apt, data, upload セクションは必要無ければ省略して良い.また,apt でインストール可能なパッケージ以外のパッケージをインストールする必要がある場合,runセクションに記述すれば良い.スクリプトファイルに関する詳細はドキュメントを参照のこと.

実行

作成した script.yml をクラウドで実行するには,

$ roadie run —local . —name instance-1 script.yml

を実行する.--local フラッグでソースコードのあるローカル端末のディレクトリ(この例ではカレントディレクトリ)を指定する. —name フラッグは後で実行結果を取得するために必要な名前を設定する.なお,省略した場合は現在の時刻をもとにして適当に設定される.

—local フラッグを使うと,指定されたディレクトリにあるファイルをアップロードする.過去に実行したソースコードを再利用したい場合は,--local の代わりに—source フラッグを使い再利用したいインスタンスの名前を渡す.例えば,

$ roadie run —source instance-1 —name instance-2 script.yml

とすれば,ソースコードのアップロード時間を短縮できる.

実行状況は,roadie status コマンドで確認できる.ただし,roadie run を実行してからステータス画面に反映されるまで少し時間がかかる場合がある.

実行結果の取得

ステータスが end になっていれば,実行結果にアクセスできる.

$ roadie result list instance-1

で,instance-1 という名前で実行したプログラムの出力を確認できる.upload セクションを省略した場合でも,stdout{i}.txt は見つかるはず.

実行結果をローカル端末にコピーするためには,roadie result get コマンドを使用する.例えば,

$ roadie result get instance-1 "*.png" -o ./result

を実行すると,*.png にマッチするファイルを ./result ディレクトリにコピーする.なお,-o フラッグを省略した場合はカレントディレクトリにコピーされる.

データファイルのアップロード

先ほどの例では,Web で配布されているデータファイルを利用したが,自前で用意したファイルを利用する場合も多い.roadie data put コマンドでは,ローカル端末にあるファイルをアップロードすることができる.

例えば,somedata.json をアップロードする場合,

$ roadie data put somedata.json

を実行する.アップロードが完了すると data セクションで利用可能な gs:// で始まる URL が表示される.また,roadie data list —url で過去にアップロードしたファイルの URL を確認することができる.

実行時のログ

ログの取得には,roadie log コマンドを使う.名前が instance-1 の場合,

$ roadie log instance-1 —f

-f フラッグを付けると,ctrl-c で終了するまでログを出力する.このログには,apt や data セクションで指定したパッケージのインストールやファイルのダウンロードログに加え,run セクションに記載した各コマンドが標準エラー出力に書き出したメッセージも含まれる.

そのため,実行時に取得したい情報は標準エラー出力,実行後にファイルとして得たい情報は標準出力と分けて出力する必要がある.

まとめ

もっと簡単にGoogleCloudPlatformを使うためのコマンドラインツール roadie を紹介した.ここに記した使い方は最も簡単な例の一つで,それ以外にもサブコマンドやオプションはたくさんある.より詳しいドキュメントは ここ を参照のこと.また,--help フラッグで各コマンドのオプションの説明を見ることができる.