Edited at

RubyからArukasのAPIを実行できるgemを作った


はじめに

この記事は、さくらインターネットさんが提供しているArukasのAPIをRubyから実行できるようにしたときの備忘録です

なお、作成したものはgemとしてリリースしています

ソースコードはこちら


きっかけ

仕事の関係でWordPressなどを簡単にデプロイして試せる環境が欲しいなぁとアレコレ探していたのが事の発端。

で、さくらインターネットさんのArukasがあったことを思い出し、Arukasを試してました。

Dockerイメージを使ってデプロイできるので便利だったんですが、一気に複数のアプリを作成したりがちょっと辛かった……(いや、GUI操作で簡単にデプロイできるので非常に便利なんですけどね)

仕事で使いたかったのは、「一気にパパーっと複数のDockerイメージをデプロイしたい」感じだったので……

というわけで、その辺をよしなにできるgemを作ろうと思ったのが作りはじめたきっかけです


つくったもの

arukas_wp.gif

自作したarukasを使うことで上記のように簡単にWordPressをデプロイできます

ちなみに、WordPressをデプロイしたときのソースコードはこちら

基本的にはJSONファイルで設定を書いて、Rubyで作成したJSONを読み込んでPOSTリクエストで送るだけでアプリを作成できる

アプリの起動とかは、アプリ作成時のレスポンスを受け取ることで処理できたりする


やったこと

基本的にはArukas API Referenceを読みつつ、rest-client/rest-clientでAPIへのリクエスト処理を書いただけ

PATCHPOST処理周りで422エラーが起きてたりしてややこしいことになったりもしたけども……

とりあえず、全APIを実行できるように実装はしてある


今後

とりあえず、仕事で使える感じにはなったので必要に駆られたときにだけメンテナンスするかなー?

あと、どこかの勉強会とかで実装時のアレコレとか話しても面白いかもね


参考

Arukas API Reference

rest-client/rest-client

【Microsoft Flow】Arukas アプリ作成時にハマったこと(API 認証編)


オマケ


Arukasへのデプロイチュートリアル

実際にArukasへデプロイするチュートリアルです。デプロイするのはnginxを使います

まず、必要なgemをインストールします

gem install arukas rest-client 

次に、適当なディレクトリを作成して、そのディレクトリへと移動します

mkdir hoge

cd hoge

次に、デプロイするnginxJSONを作成します


nginx.json

{

"data":{
"type": "apps",
"attributes": {
"name": "myapp"
},
"relationships": {
"services": {
"data": [
{
"lid": "1",
"type": "services"
}
]
}
}
},
"included": [
{
"lid": "1",
"type": "services",
"attributes": {
"command": "",
"custom-domain": "",
"image": "nginx",
"instances": 1,
"ports": [
{
"number": "80",
"protocol": "tcp"
},
{
"number": "443",
"protocol": "tcp"
}
],
"environment": [
],
"subdomain": ""
},
"relationships": {
"service-plan": {
"data": {
"type": "service-plans",
"id": "jp-tokyo/free"
}
}
}
}
]
}

次に、デプロイを実行するdeploy.rbを作成


deploy.rb

require 'arukas'

arukas = Arukas::API::new("ARUKAS_JSON_API_TOKEN", "ARUKAS_JSON_API_SECRET")

json = File.read("test.json")
arukas.create_apps(json)


ARUKAS_JSON_API_TOKENARUKAS_JSON_API_SECRETはArukasの設定画面内のAPIキーから簡単に発行したTokenSecretを貼り付けてください

あとは、ターミナルでruby deploy.rbを実行すればnginxがArukasにデプロイされています