Короткий ответ: нет , нет способа заархивировать объекты из корзины в целевую корзину
Однако существует элегантный способ сделать это самостоятельно, что потребуеттри компонента: (1) паб / подтема GCP, (2) служба узла /request-zip
и (3) группа экземпляров облачных вычислений для обработки zips
(1) создание публикацииподтема
gcloud pubsub topics create request-zip
gcloud pubsub subscriptions create --topic request-zip work-zip
(2) Создайте службу /request-zip
для публикации в теме request-zip
1013 * Ниже приведен краткий рецепт псевдокода, показывающий, как получить список файлов ипоставьте его в очередь на тему request-zip
.Этот звонок быстрый.Возможно, вы захотите добавить адрес электронной почты или создать другую очередь «готово», чтобы уведомить вызывающего абонента о завершении работы. const express = require('express')
const app = express()
const port = 3000
const bodyParser = require('body-parser')
const {PubSub} = require('@google-cloud/pubsub');
app.use(bodyParser.json())
app.post('/request-zip', (req, res) => {
const pubsub = new PubSub({projectId});
// send the file list to the queue
sendMessageResponse = await pubsub.sendMessage("request-zip", req.body.files.join(','));
console.info(sendMessageResponse)
}
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
пример публикации в теме на cli для тестирования
gcloud pubsub topics publish request-zip --message "file1.txt,file2.png"
(3) Запустите группу экземпляров для обработки очереди
Напишите короткий сценарий оболочки, подобный следующему, и раскрутите несколько экземпляров, чтобы получить zips
пример получения сообщения
while true; do
# i suggest testing success on all routines and then --ack at the end.
files=$(gcloud pubsub subscriptions pull work-zip --auto-ack --format json|jq -r '.
[].message.data'|base64 -d)
gsutil sync gs://my-bucket/{$files} .
zip -r archive.zip .
gsutil sync archive.zip gs://target-bucket/
rm -rf *
done