Автоматическое копирование объектов из одного бакета Object Storage в другой
Настройте автоматическое копирование объектов из одного бакета Object Storage в другой. Копирование будет осуществляться с помощью функции Cloud Functions, которая запускается по триггеру при добавлении нового объекта в бакет.
Чтобы настроить копирование:
- Подготовьте облако к работе.
- Создайте сервисные аккаунты.
- Создайте статический ключ.
- Создайте секрет Yandex Lockbox.
- Создайте бакеты Yandex Object Storage.
- Подготовьте ZIP-архив с кодом функции.
- Создайте функцию Yandex Cloud Functions.
- Создайте триггер.
- Протестируйте функцию.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость ресурсов входят:
- плата за хранение данных в бакете (см. тарифы Yandex Object Storage);
- плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Yandex Cloud Functions);
- плата за хранение секретов (см. тарифы Yandex Lockbox).
Создайте сервисные аккаунты
Создайте сервисный аккаунт s3-copy-fn
с ролями storage.uploader
, storage.viewer
и lockbox.payloadViewer
, от имени которого будет работать функция, и s3-copy-trigger
с ролью functions.functionInvoker
для вызова функции.
- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Укажите имя сервисного аккаунта:
s3-copy-fn
. - Нажмите Добавить роль и выберите роли
storage.uploader
,storage.viewer
иlockbox.payloadViewer
. - Нажмите кнопку Создать.
- Повторите предыдущие шаги и создайте сервисный аккаунт
s3-copy-trigger
с рольюfunctions.functionInvoker
, от имени которого будет вызываться функция.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Создайте сервисный аккаунт
s3-copy-fn
:yc iam service-account create --name s3-copy-fn
Результат:
id: nfersamh4sjq******** folder_id: b1gc1t4cb638******** created_at: "2023-03-21T10:36:29.726397755Z" name: s3-copy-fn
Сохраните идентификатор сервисного аккаунта
s3-copy-fn
(id
) и каталога, в котором его создали (folder_id
). -
Назначьте сервисному аккаунту роли
storage.uploader
,storage.viewer
иlockbox.payloadViewer
на каталог:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role storage.uploader \ --subject serviceAccount:<идентификатор_сервисного_аккаунта> yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role storage.viewer \ --subject serviceAccount:<идентификатор_сервисного_аккаунта> yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role lockbox.payloadViewer \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Результат:
done (1s)
-
Создайте сервисный аккаунт
s3-copy-trigger
:yc iam service-account create --name s3-copy-trigger
Сохраните идентификаторы сервисного аккаунта
s3-copy-trigger
(id
) и каталога, в котором он был создан (folder_id
). -
Назначьте сервисному аккаунту роль
functions.functionInvoker
на каталог:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role storage.uploader \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры сервисных аккаунтов:
// Сервисный аккаунт для работы функции resource "yandex_iam_service_account" "s3-copy-fn" { name = "s3-copy-fn" folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "uploader" { folder_id = "<идентификатор_каталога>" role = "storage.uploader" member = "serviceAccount:${yandex_iam_service_account.s3-copy-fn.id}" } resource "yandex_resourcemanager_folder_iam_member" "viewer" { folder_id = "<идентификатор_каталога>" role = "storage.viewer" member = "serviceAccount:${yandex_iam_service_account.s3-copy-fn.id}" } resource "yandex_resourcemanager_folder_iam_member" "payloadViewer" { folder_id = "<идентификатор_каталога>" role = "lockbox.payloadViewer" member = "serviceAccount:${yandex_iam_service_account.s3-copy-fn.id}" } // Сервисный аккаунт для вызова функции resource "yandex_iam_service_account" "s3-copy-trigger" { name = "s3-copy-trigger" folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "functionInvoker" { folder_id = "<идентификатор_каталога>" role = "functions.functionInvoker" member = "serviceAccount:${yandex_iam_service_account.s3-copy-trigger.id}" }
Где:
name
— имя сервисного аккаунта. Обязательный параметр.folder_id
— идентификатор каталога. Необязательный параметр. По умолчанию будет использовано значение, указанное в настройках провайдера.role
— назначаемая роль.
Более подробную информацию о параметрах ресурса
yandex_iam_service_account
в Terraform, см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится информация о сервисном аккаунте. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание сервисных аккаунтов: введите в терминал слово
yes
и нажмите Enter.После этого будут созданы сервисные аккаунты. Проверить появление сервисных аккаунтов можно в консоли управления
или с помощью команды CLI:yc iam service-account list
-
Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роли на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Создайте статический ключ
Создайте статический ключ доступа для сервисного аккаунта s3-copy-fn
.
- В консоли управления
перейдите в каталог, в котором находится сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты и выберите сервисный аккаунтs3-copy-fn
. - На верхней панели нажмите кнопку Создать новый ключ.
- Выберите Создать статический ключ доступа.
- Задайте описание ключа и нажмите кнопку Создать.
- Сохраните идентификатор и секретный ключ.
-
Выполните команду:
yc iam access-key create --service-account-name s3-copy-fn
Результат:
access_key: id: aje6t3vsbj8l******** service_account_id: ajepg0mjt06s******** created_at: "2023-03-21T14:37:51Z" key_id: 0n8X6WY6S24******** secret: JyTRFdqw8t1kh2-OJNz4JX5ZTz9Dj1rI********
-
Сохраните идентификатор (
key_id
) и секретный ключ (secret
). Получить значение ключа снова будет невозможно.
-
Опишите в конфигурационном файле параметры ключа:
resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = "<идентификатор_сервисного_аккаунта>" }
Где
service_account_id
— идентификатор сервисного аккаунтаs3-copy-fn
.Более подробную информацию о параметрах ресурса
yandex_iam_service_account_static_access_key
в Terraform, см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание статического ключа доступа: введите в терминал слово
yes
и нажмите Enter.Если при создании ключа возникли ошибки, Terraform на них укажет.
При успешном создании ключа Terraform запишет его в свою конфигурацию, но не покажет пользователю. В терминал будет выведен только идентификатор созданного ключа.Проверить появление ключа у сервисного аккаунта можно в консоли управления
или с помощью команды CLI:yc iam access-key list --service-account-name=s3-copy-fn
-
Чтобы создать ключ доступа, воспользуйтесь методом REST API create для ресурса AccessKey или вызовом gRPC API AccessKeyService/Create.
Создайте секрет
Создайте секрет Yandex Lockbox для хранения статического ключа доступа.
-
В консоли управления
выберите каталог, в котором хотите создать секрет. -
В списке сервисов выберите Lockbox.
-
Нажмите кнопку Создать секрет.
-
В поле Имя укажите имя секрета:
s3-static-key
. -
В блоке Данные секрета:
-
Выберите тип секрета Пользовательский.
-
Добавьте значение идентификатора ключа:
- В поле Ключ укажите:
key_id
. - В поле Значение укажите значение идентификатора ключа, которое получили ранее.
- В поле Ключ укажите:
-
Нажмите кнопку Добавить ключ/значение.
-
Добавьте значение секретного ключа:
- В поле Ключ укажите:
secret
. - В поле Значение укажите значение секретного ключа, которое получили ранее.
- В поле Ключ укажите:
-
-
Нажмите кнопку Создать.
Чтобы создать секрет, выполните команду:
yc lockbox secret create --name s3-static-key \
--payload "[{'key': 'key_id', 'text_value': '<идентификатор_ключа>'},{'key': 'secret', 'text_value': '<значение_секретного_ключа>'}]"
Результат:
id: e6q2ad0j9b55********
folder_id: b1gktjk2rg49********
created_at: "2021-11-08T19:23:00.383Z"
name: s3-static-key
status: ACTIVE
current_version:
id: g6q4fn3b6okj********
secret_id: e6e2ei4u9b55********
created_at: "2023-03-21T19:23:00.383Z"
status: ACTIVE
payload_entry_keys:
- key_id
- secret
-
Опишите в конфигурационном файле параметры секрета:
resource "yandex_lockbox_secret" "my_secret" { name = "s3-static-key" } resource "yandex_lockbox_secret_version" "my_version" { secret_id = yandex_lockbox_secret.my_secret.id entries { key = "key_id" text_value = "<идентификатор_ключа>" } entries { key = "secret" text_value = "<значение_секретного_ключа>" } }
Где:
name
— имя секрета.key
— название ключа.text_value
— значение ключа.
Примечание
Рекомендуется использовать ресурс
yandex_lockbox_secret_version_hashed
, он хранит в состоянии Terraform значения в хешированном виде. Поддержка ресурсаyandex_lockbox_secret_version
остается.Более подробную информацию о ресурсе
yandex_lockbox_secret_version_hashed
см. в документации провайдера .Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание секрета: введите в терминал слово
yes
и нажмите Enter.
-
Чтобы создать секрет, воспользуйтесь методом REST API create для ресурса Secret или вызовом gRPC API SecretService/Create.
Создайте бакеты Object Storage
Создайте два бакета: основной — где будут храниться файлы, и резервный — куда будут копироваться файлы из основного бакета.
-
В консоли управления
выберите каталог, в котором хотите создать бакеты. -
В списке сервисов выберите Object Storage.
-
Создайте основной бакет:
- Нажмите кнопку Создать бакет.
- В поле Имя укажите имя для основного бакета.
- В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите
Ограниченный
. - Нажмите кнопку Создать бакет.
-
Таким же образом создайте резервный бакет.
Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.
Создайте основной и резервный бакеты:
aws --endpoint-url https://storage.yandexcloud.net \
s3 mb s3://<имя_основного_бакета>
aws --endpoint-url https://storage.yandexcloud.net \
s3 mb s3://<имя_резервного_бакета>
Результат:
make_bucket: <имя_основного_бакета>
make_bucket: <имя_резервного_бакета>
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
-
Опишите в конфигурационном файле параметры для создания сервисного аккаунта и ключа доступа:
... // Создание сервисного аккаунта resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" }
-
Опишите в конфигурационном файле параметры основного и резервного бакетов:
resource "yandex_storage_bucket" "main-bucket" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_основного_бакета>" } resource "yandex_storage_bucket" "reserve-bucket" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_резервного_бакета>" }
Подробнее о ресурсе
yandex_storage_bucket
см. в документации провайдера Terraform. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание бакетов: введите в терминал слово
yes
и нажмите Enter.
-
Чтобы создать бакет, воспользуйтесь методом REST API create для ресурса Bucket или вызовом gRPC API BucketService/Create.
Подготовьте ZIP-архив с кодом функции
-
Сохраните следующий код в файл с названием
handler.sh
:set -e ( cat | jq -c '.messages[]' | while read message; do SRC_BUCKET=$(echo "$message" | jq -r .details.bucket_id) SRC_OBJECT=$(echo "$message" | jq -r .details.object_id) aws --endpoint-url="$S3_ENDPOINT" s3 cp "s3://$SRC_BUCKET/$SRC_OBJECT" "s3://$DST_BUCKET/$SRC_OBJECT" done; ) 1>&2
-
Добавьте файл
handler.sh
в ZIP-архивhandler-sh.zip
.
Создайте функцию
Создайте функцию, которая при добавлении нового объекта в основной бакет будет копировать его в резервный бакет.
-
В консоли управления
перейдите в каталог, в котором хотите создать функцию. -
В списке сервисов выберите Cloud Functions
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- Укажите имя функции —
copy-function
. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
Выберите среду выполнения
Bash
, отключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить. -
Укажите способ загрузки
ZIP-архив
и выберите архивhandler-sh.zip
, который создали на предыдущем шаге. -
Укажите точку входа
handler.sh
. -
В блоке Параметры укажите:
-
Таймаут, c —
600
. -
Память —
128 МБ
. -
Сервисный аккаунт —
s3-copy-fn
. -
Переменные окружения:
S3_ENDPOINT
—https://storage.yandexcloud.net
.DST_BUCKET
— имя резервного бакета, в который нужно копировать объекты.
-
Секреты Lockbox:
AWS_ACCESS_KEY_ID
— идентификатор секретаs3-static-key
, идентификатор версииlatest
, ключ секретаkey_id
.AWS_SECRET_ACCESS_KEY
— идентификатор секретаs3-static-key
, идентификатор версииlatest
, ключ секретаsecret
.
-
-
Нажмите кнопку Сохранить изменения.
-
-
Создайте функцию
copy-function
:yc serverless function create --name=copy-function
Результат:
id: b09bhaokchn9******** folder_id: <идентификатор_каталога> created_at: "2024-10-21T20:40:03.451Z" name: copy-function http_invoke_url: https://functions.yandexcloud.net/b09bhaokchn9******** status: ACTIVE
-
Создайте версию функции
copy-function
:yc serverless function version create \ --function-name copy-function \ --memory=128m \ --execution-timeout=600s \ --runtime=bash \ --entrypoint=handler.sh \ --service-account-id=<идентификатор_сервисного_аккаунта> \ --environment DST_BUCKET=<имя_резервного_бакета> \ --environment S3_ENDPOINT=https://storage.yandexcloud.net \ --secret name=s3-static-key,key=key_id,environment-variable=AWS_ACCESS_KEY_ID \ --secret name=s3-static-key,key=secret,environment-variable=AWS_SECRET_ACCESS_KEY \ --source-path=./handler-sh.zip
Где:
--function-name
— имя функции, версия которой создается.--memory
— объем RAM.--execution-timeout
— максимальное время выполнения функции до таймаута.--runtime
— среда выполнения.--entrypoint
— точка входа.--service-account-id
— идентификатор сервисного аккаунтаs3-copy-fn
.--environment
— переменные окружения.--secret
— секрет, содержащий части статического ключа доступа.--source-path
— путь до ZIP-архиваhandler-sh.zip
.
Результат:
done (1s) id: d4e394pt4nhf******** function_id: d4efnkn79m7n******** created_at: "2024-10-21T20:41:01.345Z" runtime: bash entrypoint: handler.sh resources: memory: "134217728" execution_timeout: 600s service_account_id: ajelprpohp7r******** image_size: "4096" status: ACTIVE tags: - $latest environment: DST_BUCKET: <имя_резервного_бакета> S3_ENDPOINT: https://storage.yandexcloud.net secrets: - id: e6qo2oprlmgn******** version_id: e6q6i1qt0ae8******** key: key_id environment_variable: AWS_ACCESS_KEY_ID - id: e6qo2oprlmgn******** version_id: e6q6i1qt0ae8******** key: secret environment_variable: AWS_SECRET_ACCESS_KEY log_options: folder_id: b1g681qpemb4******** concurrency: "1"
-
Опишите в конфигурационном файле параметры функции:
resource "yandex_function" "copy-function" { name = "copy-functionn" user_hash = "first function" runtime = "bash" entrypoint = "handler.sh" memory = "128" execution_timeout = "600" service_account_id = "<идентификатор_сервисного_аккаунта>" environment = { DST_BUCKET = "<имя_резервного_бакета>" S3_ENDPOINT = "https://storage.yandexcloud.net" } secrets = { id = "<идентификатор_секрета>" version_id = "<идентификатор_версии_секрета>" key = "key_id" environment_variable = "AWS_ACCESS_KEY_ID" } secrets = { id = "<идентификатор_секрета>" version_id = "<идентификатор_версии_секрета>" key = "secret" environment_variable = "AWS_SECRET_ACCESS_KEY" } content { zip_filename = "./handler-sh.zip" } }
Где:
name
— имя функции.user_hash
— произвольная строка, определяющая версию функции.runtime
— среда выполнения функции.entrypoint
— точка входа.memory
— объем памяти в мегабайтах, отведенный для выполнения функции.execution_timeout
— таймаут выполнения функции.service_account_id
— идентификатор сервисного аккаунтаs3-copy-fn
.environment
— переменные окружения.secrets
— секрет, содержащий части статического ключа доступа.content
— путь до ZIP-архиваhandler-sh.zip
c исходным кодом функции.
Более подробную информацию о параметрах ресурса
yandex_function
см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание функции: введите в терминал слово
yes
и нажмите Enter.
-
Чтобы создать функцию, воспользуйтесь методом create для ресурса Function или вызовом gRPC API FunctionService/Create.
Чтобы создать версию функцию, воспользуйтесь методом createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
Создайте триггер
Создайте триггер для Object Storage, который будет вызывать функцию copy-function
при создании нового объекта в основном бакете.
-
В консоли управления
перейдите в каталог, в котором хотите создать триггер. -
В списке сервисов выберите Cloud Functions
-
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- Укажите имя триггера:
bucket-to-bucket-copying
. - В поле Тип выберите
Object Storage
. - В поле Запускаемый ресурс выберите
Функция
.
- Укажите имя триггера:
-
В блоке Настройки Object Storage:
- В поле Бакет выберите основной бакет.
- В поле Типы событий выберите
Создание объекта
.
-
В блоке Настройки функции:
- В поле Функция выберите функцию
copy-function
. - В поле Сервисный аккаунт выберите сервисный аккаунт
s3-copy-trigger
.
- В поле Функция выберите функцию
-
Нажмите кнопку Создать триггер.
Выполните команду:
yc serverless trigger create object-storage \
--name bucket-to-bucket-copying \
--bucket-id <имя_основного_бакета> \
--events 'create-object' \
--invoke-function-name copy-function \
--invoke-function-service-account-name s3-copy-trigger
Где:
--name
— имя триггера.--bucket-id
— имя основного бакета.--events
— события, после наступления которых триггер запускается.--invoke-function-name
— имя вызываемой функции.--invoke-function-service-account-name
— имя сервисного аккаунта, от имени которого будет вызываться функция.
Результат:
id: a1s92agr8mpg********
folder_id: b1g88tflru0e********
created_at: "2024-10-21T21:04:01.866959640Z"
name: bucket-to-bucket-copying
rule:
object_storage:
event_type:
- OBJECT_STORAGE_EVENT_TYPE_CREATE_OBJECT
bucket_id: <имя_основного_бакета>
batch_settings:
size: "1"
cutoff: 1s
invoke_function:
function_id: d4eofc7n0m03********
function_tag: $latest
service_account_id: aje3932acd0c********
status: ACTIVE
-
Опишите в конфигурационном файле параметры триггера:
resource "yandex_function_trigger" "my_trigger" { name = "bucket-to-bucket-copying" object_storage { bucket_id = "<имя_основного_бакета>" create = true } function { id = "<идентификатор_функции>" service_account_id = "<идентификатор_сервисного_аккаунта>" } }
Где:
name
— имя триггера.object_storage
— параметры хранилища:bucket_id
— имя основного бакета.create
— триггер вызовет функцию при создании нового объекта в хранилище.
function
— настройки функции, которую будет запускать триггер:id
— идентификатор функцииcopy-function
.service_account_id
— идентификатор сервисного аккаунтаs3-copy-trigger
.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание триггера: введите в терминал слово
yes
и нажмите Enter.
-
Чтобы создать триггер для Object Storage, воспользуйтесь методом create для ресурса Trigger или вызовом gRPC API TriggerService/Create.
Протестируйте функцию
- В консоли управления
перейдите в каталог, где находится основной бакет. - В списке сервисов выберите Object Storage.
- Нажмите на имя основного бакета.
- В правом верхнем углу нажмите кнопку Загрузить.
- В появившемся окне выберите необходимые файлы и нажмите кнопку Открыть.
- Консоль управления отобразит все объекты, выбранные для загрузки. Нажмите кнопку Загрузить.
- Обновите страницу.
- Перейдите в резервный бакет и убедитесь, что в нем появились добавленные файлы.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: