新闻

Elastic Cloud:Elasticsearch 服务 API 现推出 GA 版

Elastic Cloud 控制台能够让您一站式创建和管理自己的部署,查看计费信息,并随时了解新发布版本。它针对常见的管理和行政任务提供了简单且直观的用户界面 (UI)。

管理 UI 固然很好,但是很多公司/组织还想使用 API 来自动完成常见任务和工作流,尤其是用其来管理部署。我们非常兴奋地宣布推出 Elasticsearch 服务 API 的正式版本,让您能够启用这些工作流。

不仅可以直接与 API 进行集成,您还可以使用 Elastic Cloud Control (ecctl);ecctl 是 Elastic Cloud 的命令行界面,现支持 Elasticsearch 服务 API。您还可以使用 cloud-sdk-go 库或者生成以其他编程语言编写的 SDK

在我们通过示例展示如何使用 Elasticsearch 服务 API 来创建和缩放部署之前,首先介绍一些您可从 API 中受益的几个常见场景:

与 CI/CD 管道进行集成

对我们的很多用户而言,Elastic Stack 是他们生产堆栈中至关重要的一部分。您可能向应用程序中引入会影响到 Elasticsearch 的变更,例如优化查询或者测试新的 Elastic Stack 版本。

举例说明,CI/CD 管道能够按照您的精准要求快速创建一个部署,还有可能从快照中进行恢复从而轻松使用您生产集群中的数据集。在您升级生产环境之前,这能够在开发或者模拟环境中针对您应用程序中的特定代码变更给出即时反馈。

新团队加入流程,以及推出新用例

Elastic Stack 不仅可作为生产堆栈的一部分,您还能用其来针对您的应用程序和基础设施获得可观测性。我们不建议使用单一部署实现多项用途,而是建议尽可能使用专用部署将用例和团队分割开来。这能够大幅降低于与邻居噪音可能造成的影响相关的冲突,也就是这种情况:一个团队的资源密集型用例(甚至只是不经意引入的错误)能影响到其他团队。

有了 Elasticsearch 服务,无论管理多少个部署,都是小菜一碟。而且,使用我们的 API,您现在可以轻松地与您最喜欢的配置管理工具或者“基础设施即代码”工具(例如 Ansible、Chef、Puppet、 Terraform,或者贵公司的内部门户)进行集成。当新团队注册或请求创建新的开发堆栈时,您可以使用适用于该项作业和规模要求的正确模板为他们创建部署,并基于他们的需求进行配置,全程无需手动干预。

缩放部署的规模

我们有很多用户都需要能够通过编程方式来实现下列两点:在使用量增加时扩大部署规模以提供支持,或者在不活跃期间缩小部署规模来降低成本。这些事件有些是可预测的,例如电商网站的流量由于国家公共假期而骤增,有些则不太好预测,例如在计划外的最后一分钟促销期间资源利用率发生变化。客户使用 API 便可以实施这些基于时间或者基于使用量的规模缩放工作流。

如果您的目标是基于指标(磁盘空间、CPU 或者 RAM)进行规模缩放,则您务必谨记一些考虑因素。例如,在缩小规模之后要确保有足够的磁盘空间来支持当前的磁盘空间使用量。

如何上手使用 Elasticsearch 服务 API

您在很多情况下,都能使用 API 来在无需登录我们用户控制台的情况下管理自己的部署,这里只举了少数几个示例而已。现在我们将专注于带您快速完成一些步骤,向您展示如何直接针对 REST API 使用 ecctl(我们的命令行管理工具)或 curl 来创建部署或者缩放部署的规模。

1. 创建 API 密钥

出于身份验证目的,您必须首先生成一个 API 密钥,因为系统使用这个密钥才能识别您是账号所有者。如要生成 API 密钥,登录用户控制台,前往“账号”部分下面的 API 密钥管理页面。

您可以生成多个 API 密钥以更轻松地从多个应用程序管理访问权限,而且还能在不影响其他密钥的情况下撤销密钥。

创建新密钥时,您需要重复输入密码,输入一个名称,然后复制或者下载该密钥。需要注意下面十分重要的一点:您只有这时才能看到密钥,所以一定要将其保存在安全的地方。

gen-api-key.gif

2. 配置 ecctl

如果这是您首次使用 ecctl,需要在本地设备上进行安装。(您可在此处查看安装说明)。如果您已在设备上安装 ecctl,请确保您使用的是 1.0.0-beta3 或更高版本,以确保可以支持此处所描述的全部命令。虽然也会提供使用 curl 的示例,但是我们推荐使用 ecctl,因为用户与我们的 API 进行交互时使用 ecctl 要简单得多。

安装完毕后,您可以运行 ecctl init 命令来对其进行配置。在提醒选择产品时,选择 Elasticsearch 服务,然后选择文本或 JSON 格式作为默认输出,选择 API 密钥作为身份验证机制,并输入在前一步中保存的 API 密钥。

如要对配置进行测试并确保正确无误,请运行 ecctl deployment list 命令,该命令会返回活跃部署的列表。

ecclt-init-2.gif

3. 创建您的首个部署

现在已万事俱备,您可以创建自己的首个部署了。Elasticsearch 服务支持使用部署模板,借助模板您能够快速创建包含最契合您用例的组件和硬件的部署。

使用 API 创建部署时,您需要指定希望使用哪个模板,并且负载必须与模板的预计负载相一致。如需查看您的云服务提供商和所选区域中可用模板的列表,请参阅我们的用户指南

在此示例中,我们将会使用 GCP Iowa (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"
          }
        }
      }
    ]
  }
}

还可提供其他配置选项,例如设置监测集群以及从快照进行恢复。但是在这个示例中,为简单起见,我们将会使用下列选项来创建一个新部署:一个在两个可用区中部署的高度可用的 Elasticsearch 集群,单个 Kibana 实例,以及单个 APM 服务器。现在我们只需运行下面的 ecctl 命令就可以了,这将会开始部署创建过程。

而且,您可以使用 Elastic Cloud 用户控制台来输出等效的 API 请求以匹配您在用户界面中配置的内容,从而瞬间即可感受一下您的 API。

rest_api_console.gif

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 来进一步配置并开始使用您的部署。

create_deployment_ecctl.gif

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 方法来提交新计划。

curl:

curl -XPUT https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID> \
-H "Authorization:ApiKey <API_KEY>" \
-d @update-deployment.json

在某些情况下,您可能需要在计划完成之前将其取消。您可以使用 ecctl 来取消计划命令,将 “elasticsearch” 作为类型进行传输;如使用 curl,需提交请求来删除待处理的计划并指定 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 服务?注册 14 天的免费试用计划亲自尝试一下吧。