회사에서 GCP를 공부하고 있는데 저번 토요일에 배운 NCP로 서버를 띄워서 Terraform으로 GCP의 스토리지를 생성해 보았다.
단순하지만 Terraform을 실행시킬 서버가 필요했는데 크레딧이 생겨서 NCP로 했다.
순서는 아래와 같다.
- NCP 퍼블릭 영역에 bastion 서버 생성(퍼블릭 IP 할당)
- bastion에 GCP CLI설치
- GCP auth 인증(+ 서비스 계정 인증)
- 환경변수 적용
- bastion에 Terraform설치
- GCP Storage 생성
GCP CLI 설치 및 인증 커맨드
#GCP CLI설치
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xf google-cloud-cli-linux-x86_64.tar.gz
./google-cloud-sdk/install.sh
./google-cloud-sdk/install.sh --help
#Auth 인증
./google-cloud-sdk/bin/gcloud init
CLI 설치시 환경변수를 적용할 것인지 물어보는데 설정이후 커맨드를 통해 환경변수설정을 업데이트 해주자
Rocky Linux의 경우 - home위치에서 source .bashrc
GCP서비스 계정 인증 - Impersonate
gcloud config set auth/impersonate_service_account [SERVICE_ACCT_EMAIL]
gcloud config set auth/impersonate_service_account test@test.gserviceaccount.com
아직 GCP에서 서비스 계정과 일반계정 인증을 적용했을때 서버상에서 어떻게 적용되는지 잘 모르겠다...+ 추가 실습필요
테라폼 설치 코드
sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
terraform -version
테라폼 main.tf
# Terraform 초기화
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
# Google Cloud Provider 설정
provider "google" {
credentials = file("/root/gcp/key/서비스계정_키.json") # 서비스 계정 JSON 파일 경로를 입력
project = "storage-project" # GCP 프로젝트 ID
region = "asia-northeast3" # 원하는 지역을 설정하세요
}
# Cloud Storage 버킷 생성
resource "google_storage_bucket" "jaemin_storage01" {
name = "jaemin-storage01"
location = "ASIA" # 원하는 위치를 설정 (US, EU 등)
storage_class = "STANDARD" # 원하는 스토리지 클래스를 설정 (예: STANDARD, NEARLINE, COLDLINE, ARCHIVE)
# 추가 옵션 설정 (필요에 따라 추가/수정)
versioning {
enabled = false
}
lifecycle_rule {
action {
type = "Delete"
}
condition {
age = 365
}
}
labels = {
environment = "production"
}
}
Terraform init, plan, apply 순서로 실행
마무리
클라우드를 사용하다보면 서버 유지비용이 들다보니 아까운 생각이 자꾸들어서 테라폼을 빨리 해야겠습니다. terraform destroy를 하면 테라폼으로 생성된 리소스는 자동으로 삭제가 되기때문에 빨리 적용하고 싶습니다.
하지만 아직 GCP인증에 대해서는 완전히 이해가 어려워 계속 봐야겠습니다 생성은 성공했지만 storage를 CLI로 조작하려니 자꾸 권한 관련 에러가...
#오늘의 에러메세지
WARNING: This command is using service account impersonation. All API calls will be executed as [####@####.iam.gserviceaccount.com].
ERROR: (gcloud.storage.cp) PERMISSION_DENIED: Failed to impersonate [####@####.iam.gserviceaccount.com]. Make sure the account that's trying to impersonate it has access to the service account itself and the "roles/iam.serviceAccountTokenCreator" role. Permission 'iam.serviceAccounts.getAccessToken' denied on resource (or it may not exist). This command is authenticated as jaemin.ko98@gmail.com which is the active account specified by the [core/account] property. Impersonation is used to impersonate daou-storage@daou-storage-test.iam.gserviceaccount.com.
'IaC' 카테고리의 다른 글
[Terraform] vSphere를 이용한 3티어 아키텍처 구축 (0) | 2024.05.13 |
---|