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
「SOSの出し方を知ろう」 新卒入社から1年、学んだことを振り返る -
TECH
MobSF(Mobile Security Framework)でできること、動かない理由 -
TECH
3週間の自動テストが半日に! Playwrightの使い方の基本 -
TECH
Next.jsで静的テスト環境を構築し、GitHub Actionsで自動化してみた -
TECH
クイズ:正規表現で「0~255」のすべてにマッチするのはどれ? -
TECH
ミニPCサーバーにFluxを導入、GitOpsで自動デプロイする方法 -
TECH
アプリ開発の手戻りを防ぐ 「入力チェック(バリデーション)」の設計方法 -
TECH
Webアプリを使いやすく! 「入力チェック(バリデーション)」の正しい考え方 -
TECH
機械科卒・ITエンジニア就職から一年、やって良かったこと -
TECH
Chrome DevTools MCPとは? Claude Codeとの連携でWebアプリ開発体験が劇的に変わった -
TECH
Terraformのバージョン管理ツール、古いtfenvからtenvへの移行 - この連載の一覧へ





