3.8 KiB
3.8 KiB
[GCP][GCS]Node.jsライブラリでストレージを活用する
Node.jsのライブラリを使いストレージを制御します
GCSとの連携について
セキュリティやアクセス制御の観点から、 フロントエンドは直接Cloud Storageにアクセスせず サーバー経由で取得するのが一般的です
ただし静的なファイルや公開データであれば フロントエンドから直接Cloud Storageにアクセスすることもあります
ライブラリのインストール
npm install --save @google-cloud/storage
GCS接続
const { Storage } = require('@google-cloud/storage');
サービスアカウントを環境変数で設定する場合
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
const storage = new Storage()
JSONキーファイルをソースで読み込む場合
const KEY_FILE_PATH = './keys/service-account.json'
const storage = new Storage({
keyFilename: KEY_FILE_PATH});
JSONキーファイルを使わず直接設定
const serviceAccount = {
type: "service_account",
project_id: "your-project-id",
private_key_id: "your-private-key-id",
private_key: "-----BEGIN PRIVATE KEY-----\nYOUR-PRIVATE-KEY\n-----END PRIVATE KEY-----\n",
client_email: "your-service-account@your-project-id.iam.gserviceaccount.com",
client_id: "your-client-id",
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/your-service-account"
};
const storage = new Storage({ credentials: serviceAccount });
権限について
- ストレージ管理者 *
- 環境とストレージ オブジェクト閲覧者
- Storage オブジェクト閲覧者
- ストレージ フォルダ管理者
サンプルコード
バケット一覧を取得する
/**
* バケット一覧を取得する
*/
async function listBuckets() {
const [buckets] = await storage.getBuckets();
console.log('Buckets:');
buckets.forEach(bucket => {
console.log(bucket.name);
});
}
ファイル検索については以下のページを参照してください [GCP]Google Cloud Storageでパターンにマッチしたファイル一覧を取得する
バケットの中のファイル一覧を取得する
async function listFiles(bucketName) {
const [files] = await storage.bucket(bucketName).getFiles();
console.log(`Files in ${bucketName}:`);
files.forEach(file => {
console.log(file.name);
});
}
署名付きURLを発行する
/**
* 署名付きURLを生成する
*/
const generateV4ReadSignedUrl = async (bucketName, fileName) => {
const options = {
version: 'v4',
action: 'read',
expires: Date.now() + 15 * 60 * 1000, // 15 minutes
};
const [url] = await storage.bucket(bucketName).file(fileName).getSignedUrl(options);
console.log(`Generated GET signed URL:`);
console.log(url);
return url;
}
ファイルをダウンロードする
// ファイルのコンテンツをダウンロードする
const downloadFile = async () => {
const options = {
destination: path.join(__dirname, FILE_NAME)
};
await storage.bucket(BUCKET_NAME).file(FILE_NAME).download(options);
// 取得したファイルのコンテンツからファイルを生成する
console.log(`Downloaded ${FILE_NAME}`);
};