Dropbox API를 사용하여 Appwrite 파일 백업 함수 만들기
이 예에서 Dropbox 등 제3자 저장 공급자와 통합하여 Appwrite에 업로드된 파일 백업을 만드는 방법을 보여 드리겠습니다.본 예에서 우리는 Dropbox’s Python SDK을 사용할 것이다.비슷한 개념은 Box 또는 Google Drive와 같은 다른 API 공급업체에도 적용됩니다.자, 시작합시다.
클라우드 기능 만들기
첫 번째 단계는 Dropbox Developer 계정을 만들고 얻는 것이다Access Token.이제 Appwrite 콘솔에서 클라우드 함수를 만들 때입니다.콘솔의 기능 부분으로 가서 기능 추가를 선택하세요.너는 너의 함수에 유행하는 새로운 이름을 지어주고 네가 좋아하는 환경을 선택할 수 있다.우리는 이 예에서 파이톤을 사용할 것이다.
코드를 좀 짜보도록 하겠습니다.
다음 단계에서는 실행할 코드를 작성하여 Appwrite 콘솔에 업로드합니다.클라우드 기능을 저장할 디렉터리를 만듭니다.그리고 주 코드 파일과
requirements.txt
를 만듭니다.$ mkdir cloud-functions-demo
$ cd cloud-functions-demo
$ touch main.py
$ touch requirements.txt
이 예에 대해 우리는 두 가지 의존항을 사용할 것이다requirements.txt
에 추가합니다.이 단계에서, 우리는 보통 pip install
명령을 실행하지만, 이것은 공유 라이브러리 경로에 라이브러리를 설치할 것이다.우리는 이 라이브러리들을 같은 디렉터리에 설치해야 편리하게 포장할 수 있다.다음 명령을 실행하여 로컬.appwrite
디렉터리에 라이브러리를 설치합니다.Appwrite의 Python 환경에서는 특별한 구성 없이 이 디렉토리에서 파일을 자동으로 로드하는 방법을 알 수 있습니다.$ 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
Appwrite의 API는 출력으로 바이너리 파일을 반환하고 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
Note: Within the Cloud Function, you cannot use localhost to refer to your Appwrite server, because localhost refers to your own runtime environment. You will have to find the private IP of your default network interface using ifconfig (usually eth0 in Linux or en0 in macOS).
하나의 함수가 이벤트에 촉발되었을 때, 우리는 Appwrite가 공개한 특수한 환경 변수에서 이 이벤트에 대한 대량의 메타데이터를 얻을 수 있다.전체 목록을 사용할 수 있습니다here.우리의 예에서, 우리는 그것을 얻기 위해 업로드한 파일의 ID가 필요하다.Appwrite는 이 정보를
APPWRITE_FUNCTION_EVENT_PAYLOAD
라는 환경 변수로 쉽게 공개합니다.이 JSON 문자열을 분석하여 파일 ID를 검색합니다.# 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()
함수를 봅시다.여기서 우리는 Dropboxfiles_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 콘솔을 사용합니다.Appwrite CLI를 사용한 배포(권장)
Appwrite CLI를 사용하여 손쉽게 기능을 배포할 수 있습니다.Appwrite CLI가 설치되어 있지 않으면 these instructions를 통해 Appwrite CLI를 설치합니다.설치 후 클라우드 함수를 포함하는 디렉터리에서 다음 명령을 실행하여 표시를 배치할 수 있습니다.
appwrite functions createTag \
--functionId=<id> \
--command='python main.py' \
--code='.'
함수 ID는 함수 개요 섹션의 오른쪽에 있습니다.콘솔 배포 사용(수동)
만약 수동으로 배치한다면, 우선 폴더에 tar 파일을 만들어서 이 기능을 포장해야 합니다.
$ cd ..
$ tar -zcvf code.tar.gz cloud-functions-demo
이제 Deploy Tag > Manual 옵션을 선택하여 이 파일을 함수의 대시보드에 업로드할 수 있습니다.이러한 상황에서 우리의 입구점 명령은 다음과 같다.$ python main.py
생성된 후에 함수에 트리거를 정의해야 합니다.우리의 예에서, 우리는 새 파일이 Appwrite 서버에 업로드될 때 그것을 터치하기를 희망합니다.그래서 우리는
storage.files.create
사건에 대해 흥미를 느낀다.기능의 설정 탭에서 트리거를 활성화할 수 있습니다.트리거가 활성화되면 함수 변수의 마지막 단계입니다.Appwrite를 사용하면 프로그램의 환경 변수로 제공되는 Appwrite 함수 변수를 사용하여 키를 안전하게 저장할 수 있습니다.가장 좋은 부분은 이 키들이 암호화되어 Appwrite의 내부 데이터베이스에 안전하게 저장되는 것이다.이 예에서는 DROPBOX KEY(DROPBOX의 API KEY)와 APPWRITE KEY(APWRITE API KEY) 두 환경 변수를 사용하므로 함수 변수에 추가합니다.일단 자신의 설정이 만족스러우면 업데이트 옵션을 클릭하는 것을 잊지 마세요.
위대하다우리는 이미 모든 설정을 완성했다.이제 클라우드 기능 테스트만 남았다.
테스트
이제 당신의 반짝이는 새로운 클라우드 기능을 테스트할 때가 되었습니다!Appwrite의 저장 부분으로 이동하고 오른쪽 아래에 있는 "+"단추를 누르면 새 파일을 만들 수 있습니다.텍스트 파일 (또는 다른 파일을 선택하십시오. 그러나 코드 예시의 파일 이름을 적당히 바꿔야 합니다.)그런 다음 생성 을 클릭합니다.
너의 구름 기능은 이미 촉발되었다.가보셔도 됩니다
Functions > Your Function Name > Logs
.실행이 완료되면 API에서 응답을 확인할 수 있습니다.
몇 가지 간단한 절차를 통해 우리는 첫 번째 클라우드 기능을 성공적으로 배치했다.클라우드 기능의 가능성은 무한하다!Appwrite 팀의 더 많은 구름 많은 기능 아이디어를 계속 주목해 주십시오.
자세히 보기
Our Discord Server는 당신을 곤경에 빠뜨린 곳입니다.
크레디트
사진 작성자Markus Spiske가 Unsplash
Reference
이 문제에 관하여(Dropbox API를 사용하여 Appwrite 파일 백업 함수 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/appwrite/create-an-appwrite-file-backup-function-using-the-dropbox-api-2pfo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)