Как записать файл в 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
Другие вопросы по тегам