Filestore 엔터프라이즈 스냅샷 예약


이 문서에서는 Cloud Scheduler를 사용하여 Filestore 스냅샷을 예약하고 보호하는 방법을 보여줍니다.

이 문서는 예약된 Filestore 스냅샷을 알아보거나 만들려는 IT 의사 결정권자, 백업 관리자, 재해 복구(DR) 관리자를 대상으로 합니다.

목표

  • Cloud Functions 및 JSON 구성 파일을 구성합니다.
  • Cloud Scheduler 작업을 만듭니다.
  • 예약된 Filestore 스냅샷을 만들고 라벨을 지정합니다.
  • 스냅샷 생성 프로세스를 모니터링합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 튜토리얼을 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않도록 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build 사용 설정

    API 사용 설정

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. API Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build 사용 설정

    API 사용 설정

배포 모델

다음 다이어그램은 Filestore 스냅샷 Cloud Functions를 지원하는 배포 모델을 보여줍니다.

Filestore 스냅샷 Cloud Functions를 지원하는 배포 모델

Cloud Scheduler 작업은 Cloud Functions와 조정하여 Filestore 스냅샷 및 로그 파일을 예약하고 생성합니다. 스냅샷은 Filestore 공유에서 사용할 수 있습니다.

제한 사항

Filestore 인스턴스의 스냅샷 스케줄러 구성을 준비할 때는 다음 제한사항을 고려하세요.

  • 보존 정책 구성 파일에 정의된 것보다 더 많은 스케줄러 스냅샷이 있거나 보존 정책 구성 파일이 이전보다 더 적은 스냅샷을 유지하도록 업데이트된 경우에도 이 함수는 필요한 경우 단일 스냅샷만 삭제합니다.
  • JSON 구성 파일에서 snapshots의 숫자 값을 줄여도 인스턴스의 중복 스냅샷은 자동으로 삭제되지 않습니다. 설정을 변경하는 경우 중복 스냅샷을 수동으로 삭제해야 합니다.
  • 스냅샷 ID의 한도는 75자이므로 보관 정책 이름은 50자로 제한됩니다.

개발 환경 준비

이 섹션에서는 환경 변수를 설정하고, 저장소를 클론하고, 이 튜토리얼에 필요한 애플리케이션과 파일을 만듭니다.

환경 변수 설정하기

  • Cloud Shell에서 다음 명령어를 입력합니다.
gcloud components update
  • Cloud Shell에서 다음 변수를 만듭니다.

    export PROJECT_ID=PROJECT_ID
    export GCP_REGION=GCP_REGION
    export APP_ENGINE_REGION=APP_ENGINE_REGION
    export FUNCTION_NAME=FUNCTION_NAME
    export SCHEDULER_NAME=SCHEDULER_NAME
    export SCHEDULER_EXPRESSION="SCHEDULER_EXPRESSION"
    export SCHEDULER_TZ=SCHEDULER_TZ
    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: Filestore Enterprise 인스턴스, Cloud 함수, Cloud Scheduler를 설치할 Google Cloud 프로젝트 ID입니다.
    • GCP_REGION: Filestore Enterprise 인스턴스, Cloud 함수, Cloud Scheduler를 설치할 Google Cloud 리전입니다.
    • APP_ENGINE_REGION: App Engine을 설치할 App Engine 위치 목록의 리전입니다. 다음 요구사항을 고려하세요.
      • Google Cloud 프로젝트는 App Engine 인스턴스를 하나만 가질 수 있으며 App Engine 리전은 나중에 변경할 수 없습니다.
      • Cloud Scheduler 작업 및 App Engine 인스턴스는 같은 리전에 있어야 합니다.
        • 예를 들어 Cloud Scheduler 리소스에서 us-central1을 사용하는 경우 App Engine에서 상응하는 us-central을 사용합니다.
        • App Engine은 일부 리전에 고유한 이름 지정 규칙을 적용합니다. 자세한 내용은 App Engine 위치 목록을 참조하세요.
    • FUNCTION_NAME: Cloud 함수에 지정할 이름입니다.
    • SCHEDULER_NAME: Cloud Scheduler에 지정할 이름입니다.
    • SCHEDULER_EXPRESSION: Cloud Scheduler 크론 표현식입니다(예: 10 0 * * *). 자세한 내용은 크론 작업 일정 구성을 참조하세요.
    • SCHEDULER_TZ: tz 데이터베이스 시간대 목록의 이름 형식으로 된 Cloud Scheduler의 시간대입니다(예: America/Los_Angeles).
    • SERVICE_ACCOUNT_NAME: 새로 생성된 서비스 계정 이름입니다(예: scheduler-sa).

서비스 계정 만들기

이 섹션에서는 Cloud 함수 및 Cloud Scheduler 작업을 만들고 관리할 수 있는 전용 서비스 계정을 만듭니다.

이 절차를 수행할 때 서비스 계정에는 다음 권한이 필요합니다.

  • file.instances.get
  • file.snapshots.list
  • file.snapshots.create
  • file.operations.get
  • file.snapshots.delete
  • cloudfunctions.functions.invoke

자세한 내용은 Filestore IAM 권한 또는 Cloud Functions IAM 권한을 참조하세요.

서비스 계정을 만들려면 다음 단계를 따르세요.

  1. Cloud Shell에서 필요한 권한으로 스냅샷 스케줄러의 전용 역할을 만듭니다.

    gcloud iam roles create snapshot_scheduler --project $PROJECT_ID --permissions file.instances.get,file.snapshots.list,file.snapshots.create,file.operations.get,file.snapshots.delete,logging.logEntries.create,cloudfunctions.functions.invoke --stage GA
    
  2. 서비스 계정을 만듭니다.

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
    
  3. 역할을 서비스 계정에 결합합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --role projects/$PROJECT_ID/roles/snapshot_scheduler
    

Filestore Enterprise 인스턴스 만들기

  1. 사용하려는 Filestore Enterprise 인스턴스에 대한 환경 변수를 아직 만들지 않은 경우 Cloud Shell에서 다음 변수를 만듭니다.

    export FILESTORE_INSTANCE_ID=FILESTORE_INSTANCE_ID
    export FILESTORE_SHARE_NAME=SHARE_NAME
    export FILESTORE_SHARE_SIZE=NUMERIC_IN_GB
    export NETWORK_NAME=VPC_NAME
    

    다음을 바꿉니다.

    • FILESTORE_INSTANCE_ID: Filestore Enterprise 인스턴스 이름
    • SHARE_NAME: Filestore Enterprise 인스턴스 공유 이름
    • NUMERIC_IN_GB: Filestore Enterprise 인스턴스 공유 크기(1,024~10,240 사이의 숫자, 256 단위로 증분)
    • VPC_NAME: Filestore Enterprise 인스턴스를 설치할 VPC 네트워크 이름
  2. 아직 Filestore 인스턴스가 없으면 만듭니다.

    gcloud filestore instances create $FILESTORE_INSTANCE_ID --network name=$NETWORK_NAME --file-share=capacity=$FILESTORE_SHARE_SIZE,name=$FILESTORE_SHARE_NAME --tier ENTERPRISE --project=$PROJECT_ID --location=$GCP_REGION
    

자세한 내용은 인스턴스 만들기를 참조하세요.

App Engine 만들기

이 섹션에서는 Google Cloud 프로젝트용 App Engine을 만듭니다. 이렇게 하면 이 튜토리얼 뒷부분에서 Cloud Scheduler 작업을 만들 수 있습니다.

Google Cloud 프로젝트에는 App Engine이 한 개만 있을 수 있으며 나중에 리전을 변경할 수 없습니다.

  • App Engine이 아직 없는 경우 Cloud Shell에서 만듭니다.

    gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
    

JSON 구성 파일 만들기

Cloud Functions 제한사항으로 인해 JSON 구성 파일에 Filestore 인스턴스를 최대 8개까지 포함할 수 있습니다. 스냅샷을 예약할 Filestore 인스턴스가 8개를 초과하는 경우 추가 Cloud Scheduler 작업을 사용합니다.

  • Cloud Shell에서 request.json이라는 새 파일을 만들고 환경에 따라 콘텐츠를 수정합니다.

    {
                "retention_policy": "RETENTION_NAME",
                "instances": [
                    {"instance_path": "projects/PROJECT_ID/locations/GCP_REGION/instances/FILESTORE_INSTANCE_ID/",
                        "snapshots": NUMBER_OF_SNAPSHOTS
                    }
                ]
    }
    

    다음을 바꿉니다.

    • RETENTION_NAME: 스냅샷 이름의 일부가 되는 스냅샷 보관 유형의 이름(예: daily)
    • NUMBER_OF_SNAPSHOTS: 스냅샷 수

저장소 복제

실습용 저장소를 클론한 후 디렉터리를 입력합니다.

  1. Cloud Shell에서 실습용 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
    

    출력은 다음과 비슷합니다.

    Cloning into Filestore-Snapshot-Scheduler
    
  2. 디렉터리를 입력합니다.

    cd Filestore-Snapshot-Scheduler
    

Cloud 함수 만들기

Cloud Shell에서 Cloud 함수 솔루션을 만듭니다.

gcloud functions deploy $FUNCTION_NAME --region $GCP_REGION --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --entry-point main --project $PROJECT_ID

예를 들면 다음과 같습니다.

gcloud functions deploy scheduler_func --region us-central1 --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account scheduler-sa@project1.iam.gserviceaccount.com --entry-point main --project project1

Cloud Scheduler 작업 만들기

Cloud Scheduler 작업은 App Engine 리전과 동일한 리전에 있어야 합니다.

Cloud Shell에서 동일한 Filestore 인스턴스에 하나 이상의 스케줄러가 있는 Cloud Scheduler 작업을 만듭니다.

gcloud scheduler jobs create http $SCHEDULER_NAME --schedule "$SCHEDULER_EXPRESSION" --uri "https://$GCP_REGION-$PROJECT_ID.cloudfunctions.net/$FUNCTION_NAME"  --http-method POST --message-body-from-file ../request.json --oidc-service-account-email $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --time-zone $SCHEDULER_TZ --project $PROJECT_ID

다음 예시에서는 일일 스케줄러가 오후 8시에 실행됩니다.

gcloud scheduler jobs create http daily_scheduler --schedule "20 0 * * *" --uri "https://us-central1-project1.cloudfunctions.net/scheduler_func"  --http-method POST --message-body-from-file ../request.json --oidc-service-account-email scheduler-sa@project1.iam.gserviceaccount.com --time-zone America/Los_angeles --project project1

예약된 Filestore 스냅샷 검증

  1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.

    Cloud Scheduler로 이동

  2. 만든 작업 행에서 작업 > 작업 강제 실행을 클릭합니다.

  3. 새로고침을 클릭합니다.

    • 작업이 성공적으로 실행되면 마지막 실행 결과 열에 마지막으로 성공한 작업의 타임스탬프가 표시됩니다.
    • 작업이 실패하면 다음을 수행합니다.

      1. Cloud Functions 페이지로 이동합니다.

        Cloud Functions로 이동

      2. 만든 함수 행에서 작업 > 로그 보기를 클릭합니다.

      3. 오류 메시지를 찾아 그에 따라 문제를 해결합니다.

  4. Google Cloud 콘솔에서 Filestore 인스턴스 페이지로 이동합니다.

  5. 인스턴스 목록에서 인스턴스를 선택하고 다음 이름 형식의 스냅샷을 포함하는지 확인합니다.

    sched-RETENTION_NAME-DATE-TIME

    예를 들면 sched-daily-20220315-120640입니다.

삭제

이 튜토리얼에서 사용한 리소스 비용이 Cloud Platform 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하세요.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계