Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8945

【メモ】LambdaからgoogleDriveAPIを操作する

$
0
0

はじめに

LambdaからgoogleAPIでGooglDriveをいじりたかったのですが、サービスアカウントを用いた参考文献が少なく、理解するのに時間がかかったのでメモ感覚で書いておきます。

本題

Googleデベロッパーコンソールに行く,プロジェクトを作成

Googleデッッベロッパーコンソールにログイン
スクリーンショット 2021-01-23 0.32.38.png

APIの有効化>APIライブラリからGoogle Drive APIを有効化させる

スクリーンショット 2021-01-23 0.33.27.png

認証情報の追加>サービスアカウント

スクリーンショット 2021-01-23 0.34.53.png

ひとまずロールにオーナーをつけてみよう

スクリーンショット 2021-01-23 0.36.29.png

アカウントが作成されたら>JSONの鍵を生成&ダウンロード

スクリーンショット 2021-01-23 0.38.03.png
※鍵のタイプを聞かれたらひとまずJSONを選択
↓こんな感じのやつ

{
  "type": "service_account",
  "project_id": "exxxxxxxxxxxxxxxxxxxx",
  "private_key_id": "axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
  "client_email": "id-xxx@xxxxxxxxxxxxxxx.iam.gserviceaccount.com",
  "client_id": "xxxxxxxxxxxxxxxxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxxxxxxxxxxxxxxxxxx5.iam.gserviceaccount.co

ソースコードの作成

cd desktop
mkdir sample
cd sample
touch index.js
touch privatekey.json
npm init -y

privatekey.jsonに先ほどインストールした認証情報のJSONを入れる

//googleAPIをいじるためのモジュール
npm install googleapis
index.js
const{google}=require("googleapis");constprivatekey=require("./privatekey.json");exports.handler=async(event)=>{constres=awaitPromise.resolve().then(function(){returnnewPromise(function(resolve,reject){//JWT auth clientの設定constjwtClient=newgoogle.auth.JWT(privatekey.client_email,null,privatekey.private_key,["https://www.googleapis.com/auth/drive"]);//authenticate requestjwtClient.authorize(function(err,tokens){if(err){reject(err);}else{//認証成功resolve(jwtClient);}});});}).then(function(jwtClient){returnnewPromise(asyncfunction(resolve,reject){constdrive=google.drive({version:"v3",auth:jwtClient});drive.files.list({pageSize:10,fields:"nextPageToken, files(id, name)",},(err,res)=>{if(err)reject(err);constfiles=res.data.files;if(files.length){resolve(files);}else{resolve("No files found.");}});});});console.log(res)};

ややこしかったこと

認証方法にはいくつかあり、 公式リファレンスのquickstartにもあるようなOAuth 2.0 クライアント IDを用いた方法では、トークンの有効期限が一時間のため、常時使い続けるためにはリフレッシュトークンを用いて一時間に一回アクセストークンを更新しなければならない。こちらの場合はGUIで試すこともできる。

そのため、今回はサービスアカウントを利用した。
サービスアカウントでは、スコープを与えるだけでは、ファイルに書き込んだりすることができない。googleDriveのコンソールからサービスアカウントのメールアドレスに編集権限を与える必要がある。

お世話になったサイト

https://developers.google.com/drive/api/v3/quickstart/nodejs
https://developers.google.com/oauthplayground/
https://playwithgoogleapi.hatenablog.com/entry/2019/06/30/133415
https://qiita.com/n0bisuke/items/ff1479cd14e7a0c0be0c

まだ追い切れてなくて気になったやつ

https://github.com/googleapis/google-auth-library-nodejs#samples


Viewing all articles
Browse latest Browse all 8945