Dropbox API를 사용하여 Appwrite 파일 백업 함수 만들기

이 자습서에서는 서버에서 특정 이벤트가 발생할 때 Appwrite의 클라우드 기능을 이용하여 특정 작업을 수행하는 방법을 소개합니다.사용 가능한 시스템 이벤트의 전체 목록here을 찾을 수 있습니다.
이 예에서 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
이 예에 대해 우리는 두 가지 의존항을 사용할 것이다
  • 승강함
  • appwrite
  • 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 팀의 더 많은 구름 많은 기능 아이디어를 계속 주목해 주십시오.

    자세히 보기

  • 저희 Cloud Functions Demo Repo에서 완전한 코드 예시와 많은 다른 프레젠테이션을 찾을 수 있습니다.
  • 체크아웃Appwrite'sGithub 환매.

  • Our Discord Server는 당신을 곤경에 빠뜨린 곳입니다.
  • 모든 문서를 찾을 수 있습니다here.
  • 크레디트


    사진 작성자Markus SpiskeUnsplash

    좋은 웹페이지 즐겨찾기