本記事はChris Rasmussen氏が2020年11月16日にnutanix.devに投稿した記事の翻訳版です。
原文はこちら。
Nutanix上での自動化を考えた場合、これは仮想マシンやイメージだけにとどまりません。Nutanix Calmでアプリケーションライフサイクル管理を、KarbonでKubernetesクラスタを自動化することができます。これらについてはコンポーネントや製品について、多くの記事とコードのサンプルでカバーされています。
ほとんどすべてのアプリケーションの一部ではあるものの、未だにNutanix.devでカバーされていないコンポーネントがあります ― データベースです。読者の一部はNutanix Eraが「あらゆるクラウドのデータベース運用をシンプル化」するものであるということについてご存知でしょう。Eraがどのようなものかについて更に詳しくはNutanix.comの記載を参照していきましょう :
パブリック、プライベート、そしてハイブリッドクラウドにおいて、Eraは単一コンソールからのシンプルで、高速、一貫した管理によって思い通りのデータベース管理を実現します。Eraによって劇的に稼働時間が改善され、退屈なマニュアル操作は低減され、コスト効率性が高まります。この次世代のクラウドとクラスタをまたいだ1-クリックのシンプルさが実現されます。これこそがEraが実現する新時代なのです。
– https://www.nutanix.com/products/era
しかしながら、もしもあなたがアプリケーションを設計する立場であるのなら、Nutanix Eraによって提供される優れたメリットをプログラマティックな形で享受したいと考えますよね? この記事はそんな皆様のためのものです。
私の環境
私がこの記事を2週間ほど前に書き始めたときには、Nutanix Eraのヴァージョンは1.3でした。最も新しいNutanix Eraのヴァージョンは2020年11月16日時点で2.0.1(2021年12月8日の翻訳時の最新は2.3)です。私の開発環境内ではこのヴァージョン(2.0.1)が利用されています。これ以降のEraのヴァージョンではユーザーインターフェイスが変更されている場合があります。
もしもこれまでに環境内にNutanix Eraを展開したことがなく、今回の記事を再現したいということであれば、Era User Guideをご確認ください。Eraのインストールと展開は Era installation and Initial Configurationというセクションに記載されていますが、この記事では取り扱わないこととします。
自動化とAPIのテストについてですが、私はLinux上のPostmanのPop OS 20.10(Ubuntu由来)を利用しています。この記事を書いた2020年11月16日時点ではPostmanの最新版は7.34.0です。
更に私のEraの仮想アプライアンスはIPアドレス 10.42.250.101に構成されています。もしまだそうしていないならEra仮想アプライアンスのIPアドレスを書き留めて置くことをおぼえておいてください。
今日のタスク
本日の記事では、とてもシンプルに見えることを実行します。実際のところ、あらゆる状況に応じて多くのアプローチがありますが、Eraを利用すれば以下のような手順を自動化することができます :
- EraでホストされたMySQLデータベースを管理する専用の仮想マシンの展開
- MySQLインスタンスをその専用仮想マシン内に展開
- 専用仮想マシンをEraの管理ツールを用いて管理、レポートできることを確認
この手順はEra UIを利用することで完全に迅速かつ容易になりますが、我々のタスクはこれをEra APIを利用してすべて行うことです。本日の記事からお持ち帰りいただきたいことはEraによってAPI経由でデータのリクエストを作成することがどんなに簡単になるかということです。それでは始めましょう。
リクエストを準備する
Eraの自動化の観点から最も素晴らしいことの一つとして、上で述べてきたようなMySQL仮想マシンとデータベースの展開に必要なすべての情報について、(UI上から)問い合わせてくるだけでなく、最終的にJSONフォーマットのrequest bodyも提供してくれることで、全く同様のことをプロブラマティックに行うことができます。EraはNutanix製品として初めてこれを実装した製品で、膨大な時間を節約することができます。ちょっとした免責とともにではありますが、追加情報が必要になった際には公式なNutanix.devのAPIドキュメントを常に公式リファレンスとして利用してください。
構成を指定
- Nutanix EraをEraアプライアンスのIPアドレスをブラウザに入力して開き、展開の最中に指定した認証情報を利用してログインします。もしもこれまでにEraを利用したことがない場合、利用しているEraのヴァージョンについての概要情報、Eraが展開されているクラスタ名、Eraが現在管理しているエンティティのリストなどが表示されます。私の環境ではEra 2.0.1を標準設定に戻してきれいにしてあるため、仮想マシンやデータベースはまだ利用できません。
- 「Dashboard(ダッシュボード)」をスクリーンのトップのメニューから選択し、「Databases(データベース)」とラベルされたサブメニューを選択します。Eraが管理できる様々なデータベースタイプが表示されます – Oracle, MySQL等 – 注意: もしもすでにこれまでにEraを開いたことがことがあれば、トップメニューは異なって表示される場合があります。
- 「MySQL」の下の「Source Instances(ソースインスタンス)」をクリックします。
- そののち、「Provision(展開)」ボタンをクリックし、「MySQL」を選択できます。
- ここで選択する設定は皆様次第です、データベース自体はデモ用途でのみ利用されているからです。以下に表示するのが私が基本的な展開で使った設定です。最後のステップで「Provision(展開)」をクリックしないでください!
注意: 最初のステップ内で、SSHの公開鍵が必要になります。もしもご自身のものがあればご利用ください、もしもない場合には以下のテキストを選択して利用してください(ここで使うのは構いませんが、他で使わないでください。):
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDOlc2+i6CanUwxRq3b0WsxSOA2kmbl1/sBWXuRPA4XVBHFykqrhvpO01nxm49mGOhYcmO2XgnG9ZQGKohhJHTScGc2IUOkwjfPcc0KyXprn1LKz/y7aAi3jSaeH0iPmsGiwSQut1kjs+UZKqZ/keD0011X1o38cHg87kapemyOpeGm9Vx4vqEoXAHepzvabBSH4UfUdO2lRhKJ9/3Cyl2W4HW/uJBMu2W+7Uc7o5mfRvoso1oYBxoRAd/AF/vVl002QOwjfOZ6Qa0+4mzWtFLfkmbTVf+z502JGlqaGGZw4gGjBv5JJYa2JJxpdT5VYqx4obowDn3NE17uhjWGrwc7LMAIZzSc5SWChrze9M/2e96A5iNJvsppN56MT5F/MoKDuRAyzWtxGQqGD4yH1rB1YhLYTk5ug3GI2pPrW0iY/3Gbn2xq/HTr08+v+7T/sBj7wdWmRggkqs4+rmxesRylhkcOI/x7NudGGJQA20x7TDsb6sJUHgmkotEjY4UNV8B6duhJW0XviRNDKXkgH6rZAa6VQyiuc+p56REn0EXDN7o+0zUfocNpC7lUU44MO+ghJv9UNtNwNWHE7/X5sXqQxosSB5qcPyyLQQqDqLwN/XCXhNrEquaFhpMQ9KYazRwBOysacJ3XfhcsCc6jEXHLtfme3J2QNswr2kFUFXUZ+Q==no-reply@acme.com
- 手順の最後のステップで、「API Equivalent(等価API)」ボタンが表示されます。「API Equivalent(等価API)」ボタンが今回注目すべきものです。こちらをクリックして、左のペーンの「Copy(コピー)」ボタンをクリックしてJSONデータをコピーしてください。
注意: これからリクエストをPostmanを利用して送信します、しかし、API Equivalentウィンドウの右側をみていただいて分かる通り、必要であれば、コードのサンプルも提供しています。
ここで確認できるのは、Eraが以前のステップの入力値をすべて受け取り、JSONのPOSTのrequest bodyを作成しているということです。これを適切なAPIリクエストへと組み入れ、データベース仮想マシン、新しいインスタンス、そしてデータベース自身を1ステップで作成します。
リクエストの作成
Nutanix Era API documentation が Nutanix.devで利用できますが、それ以外のものをまずみていきましょう。
殆どのエンティティやエンティティのリストを取り扱うAPIと同様に、Era APIもEraから何が見えているのかを確認することができます。しかし、既存の仮想マシンやイメージ、Calmなどへのアクセスを提供するNutanix Prism APIとは異なり、Era APIのエンドポイントはPrism Central経由ではアクセスしません。それらへのアクセスはEraの仮想アプライアンスのIPアドレスから行います。これを心に留めておいてください、あとから混乱せずにすみます。
以下はEra APIを利用して行えるよく使うAPIリクエストです。
Get Era Databases (Eraのデータベースリストを受け取る)
- Request type: GET
- Request URL: https://{{era_ip}}/era/v{{era_api_version}}/databases
- 例:
https://10.42.250.101/era/v0.8/databases
Get Era Database by Name (名前からEraのデータベースを受け取る)
- Request type: GET
- Request URL: https://{{era_ip}}/era/v{{era_api_version}}/databases/name/{{database_name}}
- 例:
https://10.42.250.101/era/v0.8/databases/name/mysql01_db01
Provisioning The Database VM (データベース仮想マシンを展開する)
JSON POST bodyが準備できましたので、次のステップへと進むことができます ― Nutanix Era APIを利用してデータベース展開のリクエストを送信します。
- Request type: POST
- Request URL: https://{{era_ip}}/era/v{{era_api_version}}/databases/provision
- Request body: 以前のステップでコピーしたもの
- 例:
https://10.42.250.101/era/v0.8/databases/provision
適切な情報をPostmanへ詰め込んで、「Send(送信)」ボタンをクリックすると、以下の応答を確認することができます。レスポンスは以下のとおりです(同じ名前の物があることを忘れていたので、スクリーンショット内の名前からタイムマシンの名前を変更しなければなりませんでした)。
{
"name": "mysql01",
"workId": "6bdf5f0681743250574cfc9a051fdc7a21eb4223f0162e586f67abcefe92fcc1",
"operationId": "f75acb32-e2dc-483b-9e4e-212d06f1700d",
"dbserverId": "eb352b69-b8df-444e-886a-806378854b0b",
"message": null,
"entityId": "4a11b8c8-ea46-44ff-ba6f-0df195fd9728",
"entityName": "mysql01",
"entityType": "ERA_DATABASE",
"status": "success",
"associatedOperations": null,
"dependencyReport": null
}
JSONの応答内にではいくつかのこれまでにない情報が提供されます。今回の記事で特に注目しなければならないのは operationId です。この操作に関するIDを利用して、他のAPIリクエストを送って、プログラマティックに展開のリクエストの状況を確認することもできます。
- Request type: GET
- Request URL: https://{{era_ip}}/era/v{{era_api_version}}/operations/{{operation_id}}
- 例
https://10.42.250.101/era/v0.8/operations/f75acb32-e2dc-483b-9e4e-212d06f1700d
私の開発システムでデータベースの展開中にこのリクエストを走らせると、これが表示されます(レスポンスがとても長いので切り詰めてあります):
{
"entityName": "mysql01",
"work": null,
"stepGenEnabled": false,
"setStartTime": false,
"timeZone": "UTC",
"id": "f75acb32-e2dc-483b-9e4e-212d06f1700d",
"name": "Provision MySQL Database mysql01",
"uniqueName": null,
"type": "provision_database",
"startTime": "2020-11-16 03:56:00",
"timeout": 250,
"endTime": null,
"instanceId": null,
"ownerId": "eac70dbf-22fb-462b-9498-949796ca1f73",
"status": "1",
"percentageComplete": "77",
"steps":
{
...
視覚的なリクエストの確認
同様に、リクエストが処理されている最中にEraのUIでは操作のステータスを確認することができます。私の開発環境のEraのUIでは以下のような画面が表示されました:
データベース展開処理を選択することで、それぞれのステップの詳細を見ることができます。
まとめ
何が実現できたのか? ほんの僅かです:
- 新しいMySQLインスタンスを保持する専用のLinux VMを展開
- 単独のデータベースを保持するMySQLインスタンスを展開
- 単一のデータベースを新しいインスタンス内に展開、これを新しいMySQLデータベースホストとする
- これらのすべてがEra APIを利用して完了していますが、JSONの request bodyすら我々は各必要がありませんでした!
本稼働環境やエンタープライズ環境においては環境のデータベース管理者によってこうした構成の殆どが行われていますが、我々の場合、アプリケーションの開発者がJSON のPOSTのRequest body内にこうした情報を埋め込み、リクエストを送信するだけです。つまり、我々は以下も実現しているのです:
- Nutanix Calmのblueprint内の変数として入力値を利用
- データベースの展開を必要とするWebアプリや他のあらゆるアプリケーションのをこうした変数を利用するアプリケーションとして展開
更にこの先は?
もしも我々のTwitterのフィード@NutanixDevs をフォローしているのであれば、Nutanixのデベロッパーマーケティングチームが最近NutanixDEVLiveというTwitchチャンネルを始めたのをご覧になっていると思います。毎月第2水曜日にTwitchストリームを実施し、様々なトピックスをカバーしています。今週のトピックスは・・・?ご想像のとおりです。Nutanix EraとEraを利用することで、どのようにしてクラウドに普遍なデータベース管理を用意に実現するか(訳注:本イベントはすでに終了しています)。NutanixDEVLive on Twitchへアクセスして、スケジュールの詳細情報を確認しましょう。
今回の情報がみなさまにとって興味深く、便利なものであることを願います。お読みいただきありがとうございます、良い日をお過ごしください🙂