今回はダウンロードした 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 件のコメント:
コメントを投稿