1. 소개
워크플로는 데이터 애널리틱스의 일반적인 사용 사례입니다. 워크플로에는 데이터를 수집, 변환, 분석하여 의미 있는 정보를 찾는 작업이 포함됩니다. Google Cloud Platform의 워크플로 조정 도구는 널리 사용되는 오픈소스 워크플로 도구 Apache Airflow의 호스팅된 버전인 Cloud Composer입니다. 이 실습에서는 Cloud Composer를 사용하여 Cloud Dataproc 클러스터를 만들고, Cloud Dataproc 및 Apache Hadoop을 사용하여 클러스터를 분석한 후 Cloud Dataproc 클러스터를 삭제하는 간단한 워크플로를 만듭니다.
Cloud Composer란 무엇인가요?
Google Cloud Composer는 클라우드 및 온프레미스 데이터 센터 전체의 파이프라인을 작성, 예약, 모니터링할 수 있는 완전 관리형 워크플로 조정 서비스입니다. Python 프로그래밍 언어로 작동되며 인기 있는 Apache Airflow 오픈소스 프로젝트를 기반으로 구축된 Cloud Composer는 서비스 전환이 자유롭고 사용하기도 쉽습니다.
Apache Airflow의 로컬 인스턴스 대신 Cloud Composer를 사용하면 설치 또는 관리 오버헤드 없이 Airflow의 장점을 활용할 수 있습니다.
Apache Airflow란 무엇인가요?
Apache Airflow는 프로그래매틱 방식으로 워크플로를 작성, 예약, 모니터링하는 데 사용되는 오픈소스 도구입니다. 실습 전반에서 Airflow와 관련하여 알아두어야 할 몇 가지 주요 용어가 있습니다.
- DAG - 방향성 비순환 그래프 (DAG)는 예약 및 실행하려는 태스크의 모음입니다. 워크플로라고도 하는 DAG는 표준 Python 파일에 정의됩니다.
- 연산자 - 연산자는 워크플로의 단일 태스크를 설명합니다.
Cloud Dataproc이란 무엇인가요?
Cloud Dataproc은 Google Cloud Platform의 완전 관리형 Apache Spark 및 Apache Hadoop 서비스입니다. Cloud Dataproc은 다른 GCP 서비스와 쉽게 통합되어 데이터 처리, 분석, 머신러닝을 위한 강력하고도 완전한 플랫폼을 제공합니다.
실행할 작업
이 Codelab에서는 Cloud Composer에서 다음 작업을 완료하는 Apache Airflow 워크플로를 만들고 실행하는 방법을 보여줍니다.
- Cloud Dataproc 클러스터 만들기
- 클러스터에서 Apache Hadoop 워드카운트 작업을 실행하고 결과를 Cloud Storage에 출력
- 클러스터를 삭제합니다.
학습할 내용
- Cloud Composer에서 Apache Airflow 워크플로를 만들고 실행하는 방법
- Cloud Composer 및 Cloud Dataproc을 사용하여 데이터 세트에 대한 분석을 실행하는 방법
- Google Cloud Platform Console, Cloud SDK, Airflow 웹 인터페이스를 통해 Cloud Composer 환경에 액세스하는 방법
필요한 항목
- GCP 계정
- 기본 CLI 지식
- Python에 대한 기본적인 이해
2. GCP 설정
프로젝트 만들기
Google Cloud Platform 프로젝트를 선택하거나 만듭니다.
나중에 사용할 프로젝트 ID를 기록해 둡니다.
새 프로젝트를 만드는 경우 만들기 페이지의 프로젝트 이름 바로 아래에 프로젝트 ID가 있습니다. | |
이미 프로젝트를 만들었다면 콘솔 홈페이지의 프로젝트 정보 카드에서 ID를 찾을 수 있습니다. |
API 사용 설정
Cloud Composer, Cloud Dataproc, Cloud Storage API를 사용 설정합니다.사용 설정되면 '사용자 인증 정보로 이동'이라는 버튼을 무시하고 튜토리얼의 다음 단계로 진행할 수 있습니다. |
Composer 환경 만들기
다음 구성으로 Cloud Composer 환경을 만듭니다.
다른 모든 구성은 기본값으로 유지할 수 있습니다. 하단에서 '만들기'를 클릭합니다. |
Cloud Storage 버킷 만들기
다음 구성으로 프로젝트에서 Cloud Storage 버킷을 만듭니다.
준비가 되면 '만들기'를 누르세요. |
3. Apache Airflow 설정
Composer 환경 정보 보기
GCP Console에서 환경 페이지를 엽니다.
환경 이름을 클릭하여 세부정보를 확인합니다.
환경 세부정보 페이지에서는 Airflow 웹 인터페이스 URL, Google Kubernetes Engine 클러스터 ID, Cloud Storage 버킷의 이름, /dags 폴더 경로와 같은 정보를 제공합니다.
Airflow에서 DAG (방향성 비순환 그래프)는 예약 및 실행하려는 태스크의 모음입니다. 워크플로라고도 하는 DAG는 표준 Python 파일에서 정의됩니다. Cloud Composer는 /dags 폴더의 DAG만 예약합니다. /dags 폴더는 Cloud Composer가 환경을 만들 때 자동으로 만드는 Cloud Storage 버킷에 있습니다.
Apache Airflow 환경 변수 설정
Apache Airflow 변수는 환경 변수와 다른 Airflow 관련 개념입니다. 이 단계에서는 gcp_project
, gcs_bucket
, gce_zone
의 세 가지 Airflow 변수를 설정합니다.
gcloud
를 사용하여 변수 설정
먼저 Cloud SDK가 편리하게 설치되어 있는 Cloud Shell을 엽니다.
환경 변수 COMPOSER_INSTANCE
를 Composer 환경의 이름으로 설정합니다.
COMPOSER_INSTANCE=my-composer-environment
gcloud 명령줄 도구를 사용하여 Airflow 변수를 설정하려면 gcloud composer environments run
명령어를 variables
하위 명령어와 함께 사용합니다. 이 gcloud composer
명령어는 Airflow CLI 하위 명령어 variables
를 실행합니다. 이 하위 명령어는 gcloud
명령줄 도구에 인수를 전달합니다.
이 명령어를 세 번 실행하고 변수를 프로젝트와 관련된 변수로 바꿉니다.
다음 명령어를 사용하여 gcp_project
를 설정합니다. 이때 <your-project-id>를 2단계에서 기록한 프로젝트 ID로 바꿉니다.
gcloud composer environments run ${COMPOSER_INSTANCE} \ --location us-central1 variables -- --set gcp_project <your-project-id>
출력은 다음과 같이 표시됩니다.
kubeconfig entry generated for us-central1-my-composer-env-123abc-gke. Executing within the following Kubernetes cluster namespace: composer-1-10-0-airflow-1-10-2-123abc [2020-04-17 20:42:49,713] {settings.py:176} INFO - settings.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800, pid=449 [2020-04-17 20:42:50,123] {default_celery.py:90} WARNING - You have configured a result_backend of redis://airflow-redis-service.default.svc.cluste r.local:6379/0, it is highly recommended to use an alternative result_backend (i.e. a database). [2020-04-17 20:42:50,127] {__init__.py:51} INFO - Using executor CeleryExecutor [2020-04-17 20:42:50,433] {app.py:52} WARNING - Using default Composer Environment Variables. Overrides have not been applied. [2020-04-17 20:42:50,440] {configuration.py:522} INFO - Reading the config from /etc/airflow/airflow.cfg [2020-04-17 20:42:50,452] {configuration.py:522} INFO - Reading the config from /etc/airflow/airflow.cfg
다음 명령어를 사용하여 gcs_bucket
를 설정합니다. 이때 <your-bucket-name>
를 2단계에서 기록한 버킷 ID로 바꿉니다. 권장사항을 따랐다면 버킷 이름이 프로젝트 ID와 동일합니다. 이전 명령어와 비슷한 결과가 출력됩니다.
gcloud composer environments run ${COMPOSER_INSTANCE} \ --location us-central1 variables -- --set gcs_bucket gs://<your-bucket-name>
다음 명령어를 사용하여 gce_zone
를 설정합니다. 이전 명령어와 비슷한 결과가 출력됩니다.
gcloud composer environments run ${COMPOSER_INSTANCE} \ --location us-central1 variables -- --set gce_zone us-central1-a
(선택사항) gcloud
를 사용하여 변수 보기
변수 값을 보려면 get
인수로 Airflow CLI 하위 명령어 variables
를 실행하거나 Airflow UI를 사용합니다.
예를 들면 다음과 같습니다.
gcloud composer environments run ${COMPOSER_INSTANCE} \ --location us-central1 variables -- --get gcs_bucket
방금 설정한 세 가지 변수인 gcp_project
, gcs_bucket
, gce_zone
를 사용하면 됩니다.
4. 샘플 워크플로
5단계에서 사용할 DAG의 코드를 살펴보겠습니다. 아직 파일을 다운로드하지 마세요. 다음 단계를 따르세요.
여기서 풀어야 할 것이 많으므로 조금 분류해 봅시다.
from airflow import models
from airflow.contrib.operators import dataproc_operator
from airflow.utils import trigger_rule
먼저 몇 가지 Airflow 가져오기인
airflow.models
- Airflow 데이터베이스에서 데이터에 액세스하고 만들 수 있습니다.airflow.contrib.operators
- 커뮤니티 운영자가 거주하는 장소입니다. 이 경우 Cloud Dataproc API에 액세스하려면dataproc_operator
가 필요합니다.airflow.utils.trigger_rule
- 연산자에 트리거 규칙을 추가합니다. 트리거 규칙을 사용하면 상위 요소의 상태와 관련하여 연산자를 실행해야 하는지 여부를 세밀하게 제어할 수 있습니다.
output_file = os.path.join(
models.Variable.get('gcs_bucket'), 'wordcount',
datetime.datetime.now().strftime('%Y%m%d-%H%M%S')) + os.sep
출력 파일의 위치를 지정합니다. 여기서 주목할 만한 줄은 Airflow 데이터베이스에서 gcs_bucket
변수 값을 가져오는 models.Variable.get('gcs_bucket')
입니다.
WORDCOUNT_JAR = (
'file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
)
input_file = 'gs://pub/shakespeare/rose.txt'
wordcount_args = ['wordcount', input_file, output_file]
WORDCOUNT_JAR
- Cloud Dataproc 클러스터에서 최종적으로 실행할 .jar 파일의 위치입니다. 이미 GCP에 호스팅되어 있습니다.input_file
- Hadoop 작업에서 계산할 데이터가 포함된 파일의 위치입니다. 5단계에서 해당 위치에 데이터를 함께 업로드합니다.wordcount_args
- jar 파일에 전달할 인수입니다.
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
이렇게 하면 전날의 자정을 나타내는 datetime 객체를 얻게 됩니다. 예를 들어 3월 4일 11시에 실행되면 날짜/시간 객체는 3월 3일 00:00을 나타냅니다. 이는 Airflow에서 예약을 처리하는 방식과 관련이 있습니다. 자세한 내용은 여기를 참고하세요.
default_dag_args = {
'start_date': yesterday,
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
'project_id': models.Variable.get('gcp_project')
}
새 DAG가 생성될 때마다 사전 형식의 default_dag_args
변수를 제공해야 합니다.
'email_on_failure'
- 작업 실패 시 이메일 알림을 전송해야 하는지 나타냅니다.'email_on_retry'
- 작업을 다시 시도할 때 이메일 알림을 보내야 하는지 여부를 나타냅니다.'retries'
- DAG 실패 시 Airflow가 시도해야 하는 재시도 횟수를 나타냅니다.'retry_delay'
- Airflow가 재시도를 시도하기 전에 대기해야 하는 시간을 나타냅니다.'project_id'
- 연결할 GCP 프로젝트 ID를 DAG에 알려줍니다. 이 ID는 나중에 Dataproc Operator에 필요합니다.
with models.DAG(
'composer_hadoop_tutorial',
schedule_interval=datetime.timedelta(days=1),
default_args=default_dag_args) as dag:
with models.DAG
를 사용하면 스크립트에 그 아래의 모든 항목을 동일한 DAG 내에 포함하라는 지시가 전달됩니다. 또한 다음과 같은 세 가지 인수가 전달된 것을 확인할 수 있습니다.
- 첫 번째 문자열인 문자열은 만들고 있는 DAG에 지정할 이름입니다. 이 경우에는
composer_hadoop_tutorial
을 사용합니다. schedule_interval
-datetime.timedelta
객체로, 여기서는 1일로 설정합니다. 즉, 이 DAG는 이전에'default_dag_args'
에 설정된'start_date'
이후에 하루에 한 번 실행을 시도합니다.default_args
- DAG의 기본 인수가 포함된 이전에 만든 사전
Dataproc 클러스터 만들기
다음으로 Cloud Dataproc 클러스터를 만드는 dataproc_operator.DataprocClusterCreateOperator
를 만듭니다.
create_dataproc_cluster = dataproc_operator.DataprocClusterCreateOperator(
task_id='create_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
num_workers=2,
zone=models.Variable.get('gce_zone'),
master_machine_type='n1-standard-1',
worker_machine_type='n1-standard-1')
이 연산자 내에는 몇 가지 인수가 있으며, 첫 번째를 제외한 모든 인수가 이 연산자에만 해당합니다.
task_id
- BashOperator와 마찬가지로 연산자에 할당하는 이름이며 Airflow UI에서 볼 수 있습니다.cluster_name
- Cloud Dataproc 클러스터에 할당된 이름입니다. 여기서는 이름을composer-hadoop-tutorial-cluster-{{ ds_nodash }}
로 지정했습니다 (선택사항인 추가 정보는 정보 상자 참고).num_workers
- Cloud Dataproc 클러스터에 할당되는 작업자 수입니다.zone
- Airflow 데이터베이스에 저장된 클러스터가 위치할 지리적 리전입니다. 이렇게 하면 3단계에서 설정한'gce_zone'
변수가 읽힙니다.master_machine_type
- Cloud Dataproc 마스터에 할당할 머신 유형worker_machine_type
- Cloud Dataproc 작업자에 할당할 머신 유형
Apache Hadoop 작업 제출
dataproc_operator.DataProcHadoopOperator
를 사용하면 Cloud Dataproc 클러스터에 작업을 제출할 수 있습니다.
run_dataproc_hadoop = dataproc_operator.DataProcHadoopOperator(
task_id='run_dataproc_hadoop',
main_jar=WORDCOUNT_JAR,
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
arguments=wordcount_args)
다음과 같은 몇 가지 매개변수가 제공됩니다.
task_id
- DAG의 이 부분에 할당하는 이름main_jar
- 클러스터를 대상으로 실행하려는 .jar 파일의 위치cluster_name
- 작업을 실행할 클러스터의 이름으로, 이전 연산자에서 찾은 이름과 동일합니다.arguments
- 명령줄에서 .jar 파일을 실행하는 경우와 같이 jar 파일로 전달되는 인수
클러스터 삭제
마지막으로 만들 연산자는 dataproc_operator.DataprocClusterDeleteOperator
입니다.
delete_dataproc_cluster = dataproc_operator.DataprocClusterDeleteOperator(
task_id='delete_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
trigger_rule=trigger_rule.TriggerRule.ALL_DONE)
이름에서 알 수 있듯이 이 연산자는 지정된 Cloud Dataproc 클러스터를 삭제합니다. 여기에는 세 가지 인수가 있습니다.
task_id
- BashOperator와 마찬가지로 연산자에 할당하는 이름이며 Airflow UI에서 볼 수 있습니다.cluster_name
- Cloud Dataproc 클러스터에 할당한 이름입니다. 여기에서는 이름을composer-hadoop-tutorial-cluster-{{ ds_nodash }}
로 지정했습니다 (선택사항인 추가 정보는 'Dataproc 클러스터 만들기' 다음의 정보 상자 참고).trigger_rule
- 이 단계의 시작 부분에서 가져오기 중에 트리거 규칙을 간단히 언급했지만 여기서는 실제로 작동하는 트리거 규칙을 확인할 수 있습니다. 기본적으로 Airflow 연산자는 모든 업스트림 연산자가 완료되지 않으면 실행되지 않습니다.ALL_DONE
트리거 규칙은 모든 업스트림 연산자가 성공했는지 여부와 관계없이 완료되었기만 하면 됩니다. 즉, Hadoop 작업이 실패하더라도 클러스터를 해체해야 합니다.
create_dataproc_cluster >> run_dataproc_hadoop >> delete_dataproc_cluster
마지막으로 이러한 연산자가 특정 순서로 실행되도록 하려면 Python 비트 시프트 연산자를 사용하여 이를 나타낼 수 있습니다. 이 경우 create_dataproc_cluster
가 항상 먼저 실행되고 run_dataproc_hadoop
, 마지막으로 delete_dataproc_cluster
가 실행됩니다.
종합하면 코드는 다음과 같습니다.
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# [START composer_hadoop_tutorial]
"""Example Airflow DAG that creates a Cloud Dataproc cluster, runs the Hadoop
wordcount example, and deletes the cluster.
This DAG relies on three Airflow variables
https://airflow.apache.org/concepts.html#variables
* gcp_project - Google Cloud Project to use for the Cloud Dataproc cluster.
* gce_zone - Google Compute Engine zone where Cloud Dataproc cluster should be
created.
* gcs_bucket - Google Cloud Storage bucket to use for result of Hadoop job.
See https://cloud.google.com/storage/docs/creating-buckets for creating a
bucket.
"""
import datetime
import os
from airflow import models
from airflow.contrib.operators import dataproc_operator
from airflow.utils import trigger_rule
# Output file for Cloud Dataproc job.
output_file = os.path.join(
models.Variable.get('gcs_bucket'), 'wordcount',
datetime.datetime.now().strftime('%Y%m%d-%H%M%S')) + os.sep
# Path to Hadoop wordcount example available on every Dataproc cluster.
WORDCOUNT_JAR = (
'file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
)
# Arguments to pass to Cloud Dataproc job.
input_file = 'gs://pub/shakespeare/rose.txt'
wordcount_args = ['wordcount', input_file, output_file]
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
default_dag_args = {
# Setting start date as yesterday starts the DAG immediately when it is
# detected in the Cloud Storage bucket.
'start_date': yesterday,
# To email on failure or retry set 'email' arg to your email and enable
# emailing here.
'email_on_failure': False,
'email_on_retry': False,
# If a task fails, retry it once after waiting at least 5 minutes
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
'project_id': models.Variable.get('gcp_project')
}
# [START composer_hadoop_schedule]
with models.DAG(
'composer_hadoop_tutorial',
# Continue to run DAG once per day
schedule_interval=datetime.timedelta(days=1),
default_args=default_dag_args) as dag:
# [END composer_hadoop_schedule]
# Create a Cloud Dataproc cluster.
create_dataproc_cluster = dataproc_operator.DataprocClusterCreateOperator(
task_id='create_dataproc_cluster',
# Give the cluster a unique name by appending the date scheduled.
# See https://airflow.apache.org/code.html#default-variables
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
num_workers=2,
zone=models.Variable.get('gce_zone'),
master_machine_type='n1-standard-1',
worker_machine_type='n1-standard-1')
# Run the Hadoop wordcount example installed on the Cloud Dataproc cluster
# master node.
run_dataproc_hadoop = dataproc_operator.DataProcHadoopOperator(
task_id='run_dataproc_hadoop',
main_jar=WORDCOUNT_JAR,
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
arguments=wordcount_args)
# Delete Cloud Dataproc cluster.
delete_dataproc_cluster = dataproc_operator.DataprocClusterDeleteOperator(
task_id='delete_dataproc_cluster',
cluster_name='composer-hadoop-tutorial-cluster-{{ ds_nodash }}',
# Setting trigger_rule to ALL_DONE causes the cluster to be deleted
# even if the Dataproc job fails.
trigger_rule=trigger_rule.TriggerRule.ALL_DONE)
# [START composer_hadoop_steps]
# Define DAG dependencies.
create_dataproc_cluster >> run_dataproc_hadoop >> delete_dataproc_cluster
# [END composer_hadoop_steps]
# [END composer_hadoop]
5. Cloud Storage에 Airflow 파일 업로드
DAG를 /dags 폴더에 복사
- 먼저 Cloud SDK가 편리하게 설치된 Cloud Shell을 엽니다.
- Python 샘플 저장소를 클론하고 Composer/workflows 디렉터리로 변경합니다.
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git && cd python-docs-samples/composer/workflows
- 다음 명령어를 실행하여 DAG 폴더의 이름을 환경 변수로 설정합니다.
DAGS_FOLDER=$(gcloud composer environments describe ${COMPOSER_INSTANCE} \ --location us-central1 --format="value(config.dagGcsPrefix)")
- 다음
gsutil
명령어를 실행하여 /dags 폴더가 생성된 위치에 튜토리얼 코드를 복사합니다.
gsutil cp hadoop_tutorial.py $DAGS_FOLDER
다음과 같은 출력 메시지가 표시됩니다.
Copying file://hadoop_tutorial.py [Content-Type=text/x-python]... / [1 files][ 4.1 KiB/ 4.1 KiB] Operation completed over 1 objects/4.1 KiB.
6. Airflow UI 사용
GCP 콘솔을 사용하여 Airflow 웹 인터페이스에 액세스하려면 다음 안내를 따르세요.
|
Airflow UI에 대한 자세한 내용은 웹 인터페이스에 액세스를 참조하세요.
변수 보기
이전에 설정한 변수는 환경에서 유지됩니다. Airflow UI 메뉴 바에서 관리 > 변수를 선택하여 변수를 볼 수 있습니다.
DAG 실행 탐색
DAG 파일을 Cloud Storage의 dags
폴더에 업로드하면 Cloud Composer가 파일을 파싱합니다. 오류가 발견되지 않으면 워크플로 이름이 DAG 목록에 나타나고 워크플로가 즉시 실행되도록 큐에 추가됩니다. DAG를 보려면 페이지 상단에서 DAG를 클릭합니다.
composer_hadoop_tutorial
를 클릭하여 DAG 세부정보 페이지를 엽니다. 이 페이지에서는 워크플로 태스크와 종속 항목이 그래픽으로 표시됩니다.
이제 툴바에서 그래프 뷰를 클릭한 다음 각 태스크의 그래픽에 마우스를 가져가 상태를 확인합니다. 각 태스크 주위의 테두리도 상태를 나타냅니다(예: 녹색 테두리 = 실행 중, 빨간색 테두리 = 실패).
그래프 뷰에서 워크플로를 다시 실행하려면 다음 안내를 따르세요.
- Airflow UI 그래프 뷰에서
create_dataproc_cluster
그래픽을 클릭합니다. - 지우기를 클릭하여 태스크 3개를 재설정한 후 확인을 클릭하여 확인합니다.
다음 GCP Console 페이지로 이동하여 composer-hadoop-tutorial
워크플로의 상태와 결과를 확인할 수도 있습니다.
- 클러스터 생성 및 삭제를 모니터링할 Cloud Dataproc 클러스터. 워크플로에서 생성된 클러스터는 수명이 짧습니다. 즉, 워크플로 지속 시간 동안만 존재하며 마지막 워크플로 태스크의 일부로 삭제됩니다.
- Apache Hadoop 워드카운트 작업을 보거나 모니터링하기 위한 Cloud Dataproc 작업. 작업 ID를 클릭하여 작업 로그 출력을 확인합니다.
- Cloud Storage 브라우저: 이 Codelab에서 만든 Cloud Storage 버킷의
wordcount
폴더에 있는 워드카운트 결과를 확인합니다.
7. 삭제
이 Codelab에서 사용한 리소스 비용이 GCP 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.
- (선택사항) 데이터를 저장하려면 Cloud Composer 환경의 Cloud Storage 버킷과 이 Codelab용으로 만든 스토리지 버킷에서 데이터를 다운로드합니다.
- 이 Codelab을 위해 만든 Cloud Storage 버킷을 삭제합니다.
- 환경의 Cloud Storage 버킷을 삭제합니다.
- Cloud Composer 환경을 삭제합니다. 환경을 삭제해도 환경의 스토리지 버킷은 삭제되지 않습니다.
필요한 경우 프로젝트를 삭제할 수도 있습니다.
- GCP Console에서 프로젝트 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 상자에 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.