マネージドクラウドを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ドキュメント等の整備は正式版アナウンスまでにやっていきます。しばしお待ちください。