2017/07/23

GCS のバケット作成とライフサイクル管理設定

前回までに、Google Compute Engine (GCE) の VM インスンタンス上で Calibre を使って記事のダウンロードができるまでを確認した。

今回はダウンロードした mobi ファイルを Google Cloud Storage (GCS) にコピーする処理の準備。

まずは GCS 上にダウンロードした mobi ファイルをコピーして一時的に保管しておくバケットを作成する。

そもそも、なぜ GCS にファイルを一時保管するのか、GCE の VM の上に置いておけばいいじゃないかと思うかもしれない。GCE の VM にデータを置いておく場合、VM インスタンスに付随する永続ディスク上に配置することになる。このディスクのデータにアクセスするには、当然 VM が起動している必要があるが、VM が起動している間は課金対象だ。それに比べると、GCS の料金ははるかに安い。

VM の本来の目的は、何かしらの計算処理をさせることなので、計算をしていない時間、つまりアイドル時間は起動しておくのが無駄でしかない。よって、calibre で mobi ファイルの作成を行う時間だけ起動して、それ以外の時間は VM を止めるのが正しい。これなら、プリエンプティブ VM を使っても最大 24 時間という制限も引っかからなければ、他に持って行かれて VM が停止するリスクも減る。そして価格が安く済むというのも最大のメリットだ。

そんなわけで、calibre で mobi ファイルを作成する時間だけ VM を起動し、作成した mobi ファイルは GCS に保管して VM 自体は停止する、という処理になる。GCS をデータの保管置き場とする理由は VM の稼働状況に依存させないためだ。

さて、GCS のバケットはシンプルに Google Cloud Console (console.cloud.google.com) から行う。コンソール左のメニューの中からストレージセクションにある「Storage」を開き 、「バケットの作成」から作成する。

バケットはグローバルでユニークな名前にする必要がある。アカウントやプロジェクトの中ではなく、世界中のユーザーに共通して、単一の名前にする必要がある。また、multi regional にする必要はないので、Regional にして、かつ GCE の VM インスタンスを同じリージョンを選ぶのをお勧めする。

バケットを作成したら、今度はそのバケットに「ライフサイクル」設定をする。

GCS はバケット上に配置するファイルのサイズによって課金される。今回のような用途で、記事をアーカイブして取っておきたいと思わない限り、kindle に送信したあとは mobi ファイルは不要だ。不具合が発生した時のデバッグ用途として、念のため3日間程度は残すとして、それ以上経過したファイルは削除して問題ない。

VM で mobi ファイルをコピーする時に古いファイルを削除するという処理ももちろんできるが、わざわざスクリプトでそんな処理を組み込まなくても、GCS の標準機能でできるならそれを活用するに越したことはない。

ライフサイクル管理設定は GCP コンソール上ではできず、Cloud Shell を使って設定する。まずはこちらを参考に設定用の json ファイルを作成する。例えば lifecycle_config.json とか。

{ "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": { "age": 2, "isLive": true } } ] } }

そしたら、作成したバケットを指定しながら Cloud Shell で以下のコマンドでライフサイクルを設定する。

gsutil lifecycle set lifecycle_config.json gs://<バケット名>/

<バケット名> の部分を、作成したバケット名に置き換えて実行すると、2日より古いファイルは自動的に削除される。

これで、GCS の設定はひとまず完了。ファイルが置かれた際に、通知のアクションをのちに設定する必要があるが、それは後で。

0 件のコメント:

コメントを投稿