はじめに
Terraform Cloudにベータではありますが、 Remote Operation という機能が追加になったようなので今朝方申し込んでみたところ、もう使えるようになった旨の連絡がHashiCorpから来たので使ってみました。
何が出来るかというと、
- Terraformのコンフィグ(
.tfとか
)を管理しているVCS(GitHub)に変更をPUSHすると - 勝手にplanが走り、Terraform Cloud上で結果が見れる
- で、applyもその場から出来る
というような感じ。
結論、結構便利です。
ただ課題もありますが、ドキュメント読めばなにか対応方法が書いてあるのかもしれない。
ドキュメント的にはこれに従ってやっていきます。
Step 1: On GitHub, Create a New OAuth Application
まずGitHubの Register a new OAuth application に接続します。
直接上記リンクに行けばいいのですが、一応どういうページかというと、以下の流れでたどり着けます。
右上の自分のアイコンから Settings を選ぶ
サイドメニューから Developer settingsを選ぶ
サイドメニューから OAuth Apps を選ぶ
Register a new application を選ぶ
そうすると以下の画面になります。
で、それぞれの欄に以下の値を入力していきます。
自分の場合、Terraform Cloudのorganization nameは kei1 なんで、こんな感じでいいのかなと。
**Application Description** は任意に
Application callback URL は現時点では不明なので Terraformドキュメント に書かれている https://example.com/replace-this-later をそのまま入れてあります。
Field name | Value |
---|---|
Application Name | Terraform Cloud (kei1) |
Homepage URL | https://app.terraform.io |
Application Description | Test App for remote operation |
Authorization callback URL | https://example.com/replace-this-later |
入力できたら画面下部の Register application ボタンをクリックします。
すると以下のような画面になります。
黒く塗っている Client ID と Client Secret は後で使います。
ここでドキュメントにはご丁寧にも アプリケーションのロゴ設定しておいてね と書かれているので設定しておきましょう。
- こちら からアイコンをダウンロード
- それを Upload new logo ボタン等を使ってアップロード
-
Badge background color を
#5C4EE5
に設定
するとこんな感じになります。
で、このページは開いたままにしておき次のステップに進むようにと書かれています。
次に行きましょう。
Step 2: On Terraform Cloud, Add a VCS Provider
Terraform Cloud側での作業になりますね。
まずはログインして、上部の Settings を開き、左メニューから VCS Providers を選択。
次に、 Add VCS Provider ボタンをクリックするとこうなります。
ここに、GitHub側で表示されていた Client ID と Client Secret を入力します。
Name フィールドは空欄にしておきました。
入力が終わったら、 Create VSC provider をクリックします。
すると以下のような画面になります。
この Callback URL を次のステップで使うので画面はそのままで。
Step 3: On GitHub, Update the Callback URL
GitHub側で開いていたページに戻ります。
で、 Authorization callback URL を、先程Terraform Cloud側で表示されていた Callback URL で上書し、 Update application ボタンをクリックします。
次のステップに進みます。
Step 4: On Terraform Cloud, Request Access
Terraform Cloud側に戻り、 Connect organization (名前) ボタンをクリックします。
するとおなじみの以下のような画面になります。
Authorize (UserName) をクリックします。
成功すると以下のようなバルーンが表示されます。
で、これで一通り終了なんですが、その後にTerraformドキュメントではこう書かれています。
At this point, GitHub access for Terraform Cloud is fully configured, and you can create Terraform workspaces based on your organization's shared GitHub repositories.
ということは、workspaceを新たに作る必要がありそうですね。
Workspaceの新規作成
ということで、Terraform Cloudのトップ画面に戻って・・・
New workspace ボタンをクリックします。
まずこのような画面になります。
画面下部の GitHub ボタンをクリック。
するとリポジトリを選択する画面になります。
Terraformのコンフィグを管理しているリポジトリを選択しましょう。
自分の場合は一度新規に作成し直しました。
最後に Create workspace ボタンをクリックします。
ちなみに、空のリポジトリだとだめなようです。
成功すると、少しの間以下のような画面でWaitが走ります。
で、しばらくすると以下のような画面に。
とりあえずこれでworkspaceとしては完成しているようですね。
あとは変数設定したいような場合は、 Configure variables すればいいのでしょうし、そうじゃないなら Queue plan とかすればいいのでしょう、多分。
Queue planしてみる
ということで諸々設定して、 Queue plan してみました。
が、あるあるでしたね。
リモートのlinuxなんですね、これ。
プラグインパスをMacのそれにしてしまっていたので動かないと。
そこを直してGitHubにプッシュ。
すると今度は勝手にplanが走りました!!
手動での Queue plan もできるのですが、PUSHが入ると勝手にPlanするようですね〜。
これはなかなか良い。
今度は成功。
で、画面下部に Apply pending と出てます。
Confirm & Apply をクリックしてみましょう。
Apply行為に対して何かしらのコメントを残していけるようですね。
で、 Confirm Plan をクリック。
するとこうなります。
で、無事完了するとこうなる。
おーーーー。
これはいいですね。まだBetaではありますが、リリースされたら相当共同作業が楽になりそうです。
とはいえ、これmasterにPUSHした後動いてるのですよね
ただ、remote operationを発動するためには、masterにPUSHしないとだめなのかな。
ブランチでPUSHして、先に確認したいですよね本来は。
でOKならPRをマージするみたいなことをやりたいはず。
ということで、試しにブランチを切って、そちらでは main.tf
の中身を空にしてみました。
(要は手動で全リソースを消す(≒DESTROYみたいなもん)変更を突っ込む)
でも自動でPlanは発動しませんし、そもそもブランチ指定でPlanするような方法はないようです。
で、workspaceのcreateまで戻ってみると、実は作成時に Advanced options の中にこういう項目がありました。
要は デフォルトブランチで動いちゃうんで、指定があるなら書いてね ってことですよね。
ここは微妙に課題な気がしますね。
Atlantis のようなフローをするのはちょっと無理なのかな。
ちなみに利用するTerraformのバージョンとかも選択できたりしましたので、色々試す価値はありそうです。
というわけで以上 Terraform Cloud Remote Operation を試してみました。