오늘 우리는 HashiCorp Terraform Redis Enterprise Cloud 공급자(Provider)의 출시를 발표하게 되어 기쁩니다. 개발팀이 지속적 통합/지속적 배포(CI/CD)와 같은 DevOps 원칙을 점점 더 많이 채택하면서, 코드형 인프라(Infrastructure as Code)로 인프라를 관리하는 능력은 이제 모든 클라우드 서비스에 필수적인 요소가 되었습니다. 코드형 인프라 분야의 선도적인 도구인 HashiCorp Terraform은 공급자와 모듈로 구성된 클라우드 인프라 자동화 생태계를 통해 주요 클라우드 제공업체와 서비스를 지원하며, 모든 클라우드, 인프라, 서비스의 프로비저닝, 컴플라이언스, 관리를 가능하게 합니다.
Terraform이란 무엇인가?
Terraform을 처음 접하는 분들을 위해 간단히 설명하자면, Terraform은 코드로 모든 것을 관리하며 인프라를 안전하고 효율적으로 구축, 변경, 버전 관리할 수 있는 도구입니다. 구성 파일을 사용해 애플리케이션 실행에 필요한 구성 요소들을 기술합니다. Terraform은 베어 메탈, 가상 머신, 클라우드 인스턴스 등 거의 모든 인프라 구성 요소와 다양한 인기 있는 IaaS(Infrastructure-as-a-Service) 서비스를 관리할 수 있습니다. 애플리케이션 스택의 구성 요소는 Terraform에서 리소스(resource)로 표현되며, Terraform 공급자(provider)는 해당 리소스의 API 상호작용을 이해하고 리소스의 기능을 외부에 노출하는 역할을 담당합니다.
오늘 발표하는 내용은?
이러한 증가하는 수요에 부응하기 위해 Redis는 Redis Enterprise Cloud용 Terraform 공급자를 개발했습니다. HashiCorp Terraform Redis Enterprise Cloud 공급자를 사용하면 고객이 어떤 클라우드 제공업체에서든 Redis Enterprise Cloud 구독(subscription), 데이터베이스, 네트워크 피어링을 코드로 손쉽게 배포하고 관리할 수 있습니다.
빠른 시작
Redis Enterprise Cloud의 Terraform 공급자가 어떻게 작동하고 무엇을 할 수 있는지 보여드리기 위해, 두 개의 데이터베이스를 포함하는 샘플 구독을 생성해 보겠습니다. 그중 하나는 RedisJSON 모듈을 사용합니다.
사전 준비 사항:
- 로컬에 설치된 Terraform
- Redis Enterprise Cloud 계정
- Redis Enterprise Cloud 계정에 대한 프로그래밍 방식 접근(programmatic access) 활성화
먼저 Redis Enterprise Cloud API 키를 환경 변수로 저장합니다:
$ export REDISCLOUD_ACCESS_KEY=<your API access key>
$ export REDISCLOUD_SECRET_KEY=<your API secret key>
이제 새 폴더를 만들고 아래와 같은 Terraform HCL 파일을 작성합니다. 파일 이름은 rediscloud-tf-example.tf라고 하겠습니다:
terraform {
required_providers {
rediscloud = {
source = "Redis/rediscloud"
version = "0.2.0"
}
}
}
# 신용카드 정보 입력
data "rediscloud_payment_method" "card" {
card_type = "Visa"
last_four_numbers = "1234"
}
# 데이터베이스용 랜덤 비밀번호 생성
resource "random_password" "passwords" {
count = 2
length = 20
upper = true
lower = true
number = true
special = false
}
resource "rediscloud_subscription" "example" {
name = "Demo"
payment_method_id = data.rediscloud_payment_method.card.id
memory_storage = "ram"
cloud_provider {
# AWS에서 Redis 리소스 실행
provider = "AWS"
cloud_account_id = 1
region {
region = "eu-west-1"
networking_deployment_cidr = "10.0.0.0/24"
preferred_availability_zones = ["eu-west-1a"]
}
}
database {
name = "redis-db"
protocol = "redis"
memory_limit_in_gb = 1
replication = true
data_persistence = "none"
throughput_measurement_by = "number-of-shards"
throughput_measurement_value = 2
password = random_password.passwords[0].result
}
database {
name = "db-json"
protocol = "redis"
memory_limit_in_gb = 1
replication = true
data_persistence = "aof-every-1-second"
module {
name = "RedisJSON"
}
throughput_measurement_by = "operations-per-second"
throughput_measurement_value = 10000
password = random_password.passwords[1].result
}
}
다음 단계는 아래 명령어를 실행하여 Terraform 환경을 초기화하는 것입니다:
$ terraform init
결과는 다음과 같아야 합니다:
... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. ...
Terraform이 성공적으로 초기화되면, 다음 명령어를 실행하여 Terraform이 플랜(plan)을 생성하도록 합니다:
$ terraform plan
출력 결과는 다음과 유사합니다:
... Plan: 1 to add, 0 to change, 0 to destroy. ...
이제 Terraform에게 마법을 부려달라고 요청해 데이터베이스를 프로비저닝해 보겠습니다:
$ terraform apply
terraform apply 명령은 완료까지 몇 분 정도 걸릴 수 있으며, 완료되면 다음과 같은 결과가 출력됩니다:
… rediscloud_subscription.example: Creation complete after 8m16s [id=103873] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ...
보시다시피, 두 개의 새로운 데이터베이스가 성공적으로 프로비저닝되었습니다. 이제 데이터베이스 엔드포인트를 가져와 애플리케이션에 연결하기만 하면 됩니다. 또한 Redis 애플리케이션 개발을 간소화하는 GUI 도구인 RedisInsight를 사용해 데이터베이스에 연결하고 데이터를 탐색할 수도 있습니다.
Redis Enterprise Cloud 콘솔에는 새로운 구독과 데이터베이스가 표시됩니다:
데이터베이스 사용을 마쳤다면, 다음 명령어를 실행하여 생성한 모든 리소스를 한 번에 삭제할 수 있습니다:
$ terraform destroy
다음은 무엇인가?
앞으로도 HashiCorp Terraform Redis Enterprise Cloud 공급자의 기능을 지속적으로 확장해 나갈 예정입니다. 공급자에서 지원했으면 하는 아이디어나 기능이 있거나 버그를 발견하셨다면, GitHub 저장소에서 이슈를 열어 알려주시기 바랍니다. pm.group@redis.com으로 의견을 보내주셔도 좋습니다.
프로덕션 사용 사례의 경우, HashiCorp의 클라우드 기반 Terraform 서비스인 Terraform Cloud 사용도 권장합니다. 이를 통해 자격 증명을 구성 파일 및 소스 컨트롤 외부의 안전한 환경에 저장할 수 있습니다. Terraform Cloud는 무료 원격 상태(remote state) 저장소, 사용자 지정 워크스페이스 권한, 버전 관리 시스템 통합, 정책형 코드(policy as code) 등 다양한 협업 기능도 함께 제공합니다. terraform.io/cloud에서 무료로 가입할 수 있습니다.