Рубрики
Без рубрики

Создайте функцию резервного копирования файла Appwrite с помощью API Dropbox

В этом уроке мы рассмотрим, как мы можем использовать функции облачных функций Appwrite для выполнения CER … Tagged с учебником, программированием, Python, Serverless.

В этом уроке мы рассмотрим, как мы можем использовать функции облачных функций Appwrite для выполнения определенных задач, когда на сервере происходят определенные события. Вы можете найти полный список доступных системных событий Здесь Анкет

В этом примере мы продемонстрируем, как мы можем интегрироваться с сторонним поставщиком хранилища, таким как Dropbox, чтобы создать резервные копии файлов, загруженных в Appwrite. Ради этого примера мы будем использовать Dropbox’s Python SDK Анкет Аналогичная концепция относится к другим поставщикам API, таким как Box или Google Drive. Итак, начнем.

Создание вашей облачной функции

Первый шаг – создать Dropbox Developer Учетная запись и получите Токен доступа Анкет Теперь пришло время создать облачную функцию в консоли Appwrite. Перейти к Функции Раздел вашей консоли и выберите функцию добавить. Вы можете дать своей функции новое прикольное имя и выбрать предпочтительную среду. Мы будем использовать Python для этого примера.

Давайте напишем какой -нибудь код

Следующий шаг – написать код, который будет выполнен, и загрузить его в консоли Appwrite. Создайте каталог для удержания вашей облачной функции. Затем создайте свой основной кодовый файл и Требования.txt Анкет

$ mkdir cloud-functions-demo
$ cd cloud-functions-demo
$ touch main.py
$ touch requirements.txt

Мы будем использовать две зависимости для этого примера

  1. Dropbox
  2. аппарат

Добавьте их в свой Требования.txt Анкет Мы обычно выполняли PIP установка на данном этапе Но это установило бы библиотеки в пути общих библиотек. Нам нужно, чтобы библиотеки были установлены в том же каталоге, чтобы их можно было легко упаковать. Запустите следующую команду, чтобы установить библиотеки внутри локального .AppWrite каталог. Среда Python от Appwrite будет знать, как автозагружать файл из этого каталога без какой -либо специальной конфигурации.

$ PIP_TARGET=./.appwrite pip install -r ./requirements.txt --upgrade --ignore-installed

Большой. Пора начать редактировать main.py файл. Мы начинаем с импорта соответствующих библиотек.

import sys
import json
import os

# Drop box SDK
import dropbox
from dropbox.files import WriteMode
from dropbox.exceptions import ApiError, AuthError

# Appwrite SDK
from appwrite.client import Client
from appwrite.services.storage import Storage

API Appwrite возвращает двоичный файл в качестве вывода, тогда как Dropbox SDK ожидает пути файла. Таким образом, мы будем использовать временный файл во время выполнения функции. Итак, давайте определим эти переменные.

TOKEN = os.environ['DROPBOX_KEY']
FILENAME = 'my-file.txt'
BACKUPPATH = '/my-file.txt'

Теперь пришло время настроить Appwrite SDK

# Setup the Appwrite SDK
client = Client()
client.set_endpoint('http://192.168.1.6/v1') # Your API Endpoint
client.set_project('5fca866c65afc') # Your project ID
client.set_key(os.environ["APPWRITE_KEY"]) # Your secret API key

ПРИМЕЧАНИЕ. В рамках облачной функции вы не можете использовать Localhost для обозначения вашего сервера Appwrite, потому что Localhost относится к вашей собственной среде выполнения. Вам придется найти частный IP -интерфейс сетевого интерфейса по умолчанию, используя ifconfig (обычно ETH0 в Linux или EN0 в MacOS).

Когда функция запускается событием, мы можем получить много метаданных о событии из некоторых специальных переменных среды, которые подвергаются воздействию Appwrite. Полный список доступен Здесь Анкет В нашем случае нам нужен Удостоверение личности файла Это было загружено, чтобы принести это. Appwrite удобно раскрывает эту информацию как переменную среды с именем Appwrite_function_event_payload Анкет Давайте разыграем эту строку JSON, чтобы получить идентификатор файла.

# Triggered by the storage.files.create event
payload = json.loads(os.environ["APPWRITE_FUNCTION_EVENT_PAYLOAD"])
fileID = payload["$id"]

Используя SDK, давайте собираем файл и сохраните его:

# Create an instance of Appwrite's Storage API
storage = Storage(client)
result = storage.get_file_download(fileID)

# Save the file
with open(FILENAME, "wb") as newFile:
    newFile.write(result)

Мы почти закончили. Теперь мы настроим Dropbox SDK и загрузите файл.

# Check if we have the access token 
if (len(TOKEN) == 0):
    sys.exit("ERROR: Looks like you didn't add your access token. "
        "Open up backup-and-restore-example.py in a text editor and "
        "paste in your token in line 14.")

# Create an instance of a Dropbox class, which can make requests to the API.
print("Creating a Dropbox object...")
with dropbox.Dropbox(TOKEN) as dbx:
    # Check that the access token is valid
    try:
        dbx.users_get_current_account()
    except AuthError:
        sys.exit("ERROR: Invalid access token; try re-generating an "
            "access token from the app console on the web.")

    # Create a backup of the current settings file
    backup()
    print("Done!")

Давайте теперь посмотрим на Backup () функция Здесь мы используем Dropbox’s files_upload () Функция для загрузки нашего файла и наблюдения за некоторыми конкретными ошибками.

# Uploads contents of FILENAME to Dropbox
def backup():
    with open(FILENAME, 'rb') as f:
        # We use WriteMode=overwrite to make sure that the contents in the file
        # are changed on upload
        print("Uploading " + FILENAME + " to Dropbox as " + BACKUPPATH + "...")
        try:
            dbx.files_upload(f.read(), BACKUPPATH, mode=WriteMode('overwrite'))
        except ApiError as err:
            # This checks for the specific error where a user doesn't have
            # enough Dropbox space quota to upload this file
            if (err.error.is_path() and err.error.get_path().reason.is_insufficient_space()):
                sys.exit("ERROR: Cannot back up; insufficient space.")
            elif err.user_message_text:
                print(err.user_message_text)
                sys.exit()
            else:
                print(err)
                sys.exit()

Развертывание облачной функции

Прежде чем мы сможем развернуть нашу облачную функцию, мы должны убедиться, что наш каталог имеет следующую структуру.

.
├── .appwrite/
├── main.py
└── requirements.txt

Есть два способа развертывания вашей функции. Используя Appwrite CLI и используя Appwrite Console Анкет

Развернуть с помощью Appwrite CLI (рекомендуется)

Вы можете легко развернуть свои функции с помощью Appwrite CLI. Если вы еще не установили Appwrite CLI, пожалуйста, пройдите через Эти инструкции Чтобы установить Appwrite CLI. После установки вы можете запустить следующую команду из каталога, содержащего вашу облачную функцию для развертывания вашего тега.

appwrite functions createTag \
    --functionId= \
    --command='python main.py' \
    --code='.'

Идентификатор функции можно найти в правой части раздела обзора вашей функции.

Развернуть с использованием консоли (ручное)

При развертывании вручную нам нужно сначала упаковать функцию, создав TAR -файл из нашей папки.

$ cd ..
$ tar -zcvf code.tar.gz cloud-functions-demo

Теперь мы можем загрузить этот Tarfile на приборную панель нашей функции, выбрав Развернуть тег > Руководство вариант. Наша команда точки входа, в данном случае, будет:

$ python main.py

После создания нам необходимо определить триггер для функции. В нашем случае мы хотим запустить его всякий раз, когда новый файл загружается на сервер Appwrite. Так что мы были бы заинтересованы в Storage.files.create мероприятие. Триггер может быть включен в рамках Вкладка настроек функции.

Как только триггеры включены, пришло время для нашего последнего шага, Функциональные переменные Анкет Appwrite позволяет вам надежно хранить секретные ключи, используя Переменные функции Appwrite который будет доступен в качестве переменных среды для вашей программы. Самое приятное то, что эти ключи зашифрованы и надежно хранятся во внутреннем БД Appwrite. В этом примере мы использовали две переменные среды, а именно Dropbox_key (Ключ API Dropbox) и Appwrite_key (Appwrite API -ключ) Таким образом, давайте добавим их в переменные функции. Не забудьте щелкнуть Опция обновления Как только вы довольны своими настройками.

Большой! Мы закончили со всей настройкой. Все, что осталось сейчас, – это проверить функцию облака.

Тестирование

Теперь пришло время проверить вашу новую блестящую облачную функцию! Перейти к Хранение Раздел Appwrite и создайте новый файл, нажав кнопку «+» в правом нижнем углу. Выберите текстовый файл (или любой другой файл. Но обязательно обязательно переименовать файлы в примере кода. ) и нажмите Создать Анкет

Ваша облачная функция теперь была бы запускается. Вы можете проверить это, отправившись к Функции> Имя вашей функции> журналы

После завершения выполнения вы можете проверить ответ от API.

И в нескольких простых шагах мы успешно развернули нашу первую облачную функцию. Возможности с облачными функциями бесконечны! Следите за обновлениями, чтобы узнать больше об облачных функциях от команды Appwrite.

Учить больше

Кредиты

Фотография Маркус Шписке на Неспособный

Оригинал: “https://dev.to/appwrite/create-an-appwrite-file-backup-function-using-the-dropbox-api-2pfo”