이 문서는 예약된 Filestore 스냅샷을 알아보거나 만들려는 IT 의사 결정권자, 백업 관리자, 재해 복구(DR) 관리자를 대상으로 합니다.
목표
- Cloud Functions 및 JSON 구성 파일을 구성합니다.
- Cloud Scheduler 작업을 만듭니다.
- 예약된 Filestore 스냅샷을 만들고 라벨을 지정합니다.
- 스냅샷 생성 프로세스를 모니터링합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
배포 모델
다음 다이어그램은 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 위치 목록을 참조하세요.
- 예를 들어 Cloud Scheduler 리소스에서
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 권한을 참조하세요.
서비스 계정을 만들려면 다음 단계를 따르세요.
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
서비스 계정을 만듭니다.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
역할을 서비스 계정에 결합합니다.
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 인스턴스 만들기
사용하려는 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 네트워크 이름
아직 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
: 스냅샷 수
저장소 복제
실습용 저장소를 클론한 후 디렉터리를 입력합니다.
Cloud Shell에서 실습용 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
출력은 다음과 비슷합니다.
Cloning into Filestore-Snapshot-Scheduler
디렉터리를 입력합니다.
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 스냅샷 검증
Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
만든 작업 행에서
작업 > 작업 강제 실행을 클릭합니다.새로고침을 클릭합니다.
- 작업이 성공적으로 실행되면 마지막 실행 결과 열에 마지막으로 성공한 작업의 타임스탬프가 표시됩니다.
작업이 실패하면 다음을 수행합니다.
Cloud Functions 페이지로 이동합니다.
만든 함수 행에서
작업 > 로그 보기를 클릭합니다.오류 메시지를 찾아 그에 따라 문제를 해결합니다.
Google Cloud 콘솔에서 Filestore 인스턴스 페이지로 이동합니다.
인스턴스 목록에서 인스턴스를 선택하고 다음 이름 형식의 스냅샷을 포함하는지 확인합니다.
sched-RETENTION_NAME-DATE-TIME
예를 들면
sched-daily-20220315-120640
입니다.
삭제
이 튜토리얼에서 사용한 리소스 비용이 Cloud Platform 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하세요.프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
다음 단계
- Filestore 스냅샷 자세히 알아보기
- Filestore 백업 자세히 알아보기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기