[速報]Terraform for Arukas 開発のメモ

===

2017/2 追記: Arukasプロバイダーはv0.8.7からTerraform本体に組み込まれました。
https://www.terraform.io/docs/providers/arukas/index.html

===

# 祝:bangbang:Arukas パブリックAPIリリース:bangbang:

[Arukas](https://arukas.io/)使ってますか？

本日待ちに待ったArukas パブリックAPIが公開されました!!
[パブリックAPI ドキュメント](https://arukas.io/en/documents-en/arukas-api-reference-en/)

APIが公開されましたのでTerraformから使えるようにプロバイダ作りました。
以下に置いています。

[Terraform for Arukas](https://github.com/yamamoto-febc/terraform-provider-arukas)

そのうちちゃんとしたドキュメントや紹介記事を書きますが、、、
どんな感じかちょっとだけご紹介です。

# セットアップ

`Terraform`と`Terraform for Arukas`のセットアップは以下の手順です。

といっても、ダウンロード&展開するだけですので楽チンです。
ついでにArukas APIを使うため、APIキーの取得も行っておきましょう。

## Terraformのセットアップ

1) こちらの[公式サイト](https://www.terraform.io/downloads.html)からzipファイルのダウンロードを行います。
2) 適当なディレクトリに展開します。(ここでは例として~/terraformに展開する)
3) 2)のディレクトリにパスを通します。

以下はMacでの例です。

```bash:terraformインストール
# ダウンロード
$ curl -L https://releases.hashicorp.com/terraform/0.6.16/terraform_0.6.16_darwin_amd64.zip > ~/terraform/terraform.zip
# 展開
$ unzip ~/terraform/terraform.zip
# パスを通す
$ export PATH=$PATH:~/terraform/

```
### 動作確認

`terraform`コマンドを実行してみましょう。
以下のような表示がされればOKです。

```bash:terraform動作確認
$ terraform
usage: terraform [--version] [--help] <command> [<args>]

Available commands are:
    apply       Builds or changes infrastructure
    destroy     Destroy Terraform-managed infrastructure
    get         Download and install modules for the configuration
    graph       Create a visual graph of Terraform resources
    init        Initializes Terraform configuration from a module
    output      Read an output from a state file
    plan        Generate and show an execution plan
    push        Upload this Terraform module to Atlas to run
    refresh     Update local state file against real resources
    remote      Configure remote state storage
    show        Inspect Terraform state or plan
    taint       Manually mark a resource for recreation
    validate    Validates the Terraform files
    version     Prints the Terraform version

```

## Terraform for Arukasのセットアップ

1) こちらの[リリースページ](https://github.com/yamamoto-febc/terraform-provider-arukas/releases/latest)から最新版のzipファイルをダウンロードします。
2) terraformと同じディレクトリに展開します。

これだけです。簡単でしょ？

## Arukas APIキーの取得

Arukasコントロールパネルから発行しておきます。
![APIキー.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/0d6318f1-089a-80e8-9a2d-0613211486a2.jpeg)

取得したら以下のように環境変数に設定しておきましょう。

```bash:APIキーを環境変数へ設定
export ARUKAS_JSON_API_TOKEN=[取得したAPIキー]
export ARUKAS_JSON_API_SECRET=[取得したAPIシークレット]
```

# 実行

## Terraform実行(Nginxコンテナの例)

## 定義ファイル作成

Nginxを起動する単純なコンテナをArukas上で起動してみます。
まずはtfファイルを作成します。

```bash:arukas.tf作成
vi arukas.tf # 以下の内容を記載
```

```arukas.tf
resource "arukas_container" "arukas01"{
    name = "terraform_for_arukas"
    image = "nginx:latest"
    ports = {
        protocol = "tcp"
        number = "80"
    }
}
```

保存したらterraformを実行してみましょう。

```bash:terraform実施
terraform plan  # 確認
terraform apply # 実施
```

### `terraform plan`実行時のスクリーンショット
![plan.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/cc190017-f4a5-2ad9-1c9d-d040a1603b64.jpeg)

### `terraform apply`実行時のスクリーンショット
![apply.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/df081d1f-2352-66e3-db39-b27a1d6df3d6.jpeg)

## 動作確認

コントロールパネルを見てみましょう。
ちゃんと作成されてますね？
![after_apply.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/10ea6bf6-1e9e-d96e-3828-ef39d61f8e2a.jpeg)

今回はエンドポイントの名前を明示していない為、Arukasが自動割り振りしてくれています。

また、コントロールパネルを参照してもいいですが、
`terraform show`コマンドを実行すると、Arukas側で自動で割り振ってくれる値を確認できます。

![show.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/08ad2e1d-94b1-a6c2-66b4-f57420e48038.jpeg)

今回はエンドポイントのURLだけしか使いませんが、コンテナで`EXPOSE`したポートとArukas上での
ホスト名/ポート番号のマッピングも確認できます。

早速ブラウザで動作確認してみましょう。

![browser.jpg](https://qiita-image-store.s3.amazonaws.com/0/20668/e568f358-434d-5068-1496-fde5078aa001.jpeg)

表示されましたね？？
他にも定義可能なパラメータなどありますので、詳細は[GitHub](https://github.com/yamamoto-febc/terraform-provider-arukas)を参照してください。

#　まとめ

いかがでしょうか？ArukasがTerraformに対応したことで、
Terraformでのインフラ構築にまたひとつ強力な手札が増えましたね。

SSH接続できるDockerイメージを用意しておけば、Terraformのプロビジョニング機能も
使えます。(ChefやAnsibleでのプロビジョニングもできますよ!)

まだまだ開発中でtfファイルの書き方などが変わる可能性もありますので、
ご利用の際は[GitHub](https://github.com/yamamoto-febc/terraform-provider-arukas)にて最新の情報を参照ください。

以上です。