Appwrite의 Swift 클라우드 기능을 사용하여 스토리지 정리


모든 빠른 개발자들에게 좋은 소식이 있습니다!Swift SDK는 Appwrite의 서버 측 API와 함께 사용될 것이라고 방금 발표했습니다.Swift SDK에 대한 자세한 내용은 웹 사이트에서 확인할 수 있습니다.
그러나 이 강좌에서 우리는 Swift를 사용하여 저장소 정리 클라우드 기능을 작성하고 배치하며 실행할 것이다.자, 시작합시다.

🤔 Appwrite 클라우드 함수란 무엇입니까?


Appwrite Functions는 사용자 정의 코드를 실행하여 사용자 정의Appwrite BaaS 기능을 확장하고 확장하는 방법이다.Appwrite는 계정 생성, 사용자 로그인, 문서 업데이트 등 모든 Appwrite 시스템 이벤트에 응답하기 위해 사용자 정의 코드를 실행할 수 있습니다.CRON 계획에 따라 함수를 실행하거나, Appwrite 클라이언트나 서버 API를 사용하여 HTTP 단점에서 함수를 터치해서 수동으로 시작할 수 있습니다.

🗒️ 선결 조건


이 강좌를 계속하기 위해서는 최신 버전의 Appwrite console가 필요합니다. 이 강좌에 접근할 수 있고, 이 기능을 테스트할 수 있는 항목이 있습니다.Appwrite를 설치하지 않은 경우 를 설치합니다.Appwrite를 설치하는 것은 매우 간단합니다.운영 체제에 따라 다음 명령 중 하나를 실행합니다.설치는 2분 이내에 완료해야 합니다.

Unix


docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
    --entrypoint="install" \
    appwrite/appwrite:0.11.0

Windows CMD


docker run -it --rm ^
    --volume //var/run/docker.sock:/var/run/docker.sock ^
    --volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^
    --entrypoint="install" ^
    appwrite/appwrite:0.11.0

Windows PowerShell


docker run -it --rm ,
    --volume /var/run/docker.sock:/var/run/docker.sock ,
    --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ,
    --entrypoint="install" ,
    appwrite/appwrite:0.11.0
또한 Appwrite 공식 홈페이지installation docs에서 자세한 설치 지침을 확인할 수 있습니다.

🔓️ Swift 기능 환경 활성화


Appwrite 클라우드 기능에서 Swift 환경을 사용할 수 있도록 설정하십시오.환경 변수를 사용하면 쉽게 완성할 수 있다.Appwrite 설치 폴더에서 .env 파일을 찾습니다.파일에서 환경 변수_APP_FUNCTIONS_RUNTIMES를 찾은 다음 쉼표로 구분된 목록swift-5.5에 Swift 환경을 Appwrite 함수에서 사용할 수 있도록 추가합니다.이후 업데이트된 설정을 docker-compose up -d 불러올 수 있습니다.

🔑 함수 항목 초기화


먼저 기능에 필요한 모든 파일을 만드는 프로젝트 폴더를 만듭니다.이 폴더의 이름은 storage-cleaner입니다.내부에서 다음 명령을 실행하여 새 Swift 프로젝트를 만듭니다.
docker run --rm -it -v $(pwd):/app -w /app swift:5.5 swift package init StorageCleaner
이렇게 하면 새 Swift 패키지 항목이 초기화됩니다.다음과 같은 일련의 파일을 만들어야 합니다.
.
├── Sources/StorageCleaner/main.swift
└── Package.swift

➕ Appwrite Swift SDK 종속성 추가


가장 좋아하는 텍스트 편집기에서 storage-cleaner 폴더를 엽니다.다음 코드를 Package.swift 파일에 추가합니다.
import PackageDescription

let package = Package(
    name: "StorageCleaner",
    dependencies: [
        .package(url: "https://github.com/appwrite/sdk-for-swift", "0.1.0") //TODO update version
    ],
    targets: [
        .executableTarget(
            name: "StorageCleaner",
            dependencies: [
                .product(name: "Appwrite", package: "sdk-for-swift"),
            ]),
        .testTarget(
            name: "StorageCleanerTests",
            dependencies: ["StorageCleaner"]),
    ]
)
여기에서, 우리는 의존 항목과 실행 가능한 목표 의존 항목에 swift에 Appwrite sdk를 추가할 것입니다.

✍️ 너의 함수를 써라

Sources/StorageCleaner/main.swift를 열고 다음 코드로 업데이트합니다.
import Appwrite
import Foundation

func cleanStorage() throws -> Void {
    let group = DispatchGroup()
    group.enter()
    let daysToExpire = ProcessInfo.processInfo.environment["DAYS_TO_EXPIRE"] 
    if(daysToExpire == nil) {
        throw NSError(domain: "DAYS_TO_EXPIRE environment is required", code: 0)
    }
    let endpoint = ProcessInfo.processInfo.environment["APPWRITE_ENDPOINT"] ?? ""
    let project = ProcessInfo.processInfo.environment["APPWRITE_FUNCTION_PROJECT_ID"] ?? ""

    let key = ProcessInfo.processInfo.environment["APPWRITE_API_KEY"] ?? ""

    let client = Client()
        .setEndpoint(endpoint)
        .setProject(project)
        .setKey(key)

    let storage = Storage(client)

    var deletedFiles = 0
    storage.listFiles(limit: 100, orderType: "DESC") { result in
        switch result {
            case .failure(let error):
                print(error.message)
            case .success(let fileList):
                let timestamp = Calendar.current.date(byAdding: .second, value: -Int(daysToExpire!)!, to: Date())!.timeIntervalSince1970
                print("Timestamp: \(timestamp)")
                for file in fileList.files {
                    let dateCreated = Double(file.dateCreated)
                    print("dateCreated \(dateCreated)")
                    if dateCreated < timestamp {
                        group.enter()
                        storage.deleteFile(fileId: file.id) { result in
                            switch result {
                                case .failure(let error):
                                    print(error)
                                case .success:
                                    deletedFiles += 1
                            }
                            group.leave()
                        }
                    }
                }
        }
        group.leave()
    }
    group.wait()
    print("Total files deleted: \(deletedFiles)")
}

try!
cleanStorage()
우리가 여기에 접근한 환경 변수는 이미 사용할 수 있거나, 나중에 Appwrite 함수 설정에서 설정합니다.

⚙️ 짓다


Appwrite 함수에 배치하려면 프로젝트를 구축해야 합니다.Google이 실행할 때 공식 Swift docker 이미지의 간소화 버전을 기반으로 하기 때문에 Google 프로젝트를 구축하기 위해 공식 Swift docker 이미지를 사용합니다.storage-cleaner 디렉터리의 터미널을 사용하여 다음 명령을 실행합니다
$ docker run --rm -it -v $(pwd):/app -w /app swift:5.5 swift build
이것은 마땅히 이 프로젝트의 기초가 되어야 한다.폴더 구조가 다음과 같은지 확인합니다.
.
├── .build/x86_64-unknown-linux-gnu/debug/StorageCleaner
├── Sources/StorageCleaner/main.swift
└── Package.swift
다른 파일과 폴더가 있을 수 있습니다.

☁️ Appwrite 콘솔에 함수 만들기


Appwrite 콘솔에 로그인하여 선택한 항목을 엽니다.사이드바에서 Functions 메뉴를 클릭하세요.기능 계기판에서 Add Function 단추를 누르세요.

대화 상자가 나타납니다.너의 함수에 네가 선택한 이름을 지어라.우리는 storage cleaner라고 부른다.환경 옆에서는 Swift를 사용하고 있으므로 Swift 5.5를 선택합니다.그리고 창설을 클릭하세요.

🧑‍💻 배포 레이블


위 단계에서 "만들기"를 클릭하면 "새 함수 개요"페이지로 이동합니다.
함수의 개관 페이지 밑에 '배치 탭' 단추를 찾을 것입니다.이 버튼을 누르면 배치 설명을 받을 수 있습니다.Manual 탭으로 전환합니다.

먼저 코드 파일을 만들어야 합니다.코드 폴더의 명령줄 및 bash에서 다음 명령을 계속 실행합니다.
$ tar -zcvf code.tar.gz --strip-components 1 -C .build/x86_64-unknown-linux-gnu/ debug/StorageCleaner
파일이 준비되면 '배치 태그' 대화상자의 '수동' 옵션 카드에 코드를 추가합니다.타르.gz 및 in 명령 유형./StorageCleaner.

✅ 탭 활성화


탭을 배치하면 Overview 페이지의 탭 아래에 열거됩니다.거기서 업그레이드 옵션을 찾을 수 있어요.

💡 환경 변수 및 일정 추가


함수 페이지에서 Settings 옵션에서 Overview 옵션으로 전환합니다.선택한 이벤트나 일정에 따라 기능을 터치할 수 있습니다.이 특수한 기능은 안배될 것이다.우리는 그것을 매일 운행하도록 안배할 것이다.
아래쪽으로 스크롤하여 스케줄 텍스트 필드를 찾습니다.여기에 스케줄링을 위한 CRON 구문을 붙여 넣습니다.매일 사용0 0 * * *.
아래Variables 부분에서 Add Variable 단추를 누르세요.다음 변수 추가

  • APPWRITE ENDPOINT - 당신의 APPWRITE 단점 (localhost가 아닌 기기의 IP 주소 사용)

  • APPWRITE API 키 - files.readfiles.write 권한이 있는 APPWRITE API 키

  • 만료 일수 - 파일 만료 일수
  • 마지막으로 업데이트를 클릭하세요.

    ✨️ 작동 확인


    모든 것이 정상적인지 확인하려면 개관 옵션 카드에서 Execute Now 단추를 눌러 주십시오.그런 다음 Logs 탭에 액세스하여 출력 또는 오류가 예상한 대로 되었는지 확인합니다.

    📚️ 리소스


    당신이 이 문장을 좋아하길 바랍니다!저희는 기부를 사랑하고 저희open issuesongoing RFCs를 보시기를 권장합니다.
    만약 당신이 어느 곳에 갇히면 언제든지 저희friendly support channelshumans run에게 연락 주세요.👩‍💻.
    다음은 보다 자세한 정보를 얻기 위한 몇 가지 편리한 링크입니다.
  • Appwrite Contribution Guide
  • Appwrite Github
  • Appwrite Documentation
  • 좋은 웹페이지 즐겨찾기