embulk-input-gcsというGoogle Cloud Platform(以下GCP)のGoogle Cloud Storage(以下GCS)からデータをバルクインポートできるEmbulkのプラグインを書いたんですが、GCSのAPIを利用するために必要な手順になります。
APIを利用するために必要な情報
GCPはアカウントの種類が複数あり、認証方法もOAuth2.0等複数の認証方法が存在します。AWS S3のようにアクセスキーとシークレットキー、エンドポイントURLの3つがあれば行けるでしょ?と思ってると戸惑います。
embulk-input-gcsを利用するためには、3種類あるアカウントのうちサービスアカウントが必要となります。
- ウェブアプリケーション
- サービスアカウント(←これ)
- インストールされているアプリケーション
さらにサービスアカウントの認証方法にはOAuth2.0と「公開 API へのアクセス」と呼ばれる2種類が存在します。 embulk-input-gcsではOAuth2.0でP12秘密鍵を使った認証にのみ対応しています。
OAuth2.0でP12秘密鍵を使う場合(embulk-input-gcsはこちらに対応)
- サービスアカウント メールアドレス(<ランダムな文字列>@developer.gserviceaccount.com)
- P12秘密鍵(PKCS12)
- アプリケーション名
OAuth2.0でJSONキーを使用する場合
- サービスアカウント メールアドレス(<ランダムな文字列>@developer.gserviceaccount.com)
- JSONキー
- アプリケーション名
このうちアプリケーション名はGCPのコントロールパネルから設定するものではなく任意の文字列で、APIリクエストを送る際に必須だが文字列は何であってもリクエストが通る謎パラメータです。
たぶんAPIにどのアプリケーションからリクエストが送信されているか統計を取る用途ではないかと思いますが、コンパネのどこで確認できるのかは?
GCPはEUと米国の2箇所のデータセンターがありますが、AWS S3のようにエンドポイントURLはありません。GCSのバケット作成の際にLOCATIONでAsia/EU/USを選択するんですが(後述)、プロジェクト名とバケット名で判別される模様。
各種情報取得までの流れ
前提としてGCPの利用開始は済んでいるものとして話を進めます。
プロジェクト作成
GCPのプロジェクト一覧の画面からプロジェクトを作成します。
プロジェクト名に好きな文字列を指定(後で変更可能)。 ここでは「GCP Test」を指定しました。 プロジェクトIDは右のリフレッシュボタンを押すと違う文字列に変わります。 APP ENGINEの場所はお好きな地域をどうぞ。 なお、GCSのバケットはここで選択した地域とは関係なくどこにでも作成できます。
サービスアカウントの取得
プロジェクト一覧に今作成した「GCP Test」が表示されるので選択しプロジェクトダッシュボードに移動します。
URLはhttps://console.developers.google.com/project/<プロジェクトID>
です。
左のメニューから「API」メニューを選択します。
有効なAPI一覧の「Google Cloud Storage」と「Google Cloud Storage JSON API 」が「ON」になっていることを確認します。 必要ないAPIはOFFにしてしまいましょう。
左メニューから「認証情報」メニューを選択しOAuthの「新しいクライアントIDを作成」を選択します。アカウントの種類で「サービスアカウント」を選択します。
するとP12秘密鍵(PKCS12形式)が自動的にダウンロードされます。 この際パスワードが表示されますが、もしP12形式から他の鍵形式へ変換する必要がある場合はこのパスワードが必要になります。(毎回「notasecret」です)
さらに「認証情報」の画面に「<ランダムな文字列>@developer.gserviceaccount.com」形式のサービスアカウントのメールアドレスが表示されたはずなのでメモしておきましょう。
「クライアントID」と「証明書フィンガープリント」はembulk-input-gcsでは使用しません。
以上でAPIリクエストに必要な下準備は完了です。
バケットの作成
あとは左メニューの「ストレージ」> 「Cloud Storage」 > 「ストレージブラウザ」と進んだ画面からバケットの作成が可能です。
HA(High Availability)が必要であればSTORAGE CLASSでDurable Reduced Availabilityを選択します。 LOCATIONはプロジェクト作成時の地域と無関係に選択できます。 あとはファイルアップロードするなりご自由に。