FIXER cloud.config Tech Blog
null_resourceではなくazapi_resourceを使いましょう
2023年01月10日 19時30分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「まだnull_resource
でがんばっているの?」を再編集したものです。
こちらはFIXER Rookies Advent Calendar 2022の5日目の記事です。
みんな大好きAzureくん。
そんなAzureのリソースをTerraformでコード化する業務を普段行っているのですが、最近null_resource
で書かれたコードをazapi_resource
に書き換える機会が多かったためメモ代わりに共有していきたいと思います。
そもそもnull_resource
とは?
null_resource
を用いることにより、Providerが存在しない処理をTerraformで実行することができます。
しかしnull_resource
は名前の通りリソースが存在しないプロバイダーのため、tfstate
を確認するとinstancesの中に処理の結果が記録されず、null_resource
と他のProvider間の依存関係をTerraformはサポートしません。
メリット
・Terraform上でリソースの作成 &+α が実現できる
・Terraformでサポートされていない処理を実装できる
デメリット
・コード間の依存関係を持つことが難しい
・内部の処理をtfstate
上で確認することができず、デバッグ等が難しい
azapi_resource
で安心安全の処理を実現
そこでazapi_resource
をできる限り使いましょう。 これはAzure REST APIをTerraformで実行&管理するProviderです。 先ほどnull_resource
で挙げた例をazapi_resource
で再現した場合、
tfstate
上に処理の結果が記録されるため、azapi_resource
で実行したデータを他のProviderに反映することができ、依存関係をTerraformが保証するため、Azure RedHat OpenShiftやAzure Container Appsなど作成に時間がかかるリソースはazapi_resource
を活用した方が安全安心です。
メリット
・Azure Portalで実現可能な作業 ≒ Terraformで再現可能
・tfstate
上に実行ログが残るため、デバッグ時に重宝する
・他のProviderと明確な依存関係を持つことができる
デメリット
ignore_changesでフィールド名を個別に宣言することができず、bodyしか宣言できない。
まとめ
azapi_resource
を使うことにより、依存関係がはっきりしたコードを書くことができるため、できる限りnull_resource
で「えいや~~~」っとコードを書かないようにしましょう。 また筆者は最近Terraformの限界を感じ始めたので、「Azure SDK for GoでIaCを実現した方がリソースの作成+αが簡単にできて便利なのでは???」と模索しています。
西村 凌/FIXER
インフラエンジニア1年生
この連載の記事
-
TECH
Github Copilot Chatをさらに便利にする3つの機能 -
TECH
Prometheusで辞書形式のメトリクスを持つExporterを作りたい! -
TECH
GTM経由でカスタムディメンションを取得するTypeScript -
TECH
Grafana Tempo×OpenTelemetryの導入方法 -
TECH
Grafana TempoとLokiの連携で進化するログ解析とトレーシング -
TECH
「Microsoft 365開発者プログラム」のアクティベーション方法 -
TECH
サインインなしでも使える! 開発者向けAI検索エンジン「Phind」をご紹介 -
TECH
え、高級言語しか触ったことないのにCPUを自作するんですか!? -
TECH
Github Copilotで、コミットメッセージもAIに考えてもらう方法 -
TECH
Terraform 1.5から追加されたimportブロックがすごい!! -
TECH
はじめてのOSSコントリビュートで“推しからのリプ”をもらった話 - この連載の一覧へ