0
0

More than 3 years have passed since last update.

skickaでGCP無料インスタンスからGoogleDriveにファイルをアップロードする方法

Last updated at Posted at 2021-05-08

skickaでGCP無料インスタンスからGoogleDriveにファイルをアップロードする方法

なぜこんなことをする必要があるの?

自宅のネットワークが不安定なため、データ収集の途中で失敗することがある。
GCPにインスタンスを立てて、処理を完了させたあとでローカルに落とせばいいのでは?
しかし、外部向けの下り1GBを超えると課金が発生してしまう。
インスタンスからGoogle Drive にアップロードしてから、ローカルにダウンロードすれば無料枠で解決できそう。

環境

  • ゾーン
    us-west1-a

  • ディスクサイズ
    30GB

  • ソースイメージ
    cos-dev-88-15978-0-0

  • マシンタイプ
    f1-micro(vCPU x 1、メモリ 0.6 GB)

  • docker -v
    Docker version 20.10.3, build 48d30b5b32

  • cat /etc/os-release

  • NAME="Container-Optimized OS"
    ID=cos
    PRETTY_NAME="Container-Optimized OS from Google"
    HOME_URL="https://cloud.google.com/container-optimized-os/docs"
    BUG_REPORT_URL="https://cloud.google.com/container-optimized-os/docs/resources/support-policy#contact_us"
    GOOGLE_METRICS_PRODUCT_ID=26
    GOOGLE_CRASH_ID=Lakitu
    KERNEL_COMMIT_ID=dfd65b9b9fe80d8ba3e4410d2dd0fe2c16303b6d
    VERSION=93
    VERSION_ID=93
    BUILD_ID=16379.0.0
    

前提

  1. インスタンスは作成済み
  2. Google Drive APIは有効済みかつ認証情報の設定済み
  3. インスタンスを汚さずにdocker内で完結させる

手順

  1. skickaの設定ファイルを保存するためのDocker Volumeを作成
  2. 一時的なGoコンテナでskickaの初期設定をする
  3. 動作確認

手順1/3 skickaの設定ファイルを保存するためのDocker Volumeを作成

volumeを作成するには docker volume create を使用します。

# skickaの設定ファイルを保存するvolumeを作成
$ docker volume create --name skicka-config-volume
skicka-config-volume
$ docker volume ls
DRIVER    VOLUME NAME
local     skicka-config-volume

手順2/3 一時的なGoコンテナでskickaの初期設定をする

# golangイメージをダウンロード
# さきほどのvolumeをマウントしつつgolangコンテナを作成
$ docker run --rm -v skicka-config-volume:/mnt/skicka-config/ -it golang bash
## skickaをインストール
$$ go get github.com/google/skicka

## skickaの設定
$$ skicka init
$$ cat > .skicka.config
[google]
    clientid=YOUR_GOOGLE_APP_CLIENT_ID(変更してください)
    clientsecret=YOUR_GOOGLE_APP_SECRET(変更してください)
    apikey=YOUR_API_KEY(変更してください)
[encryption]
[upload]

## リンクにアクセスして表示されたコードを入力する
$$ skicka -no-browser-auth df
Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth?client_id=*****************************...
Enter verification code: ***********
Capacity     2.00 TiB
Trash           0 B       0.00%
Drive           0 B       0.00%
Gmail       30.06 MiB     0.00%
Photos          0 B       0.00%
Free space   2.00 TiB    100.00%

## 設定ファイルをvolumeにコピーする
$$ cp -vipr .skicka.config .skicka.metadata.cache .skicka.tokencache.json /mnt/skicka-config/
'.skicka.config' -> '/mnt/skicka-config/.skicka.config'
'.skicka.metadata.cache' -> '/mnt/skicka-config/.skicka.metadata.cache'
'.skicka.tokencache.json' -> '/mnt/skicka-config/.skicka.tokencache.json'

手順3/3 動作確認

# skickaコンテナを実行(さきほどと同じような出力になるかを確認する)
# ソースを見たところかなりシンプルに作ってあったので選びました。他のイメージでも構いません。
$ docker run --rm -it -v skicka-config-volume:/mnt/skicka-config/ --name skicka satackey/skicka \
>  -config /mnt/skicka-config/.skicka.config \
>  -metadata-cache-file /mnt/skicka-config/.skicka.metadata.cache \
>  -tokencache /mnt/skicka-config/.skicka.tokencache.json \
>  df
Capacity     2.00 TiB
Trash           0 B       0.00%
Drive           0 B       0.00%
Gmail       30.06 MiB     0.00%
Photos          0 B       0.00%
Free space   2.00 TiB    100.00%

$ cat > /tmp/test.txt
てすと

# ファイルアップロードの動作確認
# アップロードしたいファイルのディレクトリ(フルパス)を/tmpにマウントしておく
$ docker run --rm -it \
 -v skicka-config-volume:/mnt/skicka-config/ \
 -v /tmp:/tmp \
 satackey/skicka \
 -config /mnt/skicka-config/.skicka.config \
 -metadata-cache-file /mnt/skicka-config/.skicka.metadata.cache \
 -tokencache /mnt/skicka-config/.skicka.tokencache.json \
 upload /tmp/test.txt /test.txt

test.txt.png

無事アップロードされています。

試しに1.5GBくらいのファイルをアップロードしたときのアップロード速度は8.5MiB/sとなかなか早くていい感じです。
monitoring.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0