当我自己制作了自定义提供程序,我能更好地理解Terraform的机制
首先
个人使用AWS的费用太高了。我想通过Terraform来管理廉价VPS以便更加方便地使用。经过调查,我发现ConoHA VPS和さくらのVPS与Terraform兼容。但是还有更便宜的VPS,WebARENA Indigo也可以通过Terraform来使用,所以我尝试自己制作了一个自定义提供者(虽然我不确定这样做是否实用,哈哈)。
自定义提供程序的地球整形
既然不再详细解释Terraform的内容,看起来好像可以创建自定义提供者,所以我简单地进行了调查。虽然在Qiita上有一些文章,但版本过旧,最终我还是参考了官方文档。
Terraform 插件
大致总结是,使用SDK创建一个调用支持CRUD的云API的插件的计划。插件将使用Go语言实现。
在公式文件中有一个插件示例(terraform-provider-hashicups)可供公开使用。
WebARENA靛蓝
感谢WebARENA Indigo提供API的支持。(我开始构建时才意识到,这个API有很多限制和不太完善,给我造成了不少困扰)。
靛蓝客户前往
可以直接从插件中调用API,但是与教程中的方式(使用hashicups-client-go)一样,最好创建一个API的客户端库,因此我实现了WebARENA Indigo的Go客户端库。
- indigo-client-go
因为是一个完全没有写过Go的初学者写的,如果有什么不对的地方,请指出来我会很高兴。目前维护的动力不算太多…
Terraform供应商Indigo
使用Indigo Client Go,按照教程的步骤进行实施即是Terraform Provider Indigo。考虑到后面提到的一些限制情况,我认为在实际应用中可能会有些困难,所以我想它可能一直是α版。
- terraform-provider-indigo
努力的地方
-
- API呼び出しレート制限が厳しい
APIは1回/秒以上はダメと返してくるけれど、実際にはもっと厳しくてよく分からない
必要なAPIが揃っていない
“R”が不十分
ドキュメントが不正確
仕様書にないレスポンスが多数
APIの仕様がリソースごとにマチマチ
引数、レスポンス、パス、命名規則、型が揃ってない
APIの仕様が同じリソースでもマチマチ
同じフィールドが、CreateとUpdateで変わる(intだったりstringだったり、日付のタイプ、フォーマットが異なったり)
当前实现的功能
-
- SSH Keyの登録/削除
-
- インスタンスの作成/状態変更/削除 (一部の種類のみ)
-
- スナップショットの作成/削除
- Firewallの作成/更新/削除
备考
因为无法找到实例类型或计划的规格,所以我只是根据猜测测试了一部分配置。我考虑逐步将其文档化(希望官方文档能完善一下~)。
最后
这次尝试制作自定义提供商,我感觉对Terraform的内部有了一些了解。一旦了解了机制,就能更好地理解Terraform可以做什么以及在遇到问题时如何解决。如果你想熟练使用Terraform,请挑战一下吧~(虽然我还没完全掌握,有点汗)。