gcloud CLI 명령어 스크립팅

명령줄에서 gcloud CLI 명령어 실행 이외에도 스크립트 또는 다른 자동화에서도 이 명령어를 실행할 수 있습니다. Jenkins를 사용하여 Google Cloud Platform 작업 자동화를 실행하는 경우를 예로 들 수 있습니다.

승인

Google Cloud SDK 도구는 두 가지 인증 방법을 지원합니다.

  • 사용자 계정 인증
  • 서비스 계정 승인

단일 시스템에서 스크립트 또는 기타 자동화를 실행하는 경우 사용자 계정 인증을 사용하는 것이 좋습니다.

액세스를 인증하고 다른 일반적인 Cloud SDK 설정 단계를 이행하려면 다음을 수행합니다.

    gcloud init

프로덕션 환경의 시스템에서 스크립트 또는 기타 자동화를 배포하는 경우에는 서비스 계정 승인을 사용하는 것이 좋습니다. 모든 사용자가 root에 액세스할 수 있는 Google Compute Engine 가상 머신 인스턴스에서 gcloud CLI 명령어를 실행하는 경우에도 이 승인 방법을 사용하는 것이 좋습니다.

서비스 계정 승인을 사용하려면 기존 서비스 계정을 사용하거나 Google Cloud Platform Console을 통해 새 서비스 계정을 만듭니다. 서비스 계정 표의 옵션 열에서 연관된 비공개 키를 JSON 형식의 키 파일로 만들고 다운로드하세요.

승인을 실행하려면 gcloud auth activate-service-account를 사용합니다.

    gcloud auth activate-service-account --key-file [KEY_FILE]

인증을 처리하는 gcloud compute ssh를 사용하여 VM 인스턴스에 SSH를 적용할 수 있습니다. gcloud compute config-ssh를 사용하여 SSH 구성 파일을 구성할 수 있습니다.

Cloud SDK 도구 인증에 대한 자세한 안내는 이 종합 가이드를 참조하세요.

프롬프트 중지

일부 gcloud CLI 명령어는 사용자에게 작업 확인을 요청하거나 입력된 명령어에 대한 추가 입력을 요청하는 대화식 명령어입니다.

대부분의 경우, 스크립트나 다른 자동화에서 명령어를 실행하는 경우에는 이 명령어가 바람직하지 않습니다. 구성에서 disable_prompts 속성을 True로 설정하거나 전역 --quiet 또는 -q 플래그를 사용하여 gcloud CLI 명령어에서 프롬프트를 중지할 수 있습니다. 추가 확인 또는 입력이 필요한 경우 대부분의 대화식 명령어에는 기본값이 있습니다. 프롬프트가 중지되면 이 기본값이 사용됩니다.

예:

    gcloud --quiet debug targets list

--quiet 신고는 맨 앞에 삽입됩니다.

출력 처리

스크립트나 다른 자동화에서 gcloud CLI 명령어의 출력을 따라 조건부로 작업을 이행하도록 하려면 다음 사항에 주의하세요.

  • 표준 오류로 표시된 메시지에 의존하지 마세요.

    이러한 메시지는 gcloud CLI 차후 버전에서 변경될 수 있어 자동화가 작동하지 않을 수 있습니다.

  • 표준 출력으로 표시된 메시지의 원시 출력에 의존하지 마세요.

    모든 명령어의 기본 출력은 차후 출시에서 변경될 수 있습니다. --format 플래그로 출력 형식을 --format=json|yaml|csv|text|list 중 하나로 지정하여 반환될 값을 지정하면 해당 변경에 의한 영향을 최소화할 수 있습니다. $ gcloud 주제 형식을 실행하면 더 많은 옵션을 볼 수 있습니다.

    projections를 사용하여 --format의 기본 출력을 수정할 수 있습니다. 보다 세부적으로 지정하려면 --filter 플래그를 사용하여 표현식에 따라 하위 집합 값을 반환합니다. 그러면 해당 반환된 값에 맞게 스크립팅할 수 있습니다.

    출력 형식을 지정하고 출력을 필터링하는 예를 아래 섹션에서 확인할 수 있습니다.

  • 명령어 종료 상태를 사용하세요.

    종료 상태가 0이 아니면 오류가 발생하고 명령어 문서에서 다르게 언급되지 않은 한 출력이 불완전할 수 있습니다. 예를 들어, 여러 리소스를 만드는 명령어가 리소스 몇 개만 만들고 이를 표준 출력에 나열한 후 0이 아닌 상태로 종료될 수 있습니다. 또는 show_structured_logs 속성을 사용하여 오류 로그를 구문 분석할 수 있습니다. $ gcloud config를 실행하여 자세한 내용을 확인하세요.

필터링 및 형식 지정의 예

다음 버튼으로 가이드를 시작하여 필터 및 형식 신고 사용에 대한 대화식 가이드를 확인할 수 있습니다.

Cloud Shell에서 열기

다음은 gcloud CLI 명령어를 사용하여 형식 지정 및 필터링하는 일반적인 사용 예시입니다.

영역(zone) us-central1-a에서 만들어진 인스턴스 나열:

    gcloud compute instances list --filter="zone:us-central1-a"

라벨이 특정 값과 일치하는 프로젝트를 JSON 형식으로 나열(예: label.env는 'test'이고 label.version은 alpha임):

    gcloud projects list --format="json" \
    --filter="labels.env=test AND labels.version=alpha"

생성 날짜와 시간이 현지 시간대로 지정된 프로젝트 나열:

    gcloud projects list \
    --format="table(name, project_id, createTime.date(tz=LOCAL))"

특정 날짜 이후에 만들어진 프로젝트를 표 형식으로 나열:

    gcloud projects list \
    --format="table(projectNumber,projectId,createTime)" \
    --filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"

마지막 예에서는 키에 대한 투영이 사용되었습니다. 날짜 형식이 설정되면 필터는 createTime 키에 적용됩니다.

중첩된 지역 할당량 표 나열:

    gcloud compute regions describe us-central1 \
    --format="table(quotas:format='table(metric,limit,usage)')"

CSV 형식으로 전역 할당량 일반 목록 인쇄:

    gcloud compute project-info describe --flatten='quotas[]' \
    --format='csv(quotas.metric,quotas.limit,quotas.usage)'

상자 데코와 제목을 포함하며 이름을 기준으로 정렬된 계산 인스턴스 리소스를 표 형식으로 나열:

    gcloud compute instances list \
    --format='table[box,title=Instances](name:sort=1,zone:title=zone,status)'

프로젝트 인증된 사용자 이메일 주소 나열:

    gcloud info --format='value(config.account)'

스크립팅의 예

이 형식 및 필터 기능으로 gcloud CLI 명령어를 스크립트에 결합하여 포함된 정보를 간편하게 추출할 수 있습니다.

모든 프로젝트의 서비스 계정과 관련된 모든 키를 나열하려면 모든 프로젝트를 반복해야 하며 각 프로젝트에 대해 관련된 모든 서비스 계정을 가져와야 합니다. 각 서비스 계정에 대해 모든 키를 가져옵니다. 아래 설명을 따라 이를 수행할 수 있습니다.

bash 스크립트의 경우:

#!/bin/bash
for project in  $(gcloud projects list --format="value(projectId)")
do
  echo "ProjectId:  $project"
  for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
   do
     echo "    -> Robot $robot"
     for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
        do
          echo "        $key"
     done
   done
done

또는 Windows PowerShell의 경우:

foreach ($project in gcloud projects list --format="value(projectId)")
{
  Write-Host "ProjectId: $project"
  foreach ($robot in  gcloud iam service-accounts list --project $project --format="value(email)")
  {
      Write-Host "    -> Robot $robot"
      foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
      {
        Write-Host "        $key"
      }
  }
}

출력을 처리하기 위해 구문 분석해야 하는 경우가 종종 있습니다. 예를 들어, 서비스 계정 정보를 배열에 쓰고 다중 값 CSV 형식의 serviceAccounts.scope() 필드에 값을 분리하는 것이 유용합니다. 아래 스크립트가 이러한 작업을 수행합니다.

#!/bin/bash
for scopesInfo in $(
    gcloud compute instances list --filter=name:instance-1 \
        --format="csv[no-heading](name,id,serviceAccounts[].email.list(),
                      serviceAccounts[].scopes[].map().list(separator=;))")
do
      IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
      NAME="${scopesInfoArray[0]}"
      ID="${scopesInfoArray[1]}"
      EMAIL="${scopesInfoArray[2]}"
      SCOPES_LIST="${scopesInfoArray[3]}"

      echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
      echo ""
      IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
      for SCOPE in  "${scopeListArray[@]}"
      do
        echo "  SCOPE: $SCOPE"
      done
done

추가 정보

gcloud CLI를 사용하여 기본 스크립트를 빌드하는 단계별 안내는 GCP 작업 자동화를 위한 초보자 가이드를 참조하세요.

gcloud CLI의 filters, formats, projections 플래그에 내장된 출력 구성 기능에 대한 추가적인 예는 필터링 및 형식 지정에 대한 블로그 게시물에서 확인할 수 있습니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Cloud SDK 문서