Google Sheets에서 워크플로 트리거


Google Sheets는 실시간 공동작업을 지원하고 데이터를 시각화, 처리, 소통하는 도구를 제공하는 클라우드 기반의 스프레드시트 솔루션입니다.

이 튜토리얼에서는 Sheets에서 워크플로를 트리거하는 방법을 보여줍니다.

목표

이 튜토리얼에서는 다음 단계를 진행합니다.

  1. 클라우드 기반 설문지 및 설문조사 솔루션인 Google Forms를 사용하여 가상 머신(VM) 인스턴스 생성 요청을 제출할 수 있는 양식을 만듭니다.
  2. 응답을 수집하고 저장하려면 Google Sheets 스프레드시트를 양식에 연결합니다.
  3. Google Workspace 제품을 프로그래밍 방식으로 만들고, 읽고, 수정할 수 있는 클라우드 기반 자바스크립트 플랫폼인 Google Apps Script를 사용하여 스프레드시트 업데이트를 통해 요청이 승인될 때마다 워크플로를 트리거합니다.
  4. Compute Engine API 커넥터를 호출하고 양식을 통해 수집된 사양에 따라 Compute Engine VM 인스턴스를 만드는 워크플로를 배포합니다. 커넥터는 다른 Google Cloud API 호출을 단순화합니다. 워크플로 커넥터 자세히 알아보기
  5. 전체 프로세스를 테스트하고 VM 인스턴스가 예상한 대로 생성되었는지 확인합니다.

비용

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

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

이 튜토리얼에서는 Google Workspace도 사용합니다. Google의 무료 소비자 앱에 포함되지 않은 비즈니스급 서비스는 비용이 청구됩니다.

시작하기 전에

Google Cloud 콘솔에서 또는 터미널이나 Cloud Shell에서 Google Cloud CLI를 사용하여 다음 명령어의 일부를 실행할 수 있습니다.

조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참조하세요.

콘솔

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  3. Compute Engine 및 Workflows API를 사용 설정합니다.

    API 사용 설정

  4. 테스트 목적으로 이 튜토리얼의 워크플로와 연결할 것이므로 Compute Engine 기본 서비스 계정을 기록해 두세요. Compute Engine API가 사용 설정된 새 프로젝트에는 IAM 기본 편집자 역할 및 다음 이메일 형식으로 생성된 이 서비스 계정이 포함됩니다.

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    프로젝트 번호는 Google Cloud 콘솔의 시작 페이지에서 찾을 수 있습니다.

    프로덕션 환경의 경우 새 서비스 계정을 만들고 해당 계정에 필요한 최소한의 권한을 포함하고 최소 권한 원칙을 따르는 하나 이상의 IAM 역할을 부여하는 것을 강력하게 추천합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  3. Compute Engine 및 Workflows API를 사용 설정합니다.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
    
  4. 테스트 목적으로 이 튜토리얼의 워크플로와 연결할 것이므로 Compute Engine 기본 ㅅ비스 계정을 기록해 두세요. Compute Engine API가 사용 설정된 새 프로젝트에는 IAM 기본 편집자 역할 및 다음 이메일 형식으로 생성된 이 서비스 계정이 포함됩니다.

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    다음과 같이 프로젝트 번호를 검색할 수 있습니다.

    gcloud projects describe PROJECT_ID
    

    프로덕션 환경의 경우 새 서비스 계정을 만들고 해당 계정에 필요한 최소한의 권한을 포함하고 최소 권한 원칙을 따르는 하나 이상의 IAM 역할을 부여하는 것을 강력하게 추천합니다.

VM 인스턴스 요청 양식 만들기

Compute Engine 가상 머신(VM) 인스턴스 생성 요청을 제출하는 데 사용할 수 있는 양식을 만듭니다. 기본적으로 Google Forms를 통해 양식을 만들면 Google Drive에 저장됩니다.

  1. forms.google.com으로 이동합니다.
  2. '내용 없음' 더하기을 클릭합니다.

    새 양식이 열립니다.

  3. 필수 섹션 5개가 포함된 양식을 만듭니다. 양식은 다음과 비슷하게 표시되어야 합니다.

    샘플 양식 보기

    Google Cloud 가상 머신 만들기를 요청하는 양식 예시
    머신 이름

    단답형 텍스트

    영역

    드롭다운:

    1. us-central1-a
    2. us-central1-b
    3. us-central1-c
    4. us-central1-f
    유형

    드롭다운:

    1. e2-micro
    2. e2-small
    3. e2-medium
    4. e2-standard-2
    5. e2-standard-4
    디스크 크기(GB)

    단답형 텍스트

    운영체제

    드롭다운:

    1. debian-10
    2. centos-stream-9
    3. cos-93-lts
    4. cos-97-lts
  4. 양식을 작성할 사람의 이메일 주소를 기록하도록 이메일 수집을 사용 설정합니다.
    1. 설정을 클릭합니다.
    2. 응답 섹션을 펼칩니다.
    3. 이메일 주소 수집 전환 버튼을 클릭합니다.

양식을 만든 후 스프레드시트를 연결하여 스프레드시트에 양식 응답을 저장할 수 있게 합니다. 스프레드시트는 드라이브에 저장됩니다.

  1. 양식에서 양식을 엽니다.
  2. 응답을 클릭합니다.
  3. Sheets에 연결을 클릭합니다.
  4. 응답 대상 선택 대화상자에서 새 스프레드시트 만들기를 선택합니다.
  5. 만들기를 클릭합니다.

    연결된 스프레드시트가 열립니다.

  6. H 열에서 승인됨? 제목을 추가합니다.

  7. H 열의 첫 번째 행에 커서를 놓고 삽입 > 체크박스를 선택합니다.

    스프레드시트는 다음과 유사하게 표시되어야 합니다.

    요청을 수집하는 연결된 스프레드시트 예시

    시트가 응답으로 업데이트될 때마다 해당 응답의 행에 체크박스도 표시됩니다.

Apps Script를 사용하여 Google Sheets 확장

Apps Script를 사용하면 프로그래매틱 방식으로 Sheets를 만들고 읽고 수정할 수 있습니다. Sheets용으로 설계된 대부분의 스크립트는 배열을 조작하여 스프레드시트의 셀, 행, 열과 상호작용합니다. Sheets에 Apps Script 사용에 대한 안내는 커스텀 함수 빠른 시작을 참조하세요.

  1. 다음과 같이 Sheets에서 Apps Script 프로젝트를 만듭니다.

    1. Sheets 스프레드시트를 엽니다.
    2. 확장 프로그램 > Apps Script를 선택합니다.
    3. 스크립트 편집기에서 제목 없음 프로젝트를 클릭합니다.
    4. 프로젝트 이름을 지정하고 이름 바꾸기를 클릭합니다.

    이제 스크립트는 스프레드시트에 바인딩되어 사용자 인터페이스를 변경하거나 스프레드시트가 열릴 때 응답하는 스크립트 기능을 제공합니다.

    스크립트 프로젝트는 Apps Script 파일 및 리소스 컬렉션을 나타냅니다. 스크립트 프로젝트의 코드 파일에는 .gs 확장 프로그램이 있습니다.

  2. Apps Script를 사용하면 기본 제공 함수처럼 Sheets에서 사용할 수 있는 커스텀 함수를 작성할 수 있습니다. 커스텀 함수는 표준 JavaScript를 사용하여 생성됩니다. 다음과 같이 함수를 만듭니다.

    1. Apps Script 프로젝트를 엽니다.
    2. 편집기 를 클릭합니다.
    3. 스크립트 파일은 Code.gs라는 프로젝트 파일로 나타납니다. 파일을 수정하기 위해 선택합니다.
    4. 스크립트 편집기의 모든 코드를 스프레드시트의 데이터를 읽고 워크플로 실행에 입력으로 전달하는 다음 코드로 바꿉니다.

      const PROJECT_ID = "your-project-id";
      const REGION = "us-central1";
      const WORKFLOW = "create-vm-from-form";
      
      function handleEdit(e) {
        var range = e.range.getA1Notation();
        var sheet = e.source;
      
        if (range.length > 1 && range[0] === 'H') {
          if (e.value == "TRUE") {
            Logger.log("Approved checkbox: true");
      
            var row = range.slice(1)
            var email = sheet.getRange('B' + row).getCell(1, 1).getValue()
            var vmName = sheet.getRange('c' + row).getCell(1, 1).getValue()
            var zone = sheet.getRange('D' + row).getCell(1, 1).getValue()
            var machineType = sheet.getRange('E' + row).getCell(1, 1).getValue()
            var diskSize = sheet.getRange('F' + row).getCell(1, 1).getValue()
            var imageFamily = sheet.getRange('G' + row).getCell(1, 1).getValue()
            var imageProject = imageFamily.substring(0, imageFamily.indexOf('-')) + "-cloud"
      
            const executionPayload = {
              "argument": "{\"diskSize\": \"" + diskSize + "\", \"email\": \"" + email + "\", \"imageFamily\": \"" + imageFamily + "\", \"imageProject\": \"" + imageProject + "\", \"machineType\": \"" + machineType + "\", \"vmName\": \"" + vmName + "\", \"zone\": \"" + zone +  "\"}"
            };
      
            approve(executionPayload);
          }
          else {
            Logger.log("Approved checkbox: false");
          }
        }
      }
      
      function approve(executionPayload) {
        const headers = {
          "Authorization": "Bearer " + ScriptApp.getOAuthToken()
        };
      
        const params = {
          "method": 'post',
          "contentType": 'application/json',
          "headers": headers,
          "payload": JSON.stringify(executionPayload)
        };
      
        const url = "https://workflowexecutions.googleapis.com/v1/projects/" + PROJECT_ID + "/locations/" + REGION + "/workflows/" + WORKFLOW + "/executions";
      
        Logger.log("Workflow execution request to " + url);
        var response = UrlFetchApp.fetch(url, params);
        Logger.log(response);
      }
    5. your-project-id를 Google Cloud 프로젝트 ID로 바꿉니다.

      프로젝트 ID는 Google Cloud 콘솔의 시작 페이지에서 찾을 수 있습니다.

    6. 저장 를 클릭합니다.

  3. Apps Script 설치 가능한 트리거를 사용하면 스프레드시트를 열거나 수정할 때와 같이 특정 조건이 충족될 때 스크립트 프로젝트에서 지정된 함수를 실행할 수 있습니다. 다음과 같이 트리거를 만듭니다.

    1. Apps Script 프로젝트를 엽니다.
    2. 트리거 을 클릭합니다.
    3. 트리거 추가를 클릭합니다.
    4. YOUR_PROJECT_NAME의 트리거 추가 대화상자에서 트리거를 구성합니다.
      1. 실행할 함수 선택 목록에서 handleEdit을 선택합니다.
      2. 실행할 배포 선택 목록에서 Head를 선택합니다.
      3. 이벤트 소스 선택 목록에서 스프레드시트에서를 선택합니다.
      4. 이벤트 유형 선택 목록에서 수정 시를 선택합니다.
      5. 실패 알림 설정 목록에서 매일 알림을 선택합니다.
    5. 저장을 클릭합니다.
    6. Google 계정을 선택하라는 메시지가 표시되면 적절한 계정을 선택한 다음 허용을 클릭합니다.

      이렇게 하면 Apps Script 프로젝트에서 Sheets 스프레드시트를 보고, 수정하고, 만들고, 삭제하고, 외부 서비스에 연결할 수 있습니다.

  4. Apps Script 프로젝트 매니페스트 파일은 Apps Script가 스크립트를 성공적으로 실행하기 위해 필요한 기본 프로젝트 정보를 지정하는 JSON 파일입니다. Apps Script 편집기는 기본적으로 Apps Script 프로젝트 설정을 보호하기 위해 매니페스트 파일을 숨깁니다. 매니페스트 파일을 수정합니다.

    1. Apps Script 프로젝트를 엽니다.
    2. 프로젝트 설정 를 클릭합니다.
    3. 편집기에 'appsscript.json' 매니페스트 파일 표시 체크박스를 선택합니다.
    4. 편집기 를 클릭합니다.
    5. 매니페스트 파일은 appsscript.json라는 프로젝트 파일로 나타납니다. 파일을 수정하기 위해 선택합니다.
    6. oauthScopes 필드는 문자열 배열을 지정합니다. 프로젝트에 사용되는 승인 범위를 설정하기 위해 지원하려는 범위의 배열을 추가합니다. 예를 들면

      {
        "timeZone": "America/Toronto",
        "dependencies": {
        },
        "exceptionLogging": "STACKDRIVER",
        "runtimeVersion": "V8",
        "oauthScopes": [
          "https://www.googleapis.com/auth/script.external_request",
          "https://www.googleapis.com/auth/cloud-platform",
          "https://www.googleapis.com/auth/spreadsheets"
        ]
      }
      입니다.

      이렇게 하면 다음에 대한 명시적 범위가 설정됩니다.

      • 외부 서비스에 연결
      • Google Cloud 데이터 확인, 수정, 구성, 삭제 및 Google 계정 이메일 주소 확인
      • 모든 Sheets 스프레드시트 확인, 수정, 생성, 삭제
    7. 저장 를 클릭합니다.

VM 인스턴스를 만드는 워크플로 배포

VM 인스턴스 생성 요청이 승인되었을 때 트리거되는 워크플로를 배포합니다. 이 워크플로는 양식을 통해 수집된 사양을 기반으로 Compute Engine VM 인스턴스를 만들도록 Compute Engine API 커넥터를 호출합니다.

콘솔

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

    Workflows로 이동

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

  3. 새 워크플로의 이름 create-vm-from-form를 입력합니다.

  4. 리전 목록에서 us-central1(아이오와)을 선택합니다.

  5. 서비스 계정에 대해 Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)을 선택합니다.

  6. 다음을 클릭합니다.

  7. 워크플로 편집기에서 다음 워크플로 정의를 입력합니다.

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  8. 배포를 클릭합니다.

gcloud

  1. 워크플로의 소스 코드 파일을 만듭니다.

    touch create-vm-from-form.yaml
    
  2. 텍스트 편집기에서 다음 워크플로를 소스 코드 파일에 복사합니다.

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  3. 다음 명령어를 입력하여 워크플로를 배포합니다.

    gcloud workflows deploy create-vm-from-form \
        --source=create-vm-from-form.yaml \
        --location=us-central1 \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    PROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다. 다음과 같이 프로젝트 번호를 검색할 수 있습니다.

    gcloud projects describe PROJECT_ID
    

엔드 투 엔드 흐름 테스트

모두 예상한 대로 작동하는지 확인하기 위해 전체 프로세스를 실행해 봅니다.

  1. 양식을 자신에게 전송하고 질문에 적절하게 답변합니다.

    VM 인스턴스를 만들기 위해 사용하는 사양이 유효한지 확인합니다. 그렇지 않으면 워크플로 실행이 실패합니다. 자세한 내용은 Compute Engine 범용 머신 계열을 참조하세요.

  2. 응답을 제출하려면 제출을 클릭합니다.

  3. 양식에서 양식을 엽니다.

  4. 응답을 클릭합니다.

  5. Sheets에서 보기를 클릭합니다.

    연결된 스프레드시트가 열립니다.

  6. 응답 행에서 승인 여부 체크박스를 선택합니다.

  7. Apps Script 프로젝트를 엽니다.

  8. 실행 를 클릭합니다.

    트리거가 실행되고 Completed 상태로 나열되어야 합니다.

  9. create-vm-from-form 워크플로가 성공적으로 완료되었는지 확인합니다.

    콘솔

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

      Workflows로 이동

    2. 워크플로 페이지에서 create-vm-from-form 워크플로를 클릭하여 세부정보 페이지로 이동합니다.

    3. 워크플로 세부정보 페이지에서 특정 실행의 세부정보를 검색하려면 해당하는 실행 ID를 클릭합니다.

      실행 상태성공이어야 입력 창에 요청한 VM 사양이 표시되어야 합니다.

    gcloud

    워크플로의 실행 시도 목록을 검색합니다.

    gcloud workflows executions list create-vm-from-form

    결과는 다음과 비슷하게 표시됩니다.

    NAME: projects/918619793306/locations/us-central1/workflows/create-vm-from-form/executions/d8947ecb-9ccb-4ea1-ba10-e5c10414e3be
    STATE: SUCCEEDED
    START_TIME: 2023-01-24T15:07:40.404741791Z
    END_TIME: 2023-01-24T15:07:55.649373625Z
  10. 새 VM이 예상한 대로 생성되었는지 확인합니다.

    콘솔

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

    VM 인스턴스로 이동

    VM 인스턴스가 실행 중임을 나타내는 상태로 나열됩니다.

    gcloud

    프로젝트에 대해 모든 영역의 모든 VM에 대한 집계 목록을 검색합니다.

    gcloud compute instances list

    VM 인스턴스가 실행 중임을 나타내는 상태로 나열됩니다.

    gcloud compute instances list 명령어에 대한 자세한 내용은 참조 페이지를 확인하세요.

삭제

이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 튜토리얼에 추가된 변경사항은 제외하고 보존하려면 튜토리얼용으로 만든 리소스를 삭제합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

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

    리소스 관리로 이동

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

이 튜토리얼에서 만든 리소스 삭제

  1. Drive에서 파일 삭제
  2. Compute Engine VM 인스턴스 삭제
  3. 워크플로 삭제

다음 단계