ニフクラ用の Terraformカスタムプロバイダを書いてみた(未完)


概要

先日記事に書いたニフクラ用Terraform Provider について、中途半端なところではありますが開発を終了しました。
ニフクラを利用する職場を離れたため、今後は動作検証もできないので、ここまでとなりました。

ニフクラ用Terraform Provider

予定通りロードバランサー、付替IPアドレスまでは追加できたので、作成可能なリソースは最終的に以下のようになりました。

リソース ステータス 備考
サーバー ok インポートやコピーは作っていません
ディスク ok
ネットワーク・セキュリティ ok SSHキーインポートのみ
OSイメージ ok
ロードバランサー ok SSL関連は未検証
マルチロードバランサー n/a
ファイアウォール ok
SSL証明書 n/a
付替IPアドレス ok
追加NIC n/a
オートスケール n/a
基本監視 n/a
プライベートLAN ok
ルーター ok dhcp関連とNAT関連とWebプロキシは作っていません
拠点間VPNゲートウェイ ok
サーバーセパレート n/a
バックアップ ok
RDB ok イベント通知は作っていません
NAS n/a

サンプルイメージ

examples_v0.12.14+ のコードを実行すると、とりあえず以下のような環境ができあがる状態になっています。
disableにしていますが、RDB やバックアップ、カスタマイズイメージも作成可能です。

備忘録

作成中はずっと Terraform v0.12.9 と examples のサンプルでテストしていました。
無事予定していたところまで完成したので、終了しようと思ったところ、Terraform のバージョンがいつのまにか v0.12.16 まで上がっていました。
せっかくなので最新バージョンで動作確認しようと思ったところ、エラーの嵐が・・・。
v0.12.14以降は変数の記載の仕方が厳格になったのですね。
そのため急遽 examples を修正して、 examples_v0.12.14+ を作りました。
これで動く・・・と思いきや、 Error: rpc error: code = Unavailable desc といったエラーが大量にでました。
「今さらどうしよう・・・なぜ・・・」と思いましたが、hashicorp 関連といえばもうひとつあるぞ、と気づきました。
作成しているコード側で、 github.com/hashicorp/terraform-plugin-sdk/ を使っているんですよね。
go.mod を見ると v1.1.1 でしたが、最新版は v1.4.0 まで上がっていました。
go.mod の記載を修正して再度 build したものを利用したところ、問題は無くなりました。
今後利用される方がいらっしゃった場合に、このあたりも気にしていただくと、しばらくはバージョンが上がってもちゃんと動くのかな、と思っています。

今後について

私の開発は終了ですが、もし続きを作ろうかなとか、修正したいなとお考えになる方がいらっしゃったときのために、環境を分ける方法を簡単に記載しておきます。
以下のように自分の環境を作っていただいたらよいのかな、と思っています。

  1. github等で nifcloud-sdk-go と terraform-provider-nifcloud のリポジトリを作成
  2. 以下のようにして、自分の環境を作成
mkdir -p $GOPATH/src/github.com/YOURACCOUNT
cd $GOPATH/src/github.com/YOURACCOUNT
git clone https://github.com/shztki/nifcloud-sdk-go.git
cd nifcloud-sdk-go
git checkout -b XXXXXX
find ./ -type f | xargs sed -i "s/shztki/YOURACCOUNT/g"
git add .
git commit -m "path change"
git push -u origin XXXXXX

cd $GOPATH/src/github.com/YOURACCOUNT
git clone https://github.com/shztki/terraform-provider-nifcloud.git
cd terraform-provider-nifcloud
git checkout -b XXXXXX
find ./ -type f | xargs sed -i "s/shztki/YOURACCOUNT/g"
git add .
git commit -m "path change"
git push -u origin XXXXXX
  • branch を作成している部分は、分けるつもりが無ければ不要です。
  • sed での置換については、すべてのファイルが変更になるので注意。 .git 以下も変わるので、 git remote set-url origin https://~ が不要になります。
  • github等のデフォルトブランチは自分が利用するブランチにしてください。

最後に

お読みいただきありがとうございました。
中途半端なところで終了してしまいましたので、業務に取り入れる、などは開発を継続できるような方でないと難しいと思いますが、個人でこっそり構築タスクを効率化する、程度であれば、ちょっとはお役に立てそうかな、と考えたりもしております。
私の試行錯誤した流れが、多少でもお役に立てれば幸いです。
どうぞよいニフクラライフを!