Elastic Cloud: Elasticsearch Service API, 이제 정식 버전 출시
Elastic Cloud 콘솔은 배포를 생성 및 관리하고, 청구 정보를 확인하고, 새로운 릴리즈에 대한 최신 정보를 얻을 수 있는 단일 장소를 제공하며, 일반적인 운영 및 관리 작업을 수행할 수 있는 쉽고 직관적인 사용자 인터페이스(UI)를 제공합니다.
이러한 관리 UI가 탁월하긴 하지만, 많은 기업에서는 특히 배포 관리를 비롯하여 일반적인 작업 및 워크플로우를 자동화할 수 있는 API 또한 원합니다. 이러한 워크플로우를 지원하는 Elasticsearch Service API가 정식 출시된다는 기쁜 소식을 알려드립니다.
그뿐만 아니라 API와 직접 통합하는 것 외에도 이제 Elasticsearch Service API를 지원하는 Elastic Cloud의 명령줄 인터페이스인 Elastic Cloud Control(ecctl)을 사용할 수 있습니다. 또한 cloud-sdk-go 라이브러리를 사용하거나 다른 프로그래밍 언어로 SDK를 생성할 수도 있습니다.
Elasticsearch Service API를 사용하여 배포를 생성하고 확장하는 방법에 대한 예를 설명하기 전에 먼저 API의 이점을 활용할 수 있는 몇 가지 일반적인 시나리오를 살펴보겠습니다.
CI/CD 파이프라인과 통합
대부분 사용자에게 Elastic Stack은 프로덕션 스택에서 중요한 부분을 차지합니다. 쿼리를 최적화하거나 새 Elastic Stack 버전을 테스트하는 등 Elasticsearch에 영향을 미치는 애플리케이션 변경 사항을 도입하게 될 수 있습니다.
CI/CD 파이프라인은 예를 들어 정확한 사양에 맞는 배포를 자동으로 가동으로써 잠재적으로 스냅샷에서 복원하여 프로덕션 클러스터의 데이터 세트를 손쉽게 사용할 수 있습니다. 이렇게 하면 프로덕션 환경을 업그레이드하기 전에 개발 또는 스테이징 환경에서 애플리케이션의 특정 코드 변경에 대한 즉각적인 피드백이 제공됩니다.
새로운 팀과 사용 사례 온보딩
Elastic Stack은 프로덕션 스택의 일부일 뿐만 아니라 애플리케이션과 인프라에 대한 통합 가시성을 확보하는 데 사용할 수 있습니다. 단일 배포를 여러 용도로 사용하는 대신 가능한 경우 전용 배포를 사용하여 사용 사례와 팀별로 구분하는 것이 좋습니다. 이렇게 하면 한 팀의 리소스 집약적 사용 사례 또는 의도하지 않은 버그가 다른 팀에 영향을 미칠 수 있는 잠재적인 “시끄러운 이웃 효과”와 관련된 마찰이 줄어듭니다.
Elasticsearch Service를 사용하면 그 수와 관계없이 모든 배포를 손쉽게 관리할 수 있습니다. 이제 선호하는 구성 관리자, Infrastructure as Code(Anable, Chef, Puppet, Terraform 등) 또는 사내 포털을 API와 쉽게 통합할 수 있습니다. 새로운 팀이 새로운 개발 스택을 생성하도록 등록 및 요청하면 사용자는 작업과 크기에 적합한 템플릿을 사용하여 배포를 생성하고 요구 사항에 맞춰 구성할 수 있으며 이 모든 작업은 수동 개입 없이 이루어집니다.
배포 확장
대부분의 사용자에게는 프로그램 방식으로 배포를 확장하여 사용량 증가를 지원하거나, 비활성 기간에는 축소하여 비용을 절감할 수 있는 방법이 필요합니다. 이러한 이벤트는 공휴일에 전자 상거래 웹 사이트의 트래픽 증가와 같이 예측 가능하거나, 계획에 없던 마감 세일로 인한 리소스 사용률 변화와 같이 예측하기 힘든 경우도 있습니다. 고객은 API를 사용하여 이러한 시간 기반 또는 사용량 기반 확장 워크플로우를 구현할 수 있습니다.
디스크 공간, CPU 또는 RAM과 같은 지표 기반 확장을 목표로 하는 경우에는 항상 고려해야 할 사항이 있습니다. 예를 들어, 축소한 후에는 현재 디스크 공간 사용량을 지원하기에 충분한 디스크 공간이 제공되도록 해야 합니다.
Elasticsearch Service API를 시작하는 방법
다음 예는 사용자 콘솔에 로그인할 필요 없이 API를 활용하여 배포를 관리하는 방법을 보여주는 일부 샘플에 불과하며, 이외에 수많은 활용 방법이 있습니다. 이제 Elastic의 명령줄 도구인 ecctl을 사용하거나 REST API에 직접 curl을 사용하여 배포를 생성하고 확장하는 방법을 보여 주는 간단한 단계별 설명을 살펴보겠습니다.
1. API 키 생성
인증을 수행하려면 먼저 계정 소유자임을 식별하는 데 사용할 API 키를 생성해야 합니다. API 키를 생성하려면 사용자 콘솔에 로그인하고 [계정] 섹션 아래의 [API 키 관리] 페이지로 이동합니다.
여러 API 키를 생성하여 여러 애플리케이션의 액세스를 보다 쉽게 관리하고 다른 키에는 영향을 주지 않고 원하는 키를 취소할 수 있습니다.
새로운 키를 생성할 때는 비밀번호를 다시 입력하고, 키 이름을 지정한 다음, 해당 키를 복사하거나 다운로드해야 합니다. 이때 외에는 키를 볼 수 없으므로 주의해서 안전한 곳에 보관해야 합니다.
2. ecctl 구성
ecctl을 처음 사용하는 경우라면 로컬 시스템에 설치해야 합니다. (설치 지침은 여기에서 확인할 수 있습니다.) ecctl을 시스템에 이미 설치한 경우 버전 1.0.0-베타3 이상을 사용해야 여기에 설명된 모든 명령이 지원된다는 점에 유의하세요. 훨씬 더 사용자 친화적인 방법으로 API와 상호 작용할 수 있는 ecctl을 사용하는 것이 좋지만, curl을 사용하는 예제도 함께 살펴보겠습니다.
설치가 완료되면 ecctl init
명령을 실행하여 구성 마법사를 사용할 수 있습니다. 제품을 선택하라는 메시지가 표시되면 Elasticsearch Service를 선택하고, 기본 출력으로 텍스트 또는 JSON 형식과 인증 메커니즘으로 API 키를 선택한 다음, 이전 단계에서 저장한 API 키를 입력합니다.
구성을 테스트하고 올바른지 확인하려면 활성 배포 목록을 반환하는 ecctl deployment list
명령을 실행합니다.
3. 첫 번째 배포 생성
필요한 모든 항목이 준비되었으므로 이제 첫 번째 배포를 생성할 수 있습니다. Elasticsearch Service는 사용 사례에 가장 적합한 구성 요소와 하드웨어로 배포를 신속하게 생성할 수 있는 배포 템플릿을 지원합니다.
API를 사용하여 배포를 생성할 때는 사용할 템플릿을 지정해야 하며 페이로드가 템플릿에 필요한 페이로드와 일치해야 합니다. 해당하는 클라우드 서비스 제공자 및 선택한 리전에서 사용할 수 있는 템플릿 목록은 사용 설명서에서 확인할 수 있습니다.
이 예제에서는 GCP 아이오와(us-central1) 및 I/O 최적화 템플릿을 사용하겠습니다. 아래 JSON 페이로드를 복사하여 create-deployment.json 파일로 저장합니다.
JSON 페이로드:
{ "name": "created-via-api", "resources": { "elasticsearch": [ { "region": "gcp-us-central1", "ref_id": "main-elasticsearch", "plan": { "cluster_topology": [ { "node_type": { "master": true, "data": true, "ingest": true }, "instance_configuration_id": "gcp.data.highio.1", "zone_count": 2, "size": { "resource": "memory", "value": 2048 } } ], "elasticsearch": { "version": "7.6.2" }, "deployment_template": { "id": "gcp-io-optimized" } } } ], "kibana": [ { "region": "gcp-us-central1", "elasticsearch_cluster_ref_id": "main-elasticsearch", "ref_id": "main-kibana", "plan": { "cluster_topology": [ { "instance_configuration_id": "gcp.kibana.1", "zone_count": 1, "size": { "resource": "memory", "value": 1024 } } ], "kibana": { "version": "7.6.2" } } } ], "apm": [ { "region": "gcp-us-central1", "elasticsearch_cluster_ref_id": "main-elasticsearch", "ref_id": "main-apm", "plan": { "cluster_topology": [ { "instance_configuration_id": "gcp.apm.1", "zone_count": 1, "size": { "resource": "memory", "value": 512 } } ], "apm": { "version": "7.6.2" } } } ] } }
모니터링 클러스터 설정 및 스냅샷에서 복원과 같은 추가 구성 옵션도 사용할 수 있습니다. 그러나 이 예제에서는 간단하게 2개의 가용 영역에 걸쳐 배포된 고가용성 Elasticsearch 클러스터, 단일 Kibana 인스턴스 및 단일 APM 서버로 새로운 배포를 생성하겠습니다. 이제 다음 ecctl 명령만 실행하면 배포 생성 작업이 진행됩니다.
또한, Elastic Cloud 사용자 콘솔을 사용하여 사용자 인터페이스에서 구성한 내용과 일치하는 동일한 API 요청을 출력하면 API에 대한 감을 잡을 수 있습니다.
ecctl:
ecctl deployment create -f create-deployment.json
진행 상황을 모니터링하려면 여기서 뿐만 아니라 다른 명령에서도 --track
플래그를 사용합니다. 일반적으로 --help
플래그는 사용 가능한 옵션을 확인하는 데 매우 유용합니다.
curl을 사용할 때는 다음 명령이 동일한 역할을 합니다.
curl:
curl -XPOST https://api.elastic-cloud.com/api/v1/deployments \ -H 'Authorization: ApiKey <API_KEY>" \ -d @create-deployment.json
응답은 요청이 성공적으로 제출되었음을 나타내며 배포 ID를 반환합니다. 다음 단계에서 클러스터를 확장할 때 필요하므로 배포 ID를 복사합니다. 또한, elastic
사용자용으로 무작위로 생성된 비밀번호가 포함되어 있으므로 즉시 이를 사용하여 Kibana에 로그인하거나 Elasticsearch REST API를 사용하여 배포를 추가로 구성하고 시작할 수 있습니다.
4. 배포 확장
이제 배포가 실행 중이므로 확장하려면 어떻게 해야 하는지 살펴보겠습니다. 이 예제에서는 데이터 노드의 크기를 4,096MB에서 8,192MB로 늘립니다. Elasticsearch 클러스터만 변경하므로 prune_orphans 필드를 false로 설정하여 배포에 포함된 다른 구성 요소(이 예제에서는 Kibana와 APM)를 제거해서는 안 된다는 것을 나타내야 합니다.
아래 JSON 페이로드를 복사하여 update-deployment.json 파일로 저장합니다.
JSON 페이로드:
{ "prune_orphans": false, "resources": { "elasticsearch": [ { "region": "gcp-us-central1", "ref_id": "main-elasticsearch", "plan": { "cluster_topology": [ { "zone_count": 2, "node_type": { "master": true, "data": true, "ingest": true, "ml": false }, "instance_configuration_id": "gcp.data.highio.1", "size": { "resource": "memory", "value": 4096 } } ], "elasticsearch": { "version": "7.6.2" }, "deployment_template": { "id": "gcp-io-optimized" } } } ] } }
이번에는 업데이트 명령을 사용합니다.
ecctl:
ecctl deployment update <DEPLOYMENT_ID> -f update-deployment.json
curl을 사용할 때는 PUT 메서드를 사용하여 새로운 plan을 제출합니다.
curl:
curl -XPUT https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID> \ -H 'Authorization: ApiKey <API_KEY>" \ -d @update-deployment.json
plan이 완료되기 전에 취소하려는 경우도 있을 것입니다. ecctl을 사용할 때는 “elasticsearch”를 유형으로 전달하여 plan 명령을 취소하고, curl을 사용할 때는 보류 중인 plan을 삭제하고 Elasticsearch ref-id, 즉 “main-elasticsearch”를 지정하는 요청을 제출합니다.
ecctl:
ecctl deployment plan cancel <DEPLOYMENT_ID> --kind elasticsearch
curl:
curl -XDELETE https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID>/elasticsearch/main-elasticsearch/plan/pending \ -H 'Authorization: ApiKey <API_KEY>"
5. 정리
마지막 단계로 shutdown 명령을 사용하여 생성한 배포를 삭제합니다.
ecctl:
ecctl deployment shutdown <DEPLOYMENT_ID>
소멸 작업을 제출하면 ecctl이 실행하기 전에 확인 메시지를 표시합니다. --force
글로벌 플래그를 사용할 수 있으며 이 플래그는 자동화에 사용할 경우 유용합니다.
curl을 사용할 때는 다음 요청을 제출하면 됩니다.
curl:
curl -XPOST https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID>/_shutdown \ -H 'Authorization: ApiKey <API_KEY>"
결론
배포를 생성, 확장 및 종료할 수 있는 방법을 보여드리기 위해 다양한 배포 자동화 사용 사례를 살펴보았습니다. API를 사용하여 다양한 프로시저를 자동화하고 배포를 관리하는 데 필요한 인적 개입을 줄이는 여러 다른 방법도 있습니다.
사용 가능한 API 엔드포인트 전체 목록을 보려면 사용 설명서의 RESTful API 섹션에 있는 API 예제로 이동하세요.
Elasticsearch Service를 처음 사용하시나요? 14일 무료 체험판에 가입하여 직접 사용해 보세요.