Как записать файл в Google Cloud Storage с помощью диспетчера развертывания?
В списке поддерживаемых типов ресурсов я вижу, что в Google Cloud Deployment Manager есть хотя бы некоторая поддержка для storage.v1.object
тип. Я надеюсь, что это даст мне возможность записывать файлы в GCS на основе данных в моем шаблоне DM. Однако я застрял на том, как составлять свойства ресурса так, как это нравится DM. Когда я использую следующий шаблон:
resources:
- name: foo.txt
type: storage.v1.object
properties:
bucket: my-bucket
name: foo.txt
uploadType: media
Я получаю следующую ошибку от gcloud deployment-manager
:
ERROR: (gcloud.deployment-manager.deployments.update) Error in Operation [operation-1522258413242-5687c67fa4691-c89f17c6-c0b96018]: errors:
- code: RESOURCE_ERROR
location: /deployments/test-serviceaccount/resources/foo.txt
message: '{"ResourceType":"storage.v1.object","ResourceErrorCode":"400","ResourceErrorMessage":{"code":400,"errors":[{"domain":"global","message":"Upload
requests must include an uploadType URL parameter and a URL path beginning with
/upload/","reason":"wrongUrlForUpload","extendedHelp":"https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload"}],"message":"Upload
requests must include an uploadType URL parameter and a URL path beginning with
/upload/","statusMessage":"Bad Request","requestPath":"https://www.googleapis.com/storage/v1/b/my-bucket/o","httpMethod":"POST"}}'
Что мне здесь не хватает? Как мне построить действительный storage.v1.object
ресурс в шаблоне диспетчера развертывания?
1 ответ
Согласно этой теме Github:
"загрузка объектов в облачное хранилище на самом деле не поддерживается" в Deployment Manager.
Однако предлагаемые обходные пути в потоке для загрузки объекта из диспетчера развертывания:
Создайте облачную функцию Google и вызовите ее из диспетчера развертывания с помощью:
action: gcp-types/cloudfunctions-v1beta2:cloudfunctions.projects.locations.functions.call
Вы можете найти пример Cloud Functions в репозитории deploymanager-samples.
Используйте Google Cloud Container Builder.
Вы можете использовать следующий пример в качестве ссылки для Cloud Builder. Он клонирует репозиторий (вместо него можно использовать собственное изображение и запустить собственный сценарий) и загрузить каталог в корзину.
resources:
- name: my-build
action: gcp-types/cloudbuild-v1:cloudbuild.projects.builds.create
metadata:
runtimePolicy:
- CREATE
properties:
steps:
- name: gcr.io/cloud-builders/git
args: ['clone', 'https://github.com/GoogleCloudPlatform/appengine-helloworld-php.git']
- name: gcr.io/cloud-builders/gsutil
args: ['-m', 'cp', '-r', 'appengine-helloworld-php', 'gs://<MY_BUCKET>/']
timeout: 120s