이 튜토리얼에서는 Cloud Storage 버킷에 함수 소스 코드 zip 파일을 업로드하고 리소스 프로비저닝을 위해 Terraform을 사용해서 Pub/Sub 함수를 배포하는 방법을 보여줍니다. Terraform은 선언적 구성 파일로 Google Cloud 리소스를 프로비저닝할 수 있는 오픈소스 도구입니다.
이 튜토리얼에서는 Node.js 함수가 예시로 사용되지만 Python, Go, 자바 함수도 작동합니다. 이 안내는 사용 중인 런타임 종류와 관계없이 동일합니다. Cloud Functions v2 API에서 Terraform을 사용하는 방법에 관한 자세한 내용은 Hashicorp의 참조 페이지를 참조하세요.
목표
- Terraform을 사용하여 Pub/Sub 함수를 배포하는 방법을 알아봅니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
For details, see Cloud Run functions pricing.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
- 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 Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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 Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 기본 컴퓨팅 서비스 계정에
roles/run.invoker
및roles/cloudbuild.builds.builder
를 부여합니다. -
개발 환경을 준비합니다.
gcloud CLI가 이미 설치되어 있으면 다음 명령어를 실행하여 업데이트합니다.
gcloud components update
환경 설정
이 튜토리얼에서는 Cloud Shell에서 명령어를 실행합니다. Cloud Shell은 Google Cloud CLI가 포함되고 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. Cloud Shell은 초기화하는 데 몇 분 정도 걸릴 수 있습니다.
애플리케이션 준비
Cloud Shell에서 다음 단계를 수행하세요.
샘플 앱 저장소를 Cloud Shell 인스턴스에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Cloud Run 함수 샘플 코드가 포함된 디렉터리로 변경합니다.
cd nodejs-docs-samples/functions/v2/helloPubSub/
이 튜토리얼에서 사용된 Node.js 샘플은 기본 'Hello World' Pub/Sub 함수입니다.
Terraform이 Cloud Storage 버킷에 업로드하는 함수 소스 코드가 포함된 zip 파일을 만듭니다.
zip -r function-source.zip .
위 명령어에
helloworld
디렉터리 안의 파일이 포함되고 디렉터리 자체는 포함되지 않도록 zip 파일의 루트는 함수 소스 코드의 루트 디렉터리여야 합니다.
main.tf
파일 만들기
nodejs-docs-samples/functions/
디렉터리에서 Terraform 구성에 대해main.tf
파일을 만듭니다.touch main.tf
이 Terraform 구성을
main.tf
파일에 복사합니다.main.tf
파일을 수정하여 다음 항목에 대해 올바른 값을 갖는지 확인합니다. 다른 런타임을 사용하거나 다른 함수를 배포할 때와 같이 구성이 변경될 때마다 이 파일을 수정해야 합니다.- 런타임: 이 예시에서는 런타임이
nodejs16
입니다. - 함수 진입점: 이 예시에서는 함수 진입점이
helloPubSub
입니다. - zip 파일 경로: 이 예시에서는 위에 설명된 대로
main.tf
파일을nodejs-docs-samples/functions/
디렉터리에 배치한 경우 경로가./v2/helloPubSub/function-source.zip
입니다.
- 런타임: 이 예시에서는 런타임이
Terraform 초기화
Cloud Shell에서 다음 명령어를 실행하여 Terraform을 초기화합니다.
docker run -v $(pwd):/app -w /app hashicorp/terraform:0.12.0 init
공개 Terraform Docker 이미지를 사용합니다. Docker는 Cloud Shell에 이미 설치되어 있습니다. Docker 컨테이너가 Terraform 구성 파일을 읽을 수 있도록 현재 작업 디렉터리가 볼륨으로 마운트됩니다.
이 명령어를 실행하여 필요한 플러그인을 추가하고
.terraform
디렉터리를 빌드합니다.terraform init
Terraform 구성 검증
Terraform 구성을 미리봅니다. 이 단계는 선택사항이지만 main.tf
문법이 올바른지 확인할 수 있습니다. 이 명령어는 생성할 리소스의 미리보기를 보여줍니다.
terraform plan
Terraform 구성 적용
구성을 적용하여 함수를 배포합니다. 메시지가 표시되면 yes
를 입력합니다.
terraform apply
함수 트리거
Pub/Sub 함수를 테스트하려면 다음 안내를 따르세요.
주제에 메시지를 게시합니다(이 예시에서는 주제 이름이
functions2-topic
임).gcloud pubsub topics publish TOPIC_NAME --message="Friend"
함수 로그를 읽어 결과를 확인합니다. 여기서
FUNCTION_NAME
은 함수의 이름입니다(이 예시에서는 함수 이름이function
임).gcloud beta functions logs read FUNCTION_NAME --gen2
새 '친구' 메시지가 포함된 로깅 출력을 볼 수 있습니다.
삭제
이 튜토리얼을 완료한 후 추가 비용이 발생하지 않도록 생성된 모든 리소스를 삭제할 수 있습니다.
Terraform에서는 terraform destroy
명령어를 실행하여 구성 파일에 정의된 모든 리소스를 삭제할 수 있습니다.
terraform destroy
Terraform에서 리소스를 삭제할 수 있도록 yes
를 입력합니다.