공유 예약 만들기


이 문서에서는 여러 프로젝트 간에 공유되는 예약인 공유 예약을 만들고 조직에서 공유 예약을 사용할 수 있는 프로젝트를 관리하는 방법을 설명합니다.

공유 예약은 예약을 호스팅한 프로젝트(소유자 프로젝트) 및 예약이 공유된 프로젝트(소비자 프로젝트)에서 사용할 수 있습니다. 조직에 동일한 속성이 예약된 가상 머신(VM) 인스턴스가 필요한 프로젝트가 여러 개 있는 경우 공유 예약을 사용합니다. 공유 예약을 사용하면 예약의 사용률을 개선하고 생성해야 할 예약 수를 줄일 수 있습니다. 예약에 대한 자세한 내용은 Compute Engine 영역별 리소스 예약을 참조하세요.

예약을 만드는 다른 방법은 다음 페이지를 참조하세요.

  • 현재 프로젝트에 1년 또는 3년 약정이 있으면 예약된 리소스에 해당 약정 사용 할인(CUD)이 자동으로 적용됩니다. 또한 약정을 구매할 때 예약을 만들고 약정에 연결할 수 있습니다. 자세한 내용은 약정에 예약 연결을 참조하세요.

  • 단일 프로젝트에서만 사용할 수 있는 예약을 만들려면 단일 프로젝트에 예약 만들기를 참조하세요.

시작하기 전에

  • 예약에 대해서는 요구사항제한사항을 참조하세요.
  • 공유 예약은 할당량 요구사항제한사항을 참조하세요.
  • 조직 정책 관리자가 설정한 공유 예약 소유자 프로젝트(compute.sharedReservationsOwnerProjects) 조직 정책 제약조건의 허용 목록에 공유 예약을 만드는 데 사용하는 프로젝트가 추가되어 있는지 확인합니다. 이 허용 목록은 기본적으로 비어 있으므로 조직에서 하나 이상의 프로젝트에 이 권한을 부여하기 전까지는 공유 예약을 만들 수 없습니다. 조직 정책 제약조건을 보고 수정하는 방법에 대한 자세한 내용은 이 문서의 프로젝트에서 공유 예약 생성 및 수정에 대한 허용 및 제한을 참조하세요.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Go

      로컬 개발 환경에서 이 페이지의 Go 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Java

      로컬 개발 환경에서 이 페이지의 Java 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Node.js

      로컬 개발 환경에서 이 페이지의 Node.js 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Python

      로컬 개발 환경에서 이 페이지의 Python 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참고하세요.

필요한 역할

공유 예약을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 공유 예약을 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

공유 예약을 만들려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 compute.reservations.create 권한
  • 조직 정책 보기: 조직에 대한 orgpolicy.policy.get 권한
  • 조직 정책 수정: 조직에 대한 orgpolicy.policy.set 권한
  • 인스턴스 템플릿을 지정하려는 경우: 인스턴스 템플릿에 대한 compute.instanceTemplates.useReadOnly 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

권장사항

공유 예약을 만들 때는 다음 권장사항을 따르는 것이 좋습니다. 이러한 권장사항을 따르면 조직에서 공유 예약의 관리 기능과 활용성을 최적화할 수 있습니다.

  • 소유자 프로젝트에서 공유 예약을 만들지만 이를 사용하지 않도록 합니다.
    • 프로젝트 간에 지출을 분산하려면 소비자 프로젝트만 공유 예약을 사용하는 것이 좋습니다. 소유자 프로젝트는 공유 예약을 만드는 데만 사용되어야 합니다.
    • 공유 예약을 만들 때 소유자 프로젝트에 예약할 총 리소스에 대한 충분한 할당량이 있어야 합니다. 그런 다음 예약이 생성된 후에는 소유자 프로젝트에 사용하려는 예약된 리소스에 대한 할당량이 있어야 합니다. 자세한 내용은 공유 예약의 추가 할당량 요구사항을 참조하세요.
  • 공유 예약을 생성할 수 있는 조직 내 프로젝트 수를 최소화합니다. 공유 예약 소유자 프로젝트(compute.sharedReservationsOwnerProjects) 조직 정책 제약조건을 통해 이를 제어할 수 있습니다.
    • 각 프로젝트에서 생성된 예약만 나열할 수 있습니다. 즉, 공유 예약은 소유자 프로젝트에만 나열되며 각 프로젝트와 공유된 예약을 나열하거나 각 조직의 모든 공유 예약을 나열할 수 없습니다. 따라서 소유자 프로젝트가 몇 개만 있으면 공유 예약을 더 쉽게 모니터링하고 관리할 수 있습니다.
    • 공유 예약 공유를 몇 개의 프로젝트로만 제한하여 예약된 리소스의 할당량을 더 쉽게 관리합니다.
    • 자세한 내용은 프로젝트의 공유 예약 생성 및 수정 허용 및 제한을 참조하세요.
  • 동일한 VM 속성을 갖는 개별 공유 예약 수를 최소화합니다.
    • 한 조직에서 각각의 고유한 VM 속성 조합의 공유 예약을 최대 100개까지 사용할 수 있습니다. 따라서 VM 속성이 동일한 공유 예약의 수를 최소화하면 이 같은 한도를 완화하는 데 도움이 됩니다.
    • 공유 예약 수가 적으면 관리 효율성이 향상됩니다.
  • 동일한 Cloud Billing 계정의 프로젝트 간에만 예약을 공유합니다.
    • 소유자 프로젝트와 동일한 Cloud Billing 계정이 있는 소비자 프로젝트와만 공유되도록 각 공유 예약을 제한합니다. 이렇게 하면 예약이 소비되는지 여부와 결제 방법을 쉽게 확인할 수 있습니다.
    • CUD 공유를 사용 설정했고 Cloud Billing 계정 수준에서 CUD를 얻을 수 있는 자격이 있을 때 예약 소비에 따라 제공되는 CUD를 극대화하기 위해서는 공유 예약을 해당 약정의 Cloud Billing 계정으로 제한합니다. 이렇게 하면 공유 예약을 만들고 소비하는 프로젝트 간에 결제를 일관적으로 유지할 수 있습니다.
  • 미래용 예약 요청의 경우 요청하는 총 VM 수를 신중하게 검토하세요.
    • 미래용 예약 요청을 만드는 경우 다음 사항을 모두 설명하는 VM의 총 개수를 요청해야 합니다.
      • 미래에 이미 존재할 일치하는 모든 예약된 VM
      • 미래에 이미 존재할 일치하는 모든 예약되지 않은 VM
      • 미래에 이미 존재할 일치하는 미사용 온디맨드 예약
      • 미래에 예약하려는 사용량의 증가

      예를 들어 미래에 10개의 추가 VM이 필요하고 미래에 이미 다음 리소스가 있다고 가정해 보겠습니다.

      • 일치하는 예약된 VM 40개
      • 일치하는 예약되지 않은 VM 50개

      또는

      • 일치하는 예약된 VM 40개
      • 일치하는 미사용 온디맨드 예약 50개

      향후 기존 사용량에 이미 일치하는 VM과 예약이 최대 90개까지 추가되고 VM이 10개 더 필요하므로 미래용 예약 요청에서 총 100개를 지정해야 합니다.

      자세한 내용은 예약된 리소스 수 및 프로비저닝을 참조하세요.

프로젝트의 공유 예약 생성 및 수정 허용 및 제한

기본적으로 프로젝트는 조직 내에서 공유 예약을 만들거나 수정하도록 허용되지 않습니다. 공유 예약을 만들고 수정하도록 허용하려면 공유 예약 소유자 프로젝트(compute.sharedReservationsOwnerProjects) 조직 정책 제약조건에 프로젝트를 추가합니다. 조직 정책 제약조건에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.

다음 단계를 사용하여 공유 예약 소유자 프로젝트(compute.sharedReservationsOwnerProjects) 조직 정책 제약조건을 보고 수정합니다.

공유 예약 조직 정책 제약조건 보기

공유 예약 만들기 및 수정이 허용되는 프로젝트를 보려면 Google Cloud 콘솔 또는 gcloud CLI를 사용합니다.

콘솔

공유 예약 소유자 프로젝트 제약조건을 사용하여 조직 정책 보기 단계를 수행합니다.

gcloud

compute.sharedReservationsOwnerProjects 제약조건으로 공유 예약을 만들고 수정할 수 있는 프로젝트를 확인하려면 다음을 수행하세요.

  1. gcloud resource-manager org-policies describe 명령어를 사용하여 조직 정책을 policy.yaml 파일로 다운로드합니다.

    gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
    

    ORGANIZATION_ID를 조직의 조직 ID로 바꿉니다.

  2. 텍스트 편집기를 사용해서 policy.yaml 파일을 열고 compute.sharedReservationsOwnerProjects 제약조건을 확인합니다. 공유 예약을 만들고 수정하도록 허용되는 프로젝트가 allowedValues 아래에 나열됩니다.

    ...
    constraint: constraints/compute.sharedReservationsOwnerProjects
    listPolicy:
      allowedValues:
      - projects/PROJECT_NUMBER_1
      - projects/PROJECT_NUMBER_2
      - projects/PROJECT_NUMBER_3
    ...
    

    여기서 PROJECT_NUMBER_1, PROJECT_NUMBER_2, PROJECT_NUMBER_3는 공유 예약을 만들도록 허용하는 조직 내 유일한 프로젝트의 프로젝트 번호입니다.

  3. 선택사항: policy.yaml 파일을 삭제합니다.

    • Linux 또는 macOS 터미널을 사용하는 경우 다음 명령어를 사용합니다.

      rm policy.yaml
      
    • Windows 터미널을 사용하는 경우 다음 명령어를 사용합니다.

      del policy.yaml
      

공유 예약 조직 정책 제약조건 수정

공유 예약 만들기 및 수정이 허용되는 프로젝트를 수정하려면 Google Cloud 콘솔 또는 gcloud CLI를 사용합니다.

콘솔

공유 예약 소유자 프로젝트 제약조건을 사용해서 목록 제약조건에 대한 정책 맞춤설정 단계를 참조하세요.

gcloud

compute.sharedReservationsOwnerProjects 제약조건으로 공유 예약을 만들고 수정할 수 있는 프로젝트를 수정하려면 다음 메서드 중 하나를 사용합니다.

  • 공유 예약을 만들고 수정할 수 있는 권한을 단일 프로젝트에 부여하려면 gcloud resource-manager org-policies allow 명령어를 사용합니다. 이 권한을 부여할 프로젝트마다 이 명령어를 반복하면 됩니다.

    gcloud resource-manager org-policies allow compute.sharedReservationsOwnerProjects projects/PROJECT_NUMBER \
        --organization=ORGANIZATION_ID
    

    다음을 바꿉니다.

    • PROJECT_NUMBER: 공유 예약을 만들고 수정하는 것을 허용할 조직 프로젝트의 (프로젝트 ID가 아닌) 프로젝트 번호입니다.
    • ORGANIZATION_ID: 조직의 조직 ID입니다.
  • 공유 예약을 만들고 수정할 수 있는 권한을 여러 프로젝트에 부여하거나 취소하려면 조직 정책 제약조건을 바꿉니다.

    1. 조직 정책을 policy.yaml 파일로 다운로드하려면 gcloud resource-manager org-policies describe 명령어를 사용합니다.

      gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
      

      ORGANIZATION_ID를 조직의 조직 ID로 바꿉니다.

    2. allowedValues에서 공유 예약을 만들고 수정하는 것을 허용할 모든 프로젝트가 compute.sharedReservationsOwnerProjects 제약조건에 나열되도록 텍스트 편집기를 사용하여 policy.yaml 파일을 수정합니다.

      • 공유 예약을 만들고 수정할 수 있는 권한을 부여할 각 프로젝트에 대해 allowedValues 아래의 새 줄에 프로젝트를 추가합니다.
      • 공유 예약을 만들고 수정할 수 있는 권한을 취소할 각 프로젝트에 대해 해당 줄을 삭제합니다.

      완료되었으면 policy.yaml 파일이 다음과 비슷하게 표시되는지 확인합니다.

      ...
      constraint: constraints/compute.sharedReservationsOwnerProjects
      listPolicy:
        allowedValues:
        - projects/PROJECT_NUMBER_1
        - projects/PROJECT_NUMBER_2
        - projects/PROJECT_NUMBER_3
      ...
      

      여기에서 PROJECT_NUMBER_1, PROJECT_NUMBER_2, PROJECT_NUMBER_3은 공유 예약을 만들고 수정하는 것을 허용할 조직 내 모든 프로젝트의 (프로젝트 ID가 아닌) 프로젝트 번호입니다.

    3. policy.yaml 파일을 저장하고 텍스트 편집기를 닫습니다.

    4. 변경사항으로 조직 정책을 업데이트하려면 gcloud resource-manager org-policies set-policy 명령어를 사용합니다.

      gcloud resource-manager org-policies set-policy --organization=ORGANIZATION_ID policy.yaml
      

      ORGANIZATION_ID를 조직의 조직 ID로 바꿉니다.

    5. 선택사항: policy.yaml 파일을 삭제합니다.

      • Linux 또는 macOS 터미널을 사용하는 경우 다음 명령어를 사용합니다.

        rm policy.yaml
        
      • Windows 터미널을 사용하는 경우 다음 명령어를 사용합니다.

        del policy.yaml
        

수정사항이 적용될 때까지 몇 분 정도 기다려야 할 수 있습니다.

공유 예약 만들기

이 섹션에서는 공유 예약을 만드는 방법을 설명합니다. 공유 예약을 만든 후에는 소유자 프로젝트에서만 수정할 수 있지만 소유자 프로젝트나 모든 소비자 프로젝트에서 공유 예약의 리소스를 사용할 수 있습니다.

예약을 사용하려면 VM에는 예약과 정확히 일치하는 속성이 있어야 합니다. 예약하려는 VM의 속성을 지정하려면 이 문서에서 다음 섹션 중 하나를 선택합니다.

  • 권장사항: 인스턴스 템플릿 지정

    이 섹션에서는 인스턴스 템플릿을 사용하여 공유 예약의 속성을 정의하는 방법을 설명합니다. 인스턴스 템플릿을 사용하면 예약의 속성 및 동일한 위치에서 예약을 사용할 수 있는 VM을 정의할 수 있습니다. 그러나 템플릿은 프로젝트에 따라 다르므로 동일한 템플릿을 사용하여 예약을 만든 프로젝트 외부에서 예약을 사용할 수 있는 VM을 만들 수 없습니다. 예약이 공유된 프로젝트의 경우 해당 프로젝트에서 유사한 템플릿을 만들거나 속성을 직접 지정하여 VM을 만들어야 합니다.

  • 기존 VM 지정

    이 섹션에서는 기존 VM을 사용하여 예약 속성을 정의하는 방법을 설명합니다. 기존 VM 속성을 사용하면 참조 VM과 일치하는 속성이 있는 VM을 만들어 예약을 사용할 수 있습니다.

  • 속성 직접 지정

    이 섹션에서는 공유 예약의 속성을 직접 정의하는 방법을 설명합니다. 이 방법을 사용하려면 VM과 예약의 속성이 정확히 일치하도록 직접 확인해야 합니다. 일치하지 않는 속성이 있으면 사용할 수 없습니다.

기본적으로 예약은 일치하는 속성이 있는 모든 VM에서 자동으로 사용될 수 있습니다. 예약 사용을 제어하려면 다음 중 하나 이상을 수행합니다.

인스턴스 템플릿 지정

인스턴스 템플릿을 지정하여 예약을 만들려면 먼저 다음을 확인합니다.

  • 인스턴스 템플릿에는 프로젝트별 설정이 포함되어 있으므로 동일한 프로젝트 내의 인스턴스 템플릿에만 액세스하고 사용할 수 있습니다. 인스턴스 템플릿을 지정하여 공유 예약을 만드는 경우 동일한 템플릿을 사용하여 예약을 만든 프로젝트 외부에서 예약을 사용할 수 있는 VM을 만들 수 없습니다.

  • 인스턴스 템플릿 내의 리소스와 동일한 리전 및 영역에 예약을 만듭니다. 인스턴스 템플릿(예: 머신 유형 또는 Persistent Disk 볼륨)에 지정된 모든 리전 또는 영역별 리소스는 템플릿 사용을 해당 리소스가 있는 위치로 제한합니다. 예를 들어 인스턴스 템플릿이 us-central1-a 영역에 기존 Persistent Disk 볼륨을 지정하면 같은 영역에서만 예약을 만들 수 있습니다. 기존 템플릿이 템플릿을 특정 리전 또는 영역에 결합하는 리소스를 지정하는지 확인하려면 템플릿의 세부정보를 보고 해당 템플릿 내에서 리전별 리소스 또는 영역별 리소스에 대한 참조를 확인합니다.

인스턴스 템플릿을 지정하여 공유 예약을 만들려면 다음 옵션 중 하나를 선택합니다.

콘솔

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

    예약으로 이동

    예약 페이지가 표시됩니다.

  2. 예약 만들기를 클릭합니다.

    예약 만들기 페이지가 표시됩니다.

  3. 이름에 예약 이름을 입력합니다.

  4. 리전영역에 리소스를 예약할 리전과 영역을 선택합니다.

  5. 공유 유형 섹션에서 다음을 수행합니다.

    1. 공유 예약을 지정하려면 공유를 선택합니다.

    2. 프로젝트 추가를 클릭하고 예약을 공유하려는 현재 프로젝트의 조직에서 프로젝트를 선택합니다. 소비자 프로젝트를 최대 100개까지 선택할 수 있습니다.

  6. 선택사항: Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 Google Cloud 서비스 섹션에서 예약 공유를 선택합니다.

  7. VM 인스턴스와 함께 사용 섹션에서 다음 옵션 중 하나를 선택합니다.

    • 일치하는 VM 인스턴스에서 이 예약을 자동으로 사용할 수 있게 하려면 예약 자동 사용을 선택합니다(아직 선택하지 않은 경우).

    • 이름을 통해 이 예약을 명시적으로 타겟팅하는 일치하는 VM을 만들 때만 이 예약의 리소스를 소비하려면 특정 예약 선택을 선택합니다.

  8. VM 인스턴스 수에 예약할 VM 수를 입력합니다.

  9. 머신 구성 섹션에서 인스턴스 템플릿 사용을 선택한 후 원하는 인스턴스 템플릿을 선택합니다. 리전 인스턴스 템플릿을 선택하면 템플릿의 리전과 동일한 리전 내에서만 리소스를 예약할 수 있습니다.

  10. 자동 삭제 섹션에서 Compute Engine이 특정 날짜와 시간에 예약을 자동으로 삭제하도록 자동 삭제 옵션을 사용 설정할 수 있습니다. 예약 자동 삭제는 예약 사용을 중지할 때 불필요한 비용이 발생하는 것을 방지하는 데 유용할 수 있습니다.

  11. 예약을 만들려면 만들기를 클릭합니다.

    예약 페이지가 열립니다. 공유 예약을 만드는 데 최대 1분이 걸릴 수 있습니다.

gcloud

공유 예약을 만들려면 gcloud compute reservations create 명령어--share-setting=projects--share-with 플래그와 함께 사용합니다.

인스턴스 템플릿을 지정하고 플래그 옵션은 포함하지 않고 공유 예약을 만들려면 다음 명령어를 실행합니다.

gcloud compute reservations create RESERVATION_NAME \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

다음을 바꿉니다.

  • RESERVATION_NAME: 생성할 예약의 이름입니다.

  • PROJECT_ID: 인스턴스 템플릿이 있고 리소스를 예약하려는 프로젝트의 ID

  • CONSUMER_PROJECT_IDS: 이 예약을 사용할 수 있는 프로젝트 ID의 쉼표로 구분된 목록(예: project-1,project-2). 소비자 프로젝트를 최대 100개까지 포함할 수 있습니다. 이러한 프로젝트는 소유자 프로젝트와 동일한 조직에 있어야 합니다. 소유자 프로젝트를 포함하지 마세요. 기본적으로 이미 예약을 사용하도록 허용되어 있습니다.

  • LOCATION: 인스턴스 템플릿의 위치입니다. 다음 값 중 하나를 지정합니다.

    • 전역 인스턴스 템플릿의 경우: global

    • 리전 인스턴스 템플릿의 경우: regions/REGION. REGION을 인스턴스 템플릿이 있는 리전으로 바꿉니다. 리전 인스턴스 템플릿을 지정하면 템플릿의 리전과 동일한 리전 내에서만 VM을 예약할 수 있습니다.

  • INSTANCE_TEMPLATE_NAME: 기존 인스턴스 템플릿의 이름입니다. 인스턴스 템플릿이 A3 머신 유형을 지정하는 경우 --require-specific-reservation 플래그를 포함해야 합니다. 즉, 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있습니다. 자세한 내용은 특정 예약에서 VM 소비하기를 참고하세요.

  • NUMBER_OF_VMS: 예약할 VM 수

  • ZONE: 리소스를 예약할 영역

예를 들어 us-central1-a 영역에 전역 인스턴스 템플릿을 지정하여 예약을 만들려면 예약을 project-1project-2 프로젝트와 공유하고 각각 4개의 vCPU가 있는 사전 정의된 머신 유형 N2를 사용하는 VM 10개를 예약하려면 다음 명령어를 실행합니다.

gcloud compute reservations create my-reservation \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --source-instance-template=projects/example-project/global/example-instance-template \
    --vm-count=10 \
    --zone=us-central1-a

선택적으로 다음 중 하나 이상을 수행할 수 있습니다.

  • 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있도록 지정하려면 --require-specific-reservation 플래그를 포함합니다.

    gcloud compute reservations create RESERVATION_NAME \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 --reservation-sharing-policy=ALLOW_ALL 플래그와 함께 gcloud beta compute reservations create 명령어를 사용합니다.

    gcloud beta compute reservations create RESERVATION_NAME \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Compute Engine이 예약을 자동으로 삭제하도록 하려면 다음 방법 중 하나를 선택합니다.

    • 특정 날짜와 시간에 예약을 삭제하려면 --delete-at-time 플래그와 함께 gcloud beta compute reservations create 명령어를 사용합니다.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AT_TIME을 다음과 같은 RFC 3339 타임스탬프 형식의 날짜와 시간으로 바꿉니다.

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      다음을 바꿉니다.

      • YYYY-MM-DD: 4자리 연도, 2자리 월, 2자리 일이 하이픈(-)으로 구분된 형식의 날짜입니다.

      • HH:MM:SS: 24시간제의 2자리 시간, 2자리 분, 2자리 초가 콜론(:)으로 구분된 형식의 시간입니다.

      • OFFSET: 협정 세계시(UTC)의 오프셋 형식으로 지정된 시간대입니다. 예를 들어 태평양 표준시(PST)를 사용하려면 -08:00을 지정합니다. 또는 오프셋을 사용하지 않으려면 Z를 지정합니다.

    • 특정 기간이 지난 후 예약을 삭제하려면 gcloud beta compute reservations create 명령어--delete-after-duration 플래그와 함께 사용합니다.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AFTER_DURATION을 일, 시간, 분 또는 초의 기간으로 바꿉니다. 예를 들어 30분에 30m을 지정하고 1일 2시간 3분 4초에 1d2h3m4s를 지정합니다.

Go

import (
	"context"
	"fmt"
	"io"

	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// Creates shared reservation from given template in particular zone
func createSharedReservation(w io.Writer, client ClientInterface, projectID, baseProjectId, zone, reservationName, sourceTemplate string) error {
	// client, err := compute.NewReservationsRESTClient(ctx)
	// projectID := "your_project_id". Destination of sharing.
	// baseProjectId := "your_project_id2". Project where the reservation will be created.
	// zone := "us-west3-a"
	// reservationName := "your_reservation_name"
	// sourceTemplate: existing template path. Following formats are allowed:
	//  	- projects/{project_id}/global/instanceTemplates/{template_name}
	//  	- projects/{project_id}/regions/{region}/instanceTemplates/{template_name}
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/global/instanceTemplates/instanceTemplate
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/regions/{region}/instanceTemplates/instanceTemplate

	ctx := context.Background()

	shareSettings := map[string]*computepb.ShareSettingsProjectConfig{
		projectID: {ProjectId: proto.String(projectID)},
	}

	req := &computepb.InsertReservationRequest{
		Project: baseProjectId,
		ReservationResource: &computepb.Reservation{
			Name: proto.String(reservationName),
			Zone: proto.String(zone),
			SpecificReservation: &computepb.AllocationSpecificSKUReservation{
				Count:                  proto.Int64(2),
				SourceInstanceTemplate: proto.String(sourceTemplate),
			},
			ShareSettings: &computepb.ShareSettings{
				ProjectMap: shareSettings,
				ShareType:  proto.String("SPECIFIC_PROJECTS"),
			},
		},
		Zone: zone,
	}

	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create reservation: %w", err)
	}

	if op != nil {
		if err = op.Wait(ctx); err != nil {
			return fmt.Errorf("unable to wait for the operation: %w", err)
		}
	}

	fmt.Fprintf(w, "Reservation created\n")

	return nil
}

자바

import com.google.cloud.compute.v1.AllocationSpecificSKUReservation;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Reservation;
import com.google.cloud.compute.v1.ReservationsClient;
import com.google.cloud.compute.v1.ShareSettings;
import com.google.cloud.compute.v1.ShareSettingsProjectConfig;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateSharedReservation {
  private final ReservationsClient reservationsClient;

  // Constructor to inject the ReservationsClient
  public CreateSharedReservation(ReservationsClient reservationsClient) {
    this.reservationsClient = reservationsClient;
  }

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // The ID of the project where you want to reserve resources
    // and where the instance template exists.
    // By default, no projects are allowed to create or modify shared reservations
    // in an organization. Add projects to the Shared Reservations Owner Projects
    // (compute.sharedReservationsOwnerProjects) organization policy constraint
    // to allow them to create and modify shared reservations.
    // For more information visit this page:
    // https://cloud.google.com/compute/docs/instances/reservations-shared#shared_reservation_constraint
    String projectId = "YOUR_PROJECT_ID";
    // Zone in which the reservation resides.
    String zone = "us-central1-a";
    // Name of the reservation to be created.
    String reservationName = "YOUR_RESERVATION_NAME";
    // The URI of the global instance template to be used for creating the reservation.
    String instanceTemplateUri = String.format(
        "projects/%s/global/instanceTemplates/YOUR_INSTANCE_TEMPLATE_NAME", projectId);
    // Number of instances for which capacity needs to be reserved.
    int vmCount = 3;
    // In your main method, create ReservationsClient
    ReservationsClient client = ReservationsClient.create();
    // Create an instance of your class, passing in the client
    CreateSharedReservation creator = new CreateSharedReservation(client);

    creator.createSharedReservation(projectId, zone, reservationName, instanceTemplateUri, vmCount);
  }

  // Creates a shared reservation with the given name in the given zone.
  public void createSharedReservation(
      String projectId, String zone,
      String reservationName, String instanceTemplateUri, int vmCount)
      throws ExecutionException, InterruptedException, TimeoutException {

    ShareSettings shareSettings = ShareSettings.newBuilder()
        .setShareType(String.valueOf(ShareSettings.ShareType.SPECIFIC_PROJECTS))
        // The IDs of projects that can consume this reservation. You can include up to 100
        // consumer projects. These projects must be in the same organization as
        // the owner project. Don't include the owner project. By default, it is already allowed
        // to consume the reservation.
        .putProjectMap("CONSUMER_PROJECT_ID_1", ShareSettingsProjectConfig.newBuilder().build())
        .putProjectMap("CONSUMER_PROJECT_ID_2", ShareSettingsProjectConfig.newBuilder().build())
        .build();

    // Create the reservation.
    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationName)
            .setZone(zone)
            .setSpecificReservationRequired(true)
            .setShareSettings(shareSettings)
            .setSpecificReservation(
                AllocationSpecificSKUReservation.newBuilder()
                    .setCount(vmCount)
                    .setSourceInstanceTemplate(instanceTemplateUri)
                    .build())
            .build();

    // Wait for the create reservation operation to complete.
    Operation response =
        this.reservationsClient.insertAsync(projectId, zone, reservation).get(3, TimeUnit.MINUTES);

    if (response.hasError()) {
      System.out.println("Reservation creation failed!" + response);
      return;
    }
    System.out.println("Reservation created. Operation Status: " + response.getStatus());
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

/**
 * TODO(developer): Uncomment reservationsClient and zoneOperationsClient before running the sample.
 */
// Instantiate a reservationsClient
// reservationsClient = new computeLib.ReservationsClient();
// Instantiate a zoneOperationsClient
// zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update these variables before running the sample.
 */
// The ID of the project where you want to reserve resources and where the instance template exists.
const projectId = await reservationsClient.getProjectId();
// The zone in which to reserve resources.
const zone = 'us-central1-a';
// The name of the reservation to create.
const reservationName = 'reservation-01';
// The number of VMs to reserve.
const vmsNumber = 3;
// The name of an existing instance template.
const instanceTemplateName = 'global-instance-template-name';
// The location of the instance template.
const location = 'global';

async function callCreateComputeSharedReservation() {
  // Create reservation for 3 VMs in zone us-central1-a by specifying a instance template.
  const specificReservation = new compute.AllocationSpecificSKUReservation({
    count: vmsNumber,
    sourceInstanceTemplate: `projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}`,
  });

  // Create share settings. Share reservation with one customer project.
  const shareSettings = new compute.ShareSettings({
    shareType: 'SPECIFIC_PROJECTS',
    projectMap: {
      // The IDs of projects that can consume this reservation. You can include up to 100 consumer projects.
      // These projects must be in the same organization as the owner project.
      // Don't include the owner project. By default, it is already allowed to consume the reservation.
      consumer_project_id: {
        projectId: 'consumer_project_id',
      },
    },
  });

  // Create a reservation.
  const reservation = new compute.Reservation({
    name: reservationName,
    specificReservation,
    specificReservationRequired: true,
    shareSettings,
  });

  const [response] = await reservationsClient.insert({
    project: projectId,
    reservationResource: reservation,
    zone,
  });

  let operation = response.latestResponse;

  // Wait for the create reservation operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Reservation: ${reservationName} created.`);
  return response;
}

return await callCreateComputeSharedReservation();

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_compute_shared_reservation(
    project_id: str,
    zone: str = "us-central1-a",
    reservation_name="your-reservation-name",
    shared_project_id: str = "shared-project-id",
) -> compute_v1.Reservation:
    """Creates a compute reservation in GCP.
    Args:
        project_id (str): The ID of the Google Cloud project.
        zone (str): The zone to create the reservation.
        reservation_name (str): The name of the reservation to create.
        shared_project_id (str): The ID of the project that the reservation is shared with.
    Returns:
        Reservation object that represents the new reservation.
    """

    instance_properties = compute_v1.AllocationSpecificSKUAllocationReservedInstanceProperties(
        machine_type="n1-standard-1",
        # Optional. Specifies amount of local ssd to reserve with each instance.
        local_ssds=[
            compute_v1.AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk(
                disk_size_gb=375, interface="NVME"
            ),
        ],
    )

    reservation = compute_v1.Reservation(
        name=reservation_name,
        specific_reservation=compute_v1.AllocationSpecificSKUReservation(
            count=3,  # Number of resources that are allocated.
            # If you use source_instance_template, you must exclude the instance_properties field.
            # It can be a full or partial URL.
            # source_instance_template="projects/[PROJECT_ID]/global/instanceTemplates/my-instance-template",
            instance_properties=instance_properties,
        ),
        share_settings=compute_v1.ShareSettings(
            share_type="SPECIFIC_PROJECTS",
            project_map={
                shared_project_id: compute_v1.ShareSettingsProjectConfig(
                    project_id=shared_project_id
                )
            },
        ),
    )

    # Create a client
    client = compute_v1.ReservationsClient()

    operation = client.insert(
        project=project_id,
        zone=zone,
        reservation_resource=reservation,
    )
    wait_for_extended_operation(operation, "Reservation creation")

    reservation = client.get(
        project=project_id, zone=zone, reservation=reservation_name
    )
    shared_project = next(iter(reservation.share_settings.project_map.values()))

    print("Name: ", reservation.name)
    print("STATUS: ", reservation.status)
    print("SHARED PROJECT: ", shared_project)
    # Example response:
    # Name:  your-reservation-name
    # STATUS:  READY
    # SHARED PROJECT:  project_id: "123456789012"

    return reservation

REST

공유 예약을 만들려면 reservations.insert 메서드POST 요청을 실행합니다. 요청 본문에 다음을 포함합니다.

  • projectMap 필드

  • SPECIFIC_PROJECTS로 설정된 shareType 필드

예를 들어 옵션 필드를 포함하지 않고 인스턴스 템플릿을 지정하여 공유 예약을 만들고 2개의 소비자 프로젝트와 예약을 공유하려면 다음 POST 요청을 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
  }
}

다음을 바꿉니다.

  • PROJECT_ID: 인스턴스 템플릿이 있고 리소스를 예약하려는 프로젝트의 ID입니다.

  • ZONE: 리소스를 예약할 영역

  • RESERVATION_NAME: 생성할 예약의 이름입니다.

  • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2: 이 예약을 사용할 수 있는 프로젝트의 ID. 소비자 프로젝트를 최대 100개까지 포함할 수 있습니다. 이러한 프로젝트는 소유자 프로젝트와 동일한 조직에 있어야 합니다. 소유자 프로젝트를 포함하지 마세요. 기본적으로 이미 예약을 사용하도록 허용되어 있습니다.

  • NUMBER_OF_VMS: 예약할 VM 수

  • LOCATION: 인스턴스 템플릿의 위치입니다. 다음 값 중 하나를 지정합니다.

    • 전역 인스턴스 템플릿의 경우: global

    • 리전 인스턴스 템플릿의 경우: regions/REGION. REGION을 인스턴스 템플릿이 있는 리전으로 바꿉니다. 리전 인스턴스 템플릿을 지정하면 템플릿의 리전과 동일한 리전 내에서만 VM을 예약할 수 있습니다.

  • INSTANCE_TEMPLATE_NAME: 기존 인스턴스 템플릿의 이름입니다. 인스턴스 템플릿이 A3 머신 유형을 지정하는 경우 요청 본문에 specificReservationRequired 필드를 포함하고 필드를 true로 설정해야 합니다. 즉, 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있습니다. 자세한 내용은 특정 예약에서 VM 소비하기를 참고하세요.

예를 들어 전역 인스턴스 템플릿을 지정하고 프로젝트 project-1project-2와 예약을 공유하여 영역 us-central1-a에 있는 VM 10개에 대한 예약을 만들려면 다음 POST 명령어를 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "sourceInstanceTemplate": "projects/example-project/global/instanceTemplates/example-instance-template"
  }
}

선택적으로 다음 중 하나 이상을 수행할 수 있습니다.

  • 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있도록 지정하려면 요청 본문에 specificReservationRequired 필드를 포함하고 이 필드를 true로 설정합니다.

    예를 들어 인스턴스 템플릿을 지정하여 특정 예약을 만들고 소비자 프로젝트 2개와 예약을 공유하려면 다음과 같이 요청합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      },
      "specificReservationRequired": true
    }
    
  • Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 POST 요청을 beta.reservations.insert 메서드에 보냅니다. 요청 본문에 serviceShareType 필드를 포함하고 ALLOW_ALL로 설정합니다.

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      }
    }
    
  • Compute Engine이 예약을 자동으로 삭제하도록 하려면 다음 방법 중 하나를 선택합니다.

    • 특정 날짜 및 시간에 예약을 삭제하려면 beta.reservations.insert 메서드POST 요청을 실행합니다. 요청 본문에 deleteAtTime 필드를 포함합니다.

      예를 들어 인스턴스 템플릿을 지정하여 예약을 만들고 특정 날짜와 시간에 예약을 자동 삭제하며 소비자 프로젝트 2개와 예약을 공유하려면 다음과 같이 요청합니다.

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      DELETE_AT_TIME을 다음과 같은 RFC 3339 타임스탬프 형식의 날짜와 시간으로 바꿉니다.

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      다음을 바꿉니다.

      • YYYY-MM-DD: 4자리 연도, 2자리 월, 2자리 일이 하이픈(-)으로 구분된 형식의 날짜입니다.

      • HH:MM:SS: 24시간제의 2자리 시간, 2자리 분, 2자리 초가 콜론(:)으로 구분된 형식의 시간입니다.

      • OFFSET: 협정 세계시(UTC)의 오프셋 형식으로 지정된 시간대입니다. 예를 들어 태평양 표준시(PST)를 사용하려면 -08:00을 지정합니다. 또는 오프셋을 사용하지 않으려면 Z를 지정합니다.

    • 특정 기간이 지난 후 예약을 삭제하려면 beta.reservations.insert 메서드POST 요청을 합니다. 요청 본문에 deleteAfterDuration 필드를 포함합니다.

      예를 들어 인스턴스 템플릿을 지정하여 예약을 만들고 특정 기간이 지난 후에 예약을 자동 삭제하며 소비자 프로젝트 2개와 예약을 공유하려면 다음과 같이 요청합니다.

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      DELETE_AFTER_DURATION를 초 단위의 기간으로 바꿉니다. 예를 들어 86,400초(1일)의 경우 86400을 지정합니다.

기존 VM 지정

VM과 동일한 프로젝트 및 영역에 있는 기존 VM을 기반으로만 공유 예약을 만들 수 있습니다.

예약을 만든 후 참조 VM과 일치하는 속성이 있는 VM을 만들어 예약을 사용할 수 있습니다. 다음 중 하나를 수행하여 이 작업을 수행할 수 있습니다.

  • 다음과 같이 인스턴스 템플릿을 만들고 사용합니다.

    1. 참조 VM 속성을 재정의하지 않고 참조 VM을 기반으로 인스턴스 템플릿을 만듭니다.

    2. 다음 중 하나 또는 둘 다 수행하여 새로 만든 템플릿으로 VM을 만듭니다.

  • 다음과 같이 참조 VM과 정확하게 일치하는 속성이 있는 VM을 만듭니다.

    • 소유자 프로젝트에서 만들려는 VM의 속성을 변경하지 않고 참조 VM을 기반으로 VM을 만듭니다.

    • 소비자 프로젝트에서 VM 속성과 참조 VM 속성이 일치하는지 수동으로 확인하면서 VM을 만듭니다.

기존 VM 속성을 사용하는 공유 예약을 만들려면 다음을 수행합니다.

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

    예약으로 이동

  2. 온디맨드 예약 탭(기본값)에서 예약 만들기를 클릭합니다.

    예약 만들기 페이지가 열립니다.

  3. 이름에 예약 이름을 입력합니다.

  4. 리전영역에 리소스를 예약할 리전과 영역을 선택합니다.

  5. 공유 유형 섹션에서 다음을 수행합니다.

    1. 공유 예약을 지정하려면 공유를 선택합니다.

    2. 프로젝트 추가를 클릭한 후 예약을 공유하려는 현재 프로젝트 조직에서 프로젝트를 선택합니다. 소비자 프로젝트를 최대 100개까지 선택할 수 있습니다.

  6. VM 인스턴스와 함께 사용 섹션에서 다음 옵션 중 하나를 선택합니다.

    • 일치하는 VM에서 이 예약을 자동으로 사용할 수 있게 하려면 예약 자동 사용을 선택합니다(아직 선택하지 않은 경우).

    • 이름을 통해 이 예약을 명시적으로 타겟팅하는 일치하는 VM을 만들 때만 이 예약의 리소스를 소비하려면 특정 예약 선택을 선택합니다.

  7. VM 인스턴스 수에 예약할 VM 수를 입력합니다.

  8. 머신 구성 섹션에서 다음을 수행합니다.

    1. 기존 VM 사용을 선택합니다.

    2. 기존 VM에 예약을 만드는 데 사용할 속성이 있는 VM을 선택합니다.

  9. 자동 삭제 섹션에서 Compute Engine이 특정 날짜와 시간에 예약을 자동으로 삭제하도록 자동 삭제 옵션을 사용 설정할 수 있습니다. 예약 자동 삭제는 예약 사용을 중지할 때 불필요한 비용 발생을 방지하는 데 유용할 수 있습니다.

  10. 예약을 만들려면 만들기를 클릭합니다.

    예약 페이지가 열립니다. 예약을 만드는 데 최대 1분이 걸릴 수 있습니다.

속성 직접 지정

속성을 직접 지정하여 공유 예약을 만들려면 다음 옵션 중 하나를 선택합니다.

콘솔

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

    예약으로 이동

  2. 온디맨드 예약 탭(기본값)에서 예약 만들기를 클릭합니다.

  3. 예약 만들기를 클릭합니다.

    예약 만들기 페이지가 표시됩니다.

  4. 이름에 예약 이름을 입력합니다.

  5. 리전영역에 리소스를 예약할 리전과 영역을 선택합니다.

  6. 공유 유형 섹션에서 다음을 수행합니다.

    1. 공유 예약을 지정하려면 공유를 선택합니다.

    2. 프로젝트 추가를 클릭하고 예약을 공유하려는 현재 프로젝트의 조직에서 프로젝트를 선택합니다. 소비자 프로젝트를 최대 100개까지 선택할 수 있습니다.

  7. 선택사항: Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 Google Cloud 서비스 섹션에서 예약 공유를 선택합니다.

  8. VM 인스턴스와 함께 사용 섹션에서 다음 옵션 중 하나를 선택합니다.

    • 일치하는 VM에서 이 예약을 자동으로 사용하도록 허용하려면 예약 자동 사용(기본값)을 선택합니다.

    • 이름을 통해 이 예약을 명시적으로 타겟팅하는 일치하는 VM을 만들 때만 이 예약의 리소스를 소비하려면 특정 예약 선택을 선택합니다.

  9. VM 인스턴스 수에 예약할 VM 수를 입력합니다.

  10. 머신 구성 섹션에서 머신 유형 지정을 선택한 후 다음을 지정합니다.

    1. 머신 계열, 시리즈, 머신 유형에서 머신 계열, 시리즈, 머신 유형을 선택합니다.

    2. 선택사항: 최소 CPU 플랫폼을 지정하거나 N1 VM에 GPU를 연결하려면 다음을 수행합니다.

      1. CPU 플랫폼 및 GPU 섹션을 확장하려면 확장 화살표를 클릭합니다.

      2. 선택사항: 최소 CPU 플랫폼을 지정하려면 CPU 플랫폼에서 옵션을 선택합니다.

      3. 선택사항: N1 VM에 GPU를 연결하려면 GPU 추가를 클릭합니다. 그런 다음 GPU 유형GPU 수에서 각 N1 VM에 연결할 GPU 유형과 수를 선택합니다.

    3. 선택사항: 로컬 SSD 디스크를 추가하려면 다음을 수행합니다.

      1. 디스크 수에서 각 VM의 로컬 SSD 디스크 수를 선택합니다.

      2. 인터페이스 유형에서 로컬 SSD 디스크 인터페이스를 선택합니다.

  11. 자동 삭제 섹션에서는 Compute Engine이 특정 날짜 및 시간에 예약을 자동으로 삭제하도록 자동 삭제 옵션을 사용 설정할 수 있습니다. 예약 자동 삭제는 예약 사용을 중지할 때 불필요한 비용이 발생하는 것을 방지하는 데 유용할 수 있습니다.

  12. 예약을 만들려면 만들기를 클릭합니다.

    예약 페이지가 열립니다. 공유 예약을 만드는 데 최대 1분이 걸릴 수 있습니다.

gcloud

공유 예약을 만들려면 gcloud compute reservations create 명령어--share-setting=projects--share-with 플래그와 함께 사용합니다.

플래그 옵션을 포함하지 않고 속성을 직접 지정하여 공유 예약을 만들려면 다음 명령어를 실행합니다.

gcloud compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

다음을 바꿉니다.

  • RESERVATION_NAME: 생성할 예약의 이름입니다.

  • MACHINE_TYPE: 각 VM에 사용할 머신 유형입니다. A3 머신 유형을 지정하는 경우 --require-specific-reservation 플래그를 포함해야 합니다. 즉, 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있습니다. 자세한 내용은 특정 예약에서 VM 소비하기를 참고하세요.

  • CONSUMER_PROJECT_IDS: 이 예약을 사용할 수 있는 프로젝트 ID의 쉼표로 구분된 목록(예: project-1,project-2). 소비자 프로젝트를 최대 100개까지 포함할 수 있습니다. 이러한 프로젝트는 소유자 프로젝트와 동일한 조직에 있어야 합니다. 소유자 프로젝트를 포함하지 마세요. 기본적으로 이미 예약을 사용하도록 허용되어 있습니다.

  • NUMBER_OF_VMS: 예약할 VM 수

  • ZONE: 리소스를 예약할 영역

예를 들어 us-central1-a 영역에서 각각 vCPU 4개가 포함된 N2 사전 정의된 머신 유형을 사용하고 project-1project-2 프로젝트와 예약을 공유하는 10개의 VM에 대해 예약을 만들려면 다음 명령어를 실행합니다.

gcloud compute reservations create my-reservation \
    --machine-type=n2-standard-4 \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --vm-count=10 \
    --zone=us-central1-a

선택적으로 다음 중 하나 이상을 수행할 수 있습니다.

  • 예약된 N1 VM에 GPU를 연결하려면 --accelerator 플래그를 포함합니다.

    gcloud compute reservations create RESERVATION_NAME \
        --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    다음을 바꿉니다.

  • 예약된 각 VM에 하나 이상의 로컬 SSD 디스크를 추가하려면 하나 이상의 --local-ssd 플래그를 포함합니다. 로컬 SSD 디스크를 최대 24개까지 지정할 수 있습니다. 각 로컬 SSD 디스크는 375GB입니다.

    예를 들어 공유 예약을 만들 때 로컬 SSD 디스크 2개를 지정하려면 다음과 같이 --local-ssd 플래그 2개를 포함합니다.

    gcloud compute reservations create RESERVATION_NAME \
        --local-ssd=size=375,interface=INTERFACE_1 \
        --local-ssd=size=375,interface=INTERFACE_2 \
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    INTERFACE_1INTERFACE_2를 각 로컬 SSD 디스크에서 사용할 인터페이스 유형으로 바꿉니다. 다음 값 중 하나를 지정합니다.

    • NVME 디스크 인터페이스: nvme

    • SCSI 디스크 인터페이스: scsi

    예약된 VM에 지정되는 머신 유형이 선택된 디스크 인터페이스를 지원하는지 확인합니다. 그렇지 않으면 예약 만들기가 실패합니다. 자세한 내용은 디스크 인터페이스 선택 방법을 참조하세요.

  • 영역의 기본 CPU 플랫폼 대신 예약된 VM에 특정 최소 CPU 플랫폼이 사용되도록 하려면 --min-cpu-platform 플래그를 포함합니다.

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --min-cpu-platform="MIN_CPU_PLATFORM" \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    MIN_CPU_PLATFORM을 최소 CPU 플랫폼으로 바꿉니다. 리소스를 예약하는 영역에서 CPU 플랫폼을 사용할 수 있는지 확인하려면 영역별 사용 가능한 CPU 플랫폼을 확인합니다.

  • 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있도록 지정하려면 --require-specific-reservation 플래그를 포함합니다.

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 --reservation-sharing-policy=ALLOW_ALL 플래그와 함께 gcloud beta compute reservations create 명령어를 사용합니다.

    gcloud beta compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Compute Engine이 예약을 자동으로 삭제하도록 하려면 다음 방법 중 하나를 선택합니다.

    • 특정 날짜와 시간에 예약을 삭제하려면 --delete-at-time 플래그와 함께 gcloud beta compute reservations create 명령어를 사용합니다.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AT_TIME을 다음과 같은 RFC 3339 타임스탬프 형식의 날짜와 시간으로 바꿉니다.

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      다음을 바꿉니다.

      • YYYY-MM-DD: 4자리 연도, 2자리 월, 2자리 일이 하이픈(-)으로 구분된 형식의 날짜입니다.

      • HH:MM:SS: 24시간제의 2자리 시간, 2자리 분, 2자리 초가 콜론(:)으로 구분된 형식의 시간입니다.

      • OFFSET: 협정 세계시(UTC)의 오프셋 형식으로 지정된 시간대입니다. 예를 들어 태평양 표준시(PST)를 사용하려면 -08:00을 지정합니다. 또는 오프셋을 사용하지 않으려면 Z를 지정합니다.

    • 특정 기간이 지난 후 예약을 삭제하려면 gcloud beta compute reservations create 명령어--delete-after-duration 플래그와 함께 사용합니다.

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AFTER_DURATION을 일, 시간, 분 또는 초의 기간으로 바꿉니다. 예를 들어 30분에 30m을 지정하고 1일 2시간 3분 4초에 1d2h3m4s를 지정합니다.

Terraform

예약을 만들려면 google_compute_reservation Terraform 리소스를 사용합니다. 공유 예약을 지정하려면 share_settings 블록을 정의합니다.

  • share_type 필드를 SPECIFIC_PROJECTS로 설정합니다.
  • project_map 블록에서 이 예약을 공유할 프로젝트의 프로젝트 ID를 지정합니다.

Terraform 사용 방법에 대한 자세한 내용은 Google Cloud에서 Terraform 사용하기를 참조하세요.

REST

공유 예약을 만들려면 reservations.insert 메서드POST 요청을 실행합니다. 요청 본문에 다음을 포함합니다.

  • projectMap 필드

  • SPECIFIC_PROJECTS로 설정된 shareType 필드

예를 들어 옵션 필드를 포함하지 않고 공유 예약을 만들고 2개의 소비자 프로젝트와 예약을 공유하려면 다음 POST 요청을 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "instanceProperties": {
      "machineType": "MACHINE_TYPE"
    }
  }
}

다음을 바꿉니다.

  • PROJECT_ID: 리소스를 예약하려는 프로젝트의 ID입니다.

  • ZONE: 리소스를 예약할 영역

  • RESERVATION_NAME: 생성할 예약의 이름입니다.

  • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2: 이 예약을 사용할 수 있는 프로젝트의 ID. 소비자 프로젝트를 최대 100개까지 포함할 수 있습니다. 이러한 프로젝트는 소유자 프로젝트와 동일한 조직에 있어야 합니다. 소유자 프로젝트를 포함하지 마세요. 기본적으로 이미 예약을 사용하도록 허용되어 있습니다.

  • NUMBER_OF_VMS: 예약할 VM 수

  • MACHINE_TYPE: 각 VM에 사용할 머신 유형입니다. A3 머신 유형을 지정하는 경우 요청 본문에 specificReservationRequired 필드를 포함하고 필드를 true로 설정해야 합니다. 즉, 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있습니다.

예를 들어 us-central1-a 영역에 전역 인스턴스 템플릿을 지정하여 예약을 만들려면 예약을 project-1project-2 프로젝트와 공유하고 각각 4개의 vCPU가 있는 사전 정의된 머신 유형 N2를 사용하는 VM 10개를 예약하려면 다음 POST 요청을 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "instanceProperties": {
      "machineType": "n2-standard-4",
    }
  }
}

선택적으로 다음 중 하나 이상을 수행할 수 있습니다.

  • 예약된 N1 VM에 GPU를 연결하려면 요청 본문에 guestAccelerators 필드를 포함합니다.

    예를 들어 소비자 프로젝트 2개와 공유되는 예약을 만들고 GPU를 예약된 N1 VM에 연결하려면 다음과 같이 요청합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "guestAccelerators": [
            {
              "acceleratorCount": NUMBER_OF_ACCELERATORS,
              "acceleratorType": "ACCELERATOR_TYPE"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

    다음을 바꿉니다.

  • 예약된 각 VM에 하나 이상의 로컬 SSD 디스크를 추가하려면 요청 본문에 localSsds 필드를 포함합니다. 로컬 SSD 디스크를 최대 24개까지 지정할 수 있습니다. 각 로컬 SSD 디스크는 375GB입니다.

    예를 들어 로컬 SSD 디스크 2개와 소비자 프로젝트 2개를 지정하면서 공유 예약을 만들려면 다음과 같이 요청합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "localSsds": [
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_1"
            },
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_2"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

    INTERFACE_1INTERFACE_2를 각 로컬 SSD 디스크에서 사용할 인터페이스 유형으로 바꿉니다. 다음 값 중 하나를 지정합니다.

    • NVME 디스크 인터페이스: NVME

    • SCSI 디스크 인터페이스: SCSI

    예약된 VM에 지정되는 머신 유형이 선택된 디스크 인터페이스를 지원하는지 확인합니다. 그렇지 않으면 예약 만들기가 실패합니다. 자세한 내용은 디스크 인터페이스 선택 방법을 참조하세요.

  • 영역의 기본 CPU 플랫폼 대신 예약된 VM에 특정 최소 CPU 플랫폼이 사용되도록 하려면 요청 본문에 minCpuPlatform 필드를 포함합니다.

    예를 들어 최소 CPU 플랫폼과 소비자 프로젝트 2개를 지정하면서 공유 예약을 만들려면 다음과 같이 요청합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE",
          "minCpuPlatform": "MIN_CPU_PLATFORM"
        }
      }
    }
    

    MIN_CPU_PLATFORM을 최소 CPU 플랫폼으로 바꿉니다. 리소스를 예약하는 영역에서 CPU 플랫폼을 사용할 수 있는지 확인하려면 영역별 사용 가능한 CPU 플랫폼을 확인합니다.

  • 정확히 이 예약을 타겟팅하는 VM만 이를 사용할 수 있도록 지정하려면 요청 본문에 specificReservationRequired 필드를 포함하고 이 필드를 true로 설정합니다.

    예를 들어 특정 예약을 만들고 소비자 프로젝트 2개와 공유하려면 다음과 같이 요청합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      },
      "specificReservationRequired": true
    }
    
  • Vertex AI의 커스텀 학습 작업 또는 예측 작업에서 GPU VM 예약을 사용할 수 있게 하려면 POST 요청을 beta.reservations.insert 메서드에 보냅니다. 요청 본문에 serviceShareType 필드를 포함하고 ALLOW_ALL로 설정합니다.

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    
  • Compute Engine이 예약을 자동으로 삭제하도록 하려면 다음 방법 중 하나를 선택합니다.

    • 특정 날짜 및 시간에 예약을 삭제하려면 beta.reservations.insert 메서드POST 요청을 실행합니다. 요청 본문에 deleteAtTime 필드를 포함합니다.

      예를 들어 예약을 삭제할 날짜와 시간을 지정하면서 예약을 만들고 소비자 프로젝트 2개와 예약을 공유하려면 다음과 같이 요청합니다.

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      DELETE_AT_TIME을 다음과 같은 RFC 3339 타임스탬프 형식의 날짜와 시간으로 바꿉니다.

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      다음을 바꿉니다.

      • YYYY-MM-DD: 4자리 연도, 2자리 월, 2자리 일이 하이픈(-)으로 구분된 형식의 날짜입니다.

      • HH:MM:SS: 24시간제의 2자리 시간, 2자리 분, 2자리 초가 콜론(:)으로 구분된 형식의 시간입니다.

      • OFFSET: 협정 세계시(UTC)의 오프셋 형식으로 지정된 시간대입니다. 예를 들어 태평양 표준시(PST)를 사용하려면 -08:00을 지정합니다. 또는 오프셋을 사용하지 않으려면 Z를 지정합니다.

    • 특정 기간이 지난 후 예약을 삭제하려면 beta.reservations.insert 메서드POST 요청을 합니다. 요청 본문에 deleteAfterDuration 필드를 포함합니다.

      예를 들어 Compute Engine에서 특정 기간 후에 삭제하는 예약을 만들고 소비자 프로젝트 2개와 예약을 공유하려면 다음과 같이 요청합니다.

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      DELETE_AFTER_DURATION를 초 단위의 기간으로 바꿉니다. 예를 들어 86,400초(1일)의 경우 86400을 지정합니다.

문제 해결

예약 생성 문제 해결 방법 알아보기

다음 단계