이 튜토리얼에서는 Cloud Storage 버킷에 함수 소스 코드 zip 파일을 업로드하고 리소스 프로비저닝을 위해 Terraform을 사용해서 HTTP 함수를 배포하는 방법을 보여줍니다. Terraform은 선언적인 구성 파일로 Google Cloud 리소스를 프로비저닝할 수 있는 오픈소스 도구입니다.
이 튜토리얼에서는 Node.js HTTP 함수가 예시로 사용되지만 Python, Go, 자바 HTTP 함수도 작동합니다. 이 안내는 사용 중인 런타임과 종류와 관계없이 동일합니다.
목표
- Terraform을 사용하여 HTTP 함수를 배포하는 방법을 알아봅니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 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 Run, 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 Run, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
개발 환경을 준비합니다.
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
이 튜토리얼에 사용된 Node.js 샘플은 기본 'Hello World' HTTP 함수입니다.
main.tf
파일 만들기
nodejs-docs-samples/functions/
디렉터리에서 Terraform 구성에 대해main.tf
파일을 만듭니다.touch main.tf
이 Terraform 구성을
main.tf
파일에 복사합니다.main.tf
파일을 수정하여 다음 항목에 대해 올바른 값을 갖는지 확인합니다. 다른 런타임을 사용하거나 다른 함수를 배포할 때와 같이 구성이 변경될 때마다 이 파일을 수정해야 합니다.- 런타임: 이 예시에서는
nodejs16
을 최신 Node.js 런타임nodejs20
로 바꿉니다. - 함수 진입점: 이 예시에서는 함수 진입점이
helloHttp
입니다. - 소스 디렉터리 경로: 이 예시에서는
source_dir
을helloworld/helloworldHttp
로 변경합니다. allUsers
주 구성원에 IAM 역할 부여를 제한하는 도메인 제한 조직 정책이 적용되는 프로젝트인 경우 IAMmember="allUsers"
구성이 성공하지 못합니다. 프로덕션 단계에서는 신중하게 사용하고, 가능하면 더 제한적인 회원 목록을 고려하세요.
- 런타임: 이 예시에서는
Terraform 초기화
main.tf
파일이 포함된 nodejs-docs-samples/functions/
디렉터리에서 이 명령어를 실행하여 필요한 플러그인을 추가하고 .terraform
디렉터리를 빌드합니다.
terraform init
Terraform 구성 적용
main.tf
파일이 포함된 nodejs-docs-samples/functions/
디렉터리에서 구성을 적용하여 함수를 배포합니다. 메시지가 표시되면 yes
를 입력합니다.
terraform apply
함수 테스트
함수 배포가 완료되면 URI 속성을 기록하거나 다음 명령어를 사용하여 찾을 수 있습니다.
gcloud functions describe function-v2 --gen2 --region=us-central1 --format="value(serviceConfig.uri)"
이 URL을 요청하여 함수의 'Hello World' 메시지를 표시합니다. 함수는 인증이 필요하도록 배포됩니다. 따라서 요청에 사용자 인증 정보를 제공해야 합니다.
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" YOUR_FUNCTION_URL
삭제
이 튜토리얼을 완료한 후 추가 비용이 발생하지 않도록 생성된 모든 리소스를 삭제할 수 있습니다.
Terraform에서는 main.tf
파일이 포함된 nodejs-docs-samples/functions/
디렉터리에서 terraform destroy
명령어를 실행하여 구성 파일에 정의된 모든 리소스를 삭제할 수 있습니다.
terraform destroy
Terraform에서 리소스를 삭제할 수 있도록 yes
를 입력합니다.