マネージドクラウドをAPIを使って操作しよう

ようやくワイドグリップ懸垂をゆっくり15回できるようなったエンジニアの@linyowsです。こんにちは。みなさんパンプアップしてますか💪

さて、マネージドクラウドでは、こっそりAPIが公開されていまして、同様に公開されているAPIクライアントを使用し、マネージドクラウドを操作することができます(注:APIは正式版ではないのでカジュアルに仕様の変更がある可能性があります)。クライアント対応言語は、今のところGoとRubyで、今回は、Go版を使ってのご紹介となります。PHP版は、多分 小山さん(@k1low)がやってくれるでしょう。😇

CLIのインストール

Goの環境が手元のマシンにある方は、以下のgo getでOKです。ない方は、 https://github.com/pepabo/golipop/releases のAssetsから対象バイナリをダウンロードしパスの通っている場所に配置します。

# Go環境の方用
$ go get github.com/pepabo/golipop/cmd/lolp

APIの認証

マネージドクラウドAPIを使用するには、まず認証する必要があり、認証後に発行されたauthorization tokenを環境変数に設定して利用します。

# https://mc.lolipop.jp/login と同じものを入力
$ lolp login -u <ログインメアド> -p <ログインパスワード>
export LOLP_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni...

# 出力されたものをそのまま使って環境変数に入れる
$ export LOLP_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni...

これで、他のAPIを使用することが出来るようになりました。

プロジェクトの作成

プロジェクトには、現在 WordpressやPHP、Ruby on Rails、Node.jsといった種類あります。プロジェクト作成では、この種類を指定しつつ、指定した種類に必要なパラメーターを引数としてコマンドに渡します。コマンド実行後に出力されるドメインは、作成したプロジェクトのドメインになります。

# wordpressを使うプロジェクトの場合
$ lolp project create --kind wordpress \
  --payload username:linyows \
  --payload email:linyows.wp@example.com \
  --payload password:secretWPPassword!!1
lively-kokubu-4320.lolipop.io

# node.jsを使うプロジェクトの場合
$ lolp project create --kind node --db-password secretDBPassword!!1
sweet-maebaru-3839.lolipop.io

また、プロジェクトのサブドメインを指定したい場合や、カスタムドメイン使いたい場合は以下のようにオプションを追加します。

# サブドメインやカスタムドメインを指定する場合
$ lolp project create --kind rails --db-password secretDBPassword!!1 \
  --sub-domain awesome-project \
  --custom-domain test.example.com \
  --custom-domain www.example.com
awesome-project.lolipop.io

プロジェクトの一覧

次に、プロジェクト一覧を表示してみましょう。一覧で取れる情報は限られているので、詳細に取得したい場合は後述のプロジェクトのサブドメイン名を指定して詳細情報を取ります。

# 作成済みプロジェクト一覧
$ lolp project list
ID                                    Name                           Kind
58b22c80-5c64-41ed-ac51-7ca0c695e591  lively-kokubu-4320.lolipop.io  wordpress
507dbd34-d6af-49d5-9d3d-98933c02a010  sweet-maebaru-3839.lolipop.io  node
9b66c457-81e4-4c50-8844-2e3f45c6f16c  awesome-project.lolipop.io     rails

プロジェクトの詳細

一覧で表示されたドメインから、サブドメイン名をコマンドの引数として実行します。一覧とは違い、データベースやSSHでのアクセス情報が取得できます。

# プロジェクト詳細
$ lolp project awesome-project
ID                   "9b66c457-81e4-4c50-8844-2e3f45c6f16c"
Name                 "awesome-project.lolipop.io"
Kind                 "rails"
Domain               "awesome-project.lolipop.io"
SubDomain            "awesome-project"
CustomDomains        []string{"test.example.com","www.example.com"}
Database             lolp.Database{Host:"mysql-1.mc.lolipop.lan", User:"fd595d227f8225b5c2ee5fd243f61e1b", Name:"fd595d227f8225b5c2ee5fd243f61e1b"}
SSH                  lolp.SSH{User:"smart-naha-3123", Host:"ssh-1.mc.lolipop.jp", Port:41178}
CreatedAt            2018-04-06T14:38:07Z
UpdatedAt            2018-04-06T14:38:07Z

プロジェクトの削除

プロジェクトの削除も簡単です。プロジェクト詳細と同様に、引数でサブドメイン名を渡すことで綺麗さっぱり削除されます。くれぐれも、削除するプロジェクトに大事なデータがないかはご確認ください 🙏

# プロジェクト削除
$ lolp project delete awesome-project
delete successfuly

まとめ

このAPIの使い所としては、CIからカジュアルにマネージドクラウドにテスト環境を構築し、E2Eをマネージドクラウド上のプロジェクトに対して行ったり、サンドボックス環境をエンジニアがCLIから作って検証する等があげられます。マネージドクラウドをバックエンドとして自前のFaaSサービスを提供することも、できなくはないでしょう。夢は広がりますね!

なお、APIドキュメント等の整備は正式版アナウンスまでにやっていきます。しばしお待ちください。