목록DevOps/Terraform (20)
우노
들어가기 앞서, 해당 포스팅에선 Terraform을 통해, GCP Load Balancer에 특정 IP 접근만 허용하는 방법에 대해서 다뤄보겠습니다. 결론부터 말씀드리면, Google Cloud Armor security policy를 google_compute_backend_service에 연결하는 방식으로 접근 제어를 설정할 수 있습니다. google_compute_backend_service는 Google Cloud Load Balancing 사용 시, 트래픽을 여러 인스턴스 그룹에 분산하는 데 사용되는 리소스이며, 해당 리소스의 추가적인 설명은 아래 링크를 참고하시면 됩니다. https://wooono.tistory.com/699 Google Cloud Armor security policy는 g..
terraform apply -target=resource_type.resource_name terraform은 apply 시, -target 옵션을 통해 특정 리소스의 변경사항만 apply 할 수 있습니다. 예를 들어, 만약 AWS의 S3 버킷을 정의하는 Terraform 코드가 있다면 resource "aws_s3_bucket" "example_bucket" { bucket = "example-bucket" acl = "private" } 아래 명령어를 통해 해당 리소스에 대한 변경사항만을 apply 할 수 있습니다. terraform apply -target=aws_s3_bucket.example_bucket ‘aws_s3_bucket’이 Terraform에서 정의한 리소스의 타입이고, ‘examp..
들어가기 앞서, Terraform에서, 공식 K8S Provider가 지원하지 않는 리소스는 ‘kubernetes_manifest’를 사용해 정의할 수 있습니다. 물론, yaml 파일을 그대로 사용할 수는 없으며 yaml의 모든 필드를 HCL 양식에 맞게 수정해야합니다. 다행히도 built-in function인 'yamldecode()'나 ‘tfk8s’ 같은 Tool을 사용해 YAML에서 HCL로 자동 변환할 수도 있습니다. yaml 예제 apiVersion: v1 kind: ConfigMap metadata: name: test-config namespace: default data: foo: bar Terraform kubernetes_manifest 예제 resource "kuber..
들어가기 앞서, 해당 포스팅에선 Terraform을 통해 kubernetes_config_map 자원 생성 후 kubernetes_deployment 내부에 kubernetes_config_map 파일을 마운팅하는 방법에 대해서 다뤄보겠습니다. kubernetes_config_map 자원 생성 resource "kubernetes_config_map" "example_config_map" { metadata { name = "example-config-map" } data = { "config-file.txt" =
들어가기 앞서, 해당 포스팅에선, kubernetes_manifest 자원을 terraform import 하는 명령어에 대해서 다뤄보겠습니다. 예제 코드 kubernetes_manifest 예제 코드 resource "kubernetes_manifest" "example" { manifest = { apiVersion = "apps/v1" kind = "Deployment" metadata = { name = "example-deployment" namespace = "example-namespace" } spec = { replicas = 3 selector = { matchLabels = { app = "example-app" } } template = { metadata = { labels = {..
들어가기 앞서, Cloud Run은 기본적으로 인터넷을 통해 외부로 트래픽을 노출시킵니다. 반면, Cloud SQL은 기본적으로 VPC 네트워크에 의해 보호되는 내부 IP 주소를 가지고 있으며, 인터넷에서 직접 액세스가 불가능합니다. 물론, Public IP 주소를 할당하는 경우에는 인터넷을 통해 액세스가 가능해질 수도 있습니다. 따라서, Cloud Run 애플리케이션이 내부 IP 주소를 사용하여 Cloud SQL과 통신할 수 있도록 하기 위해선 VPC Connector를 사용하여 Cloud Run과 VPC 네트워크를 연결해야합니다. VPC Connector는 Google Cloud 내의 리소스들이 VPC 네트워크에 접근할 수 있도록 해주는 컴포넌트입니다. Terraform Cloud Run 설정 예제 ..
들어가기 앞서, 해당 포스트에선, Terraform을 사용해, 동일한 GCP Service Account를 사용해 다중 프로젝트에 접근할 수 있도록 설정하는 방법에 대해서 다뤄보겠습니다. 예제 코드 예제 코드는, 프로젝트 C의 Service Account를 사용해 프로젝트 A와 B에 접근하는 설정을 다루고 있으며, 아래와 같은 방식으로 진행됩니다. 프로젝트 C에 Service Account 및 Key를 생성합니다. 프로젝트 C의 Service Account를 프로젝트 A와 B의 IAM 멤버로 추가합니다. 프로젝트 C의 Service Account가 프로젝트 A와 B 각각에 지정된 역할을 가질 수 있도록 설정합니다. 사용자는 프로젝트 C의 Service Account와 Key를 사용해 프로젝트 A와 B에 ..
들어가기 앞서, Terraform으로 특정 자원을 생성할 경우, 해당 자원이 이미 생성되어 있는 상태라면, already exists 에러가 발생하게 됩니다. 해당 경우엔, terraform import를 사용해 해당 자원에 대한 정보를 State 파일로 가져와야 terraform apply를 적용할 수 있게 됩니다. 즉, 자원을 생성하는 방향이 아닌, 존재하는 자원을 수정하는 방향으로 진행할 수 있게 됩니다. terraform import 사용 방법은 아래 링크에 정리해두었습니다. https://wooono.tistory.com/711
들어가기 앞서, 해당 포스트에선, Terraform을 사용해, Google Cloud Load Balancer(GCLB) 접근 시 특정 헤더 일치 여부에 따라 접근을 허용할 수 있도록 설정하는 방법에 대해서 다뤄보겠습니다. 예제 코드 resource "google_compute_url_map" "urlmap" { name = "urlmap" description = "a description" default_service = google_compute_backend_service.home.id host_rule { hosts = ["mysite.com"] path_matcher = "allpaths" } path_matcher { name = "allpaths" default_service = googl..
들어가기 앞서, terraform untaint 명령어는, State 파일에 특정 리소스에 문제가 없다고 저장해놓기 위해 사용됩니다. 예제 부팅이 느린 앱(Pod)을 Deployment를 통해 배포한다고 가정해봅시다. terraform apply 시, Deployment는 Pod의 앱 배포를 기다리게 됩니다. 하지만, Pod 앱의 부팅이 느리기 때문에 Terraform에선 Deployment exceeded its progress deadline 에러를 뱉고 중지하게 되며, State에는 Deployment가 정상 배포 되지 않았다고 저장되게 됩니다. 하지만, 실제 환경에서 Pod 앱의 부팅이 끝나 Deployment가 정상 배포된다면 State 파일과 실제 환경의 설정이 달라지게 됩니다. 이때, 코드 ..