DevOps Bootcamp · レッスン

Null Resource とトリガー

実際のクラウドリソースに対応しない任意のコマンドを実行する `null_resource` と、Provisioner の実行タイミングを制御するトリガーについて学びます。

レッスン 3/411 ステップ

「Null Resource とトリガー」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

null_resourceとは?

Terraformのnull_resourceは、クラウドプロバイダー上のインフラオブジェクトを直接作成または管理しない、特殊な種類のリソースです。

その代わりに、任意のコマンドやスクリプトを実行するためのプレースホルダーとして機能します。通常のリソースのプロビジョニングでは扱えないタスクによく使用されます。

null_resourceを使う理由

なぜ「null」リソースが必要なのか、疑問に思うかもしれません。次のような用途で非常に役立ちます。

  • ローカルスクリプトの実行:Terraformを実行しているマシン上でコマンドを実行します(設定ファイルの準備など)。
  • デプロイ後の処理:実際のリソースをプロビジョニングした後に、セットアップやクリーンアップの処理を行います。
  • 外部APIとの連携:特定のサービスに対応する専用のTerraformプロバイダーが存在しない場合に使用します。
  • カスタムロジック:特定のクラウドリソースに直接結び付かない、カスタム手順を調整します。

null_resourceの基本構造

null_resourceブロックは、ほかのTerraformリソースと同じような構造です。プロビジョナーやトリガーを指定しなければ、Terraformの状態に「null」オブジェクトを作成するだけで、それ以外の処理は行いません。

通常は、コマンドを実行するためのプロビジョナーや、コマンドを実行するタイミングを制御するトリガーと組み合わせて使用します。

シンプルなnull_resourceの例

これは最小構成のnull_resourceです。これに対して terraform apply を実行すると、状態には作成されますが、外部での処理は何も行われません。

アクションを追加できる、単なるプレースホルダーです。

resource "null_resource" "my_placeholder" {
  # This resource exists in state but performs no action.
  # It's ready to attach provisioners or triggers.
}

null_resourceとプロビジョナー

null_resourceの真価は、プロビジョナーと組み合わせたときに発揮されます。

プロビジョナーを使うと、Terraformを実行しているマシン上(local-exec)や、リモートリソース自体(remote-exec。ただしnull_resourceではあまり一般的ではありません)でスクリプトやコマンドを実行できます。

これにより、null_resourceをアクションの実行役として利用できます。

トリガーの概要

triggersは、null_resourceブロック内で定義する任意のキーと値のマップです。

その目的はTerraformに、「このマップ内のいずれかの値が変更されたら、このnull_resourceとそのプロビジョナーを再実行する必要がある」と伝えることです。

これにより、null_resourceがインフラの変更に反応できるようになります。

トリガーの仕組み

triggersマップ内の値が変更されると、Terraformはnull_resourceの変更を検出します。

terraform applyの実行時、Terraformは次の処理を行います。

  • 既存のnull_resourceがあれば削除します。
  • null_resourceを再作成します。
  • 関連付けられたプロビジョナーを再実行します。

この仕組みにより、カスタムアクションは関連する依存関係が変更された場合にのみ実行されます。

例:トリガーとlocal-exec

ここでは、単純な変数に基づいて設定ファイルを更新する処理を、null_resourceで再現します。local-execプロビジョナーがコマンドを実行し、triggersによって var.app_version が変更された場合に再実行されるようにします。

variable "app_version" {
  description = "The version of the application."
  type        = string
  default     = "1.0.0"
}

resource "null_resource" "update_config_file" {
  triggers = {
    version_change = var.app_version
  }

  provisioner "local-exec" {
    command = "echo 'Config updated for version: ${self.triggers.version_change}' > app_config.txt"
  }
}

ベストプラクティスと代替手段

強力な機能ですが、null_resourceは慎重に使用してください。

  • プロバイダーを優先する:タスク専用のTerraformプロバイダーやリソースが存在する場合は、そちらを使用します。
  • べき等性を保つ:プロビジョナーで実行するスクリプトは、副作用を起こさずに安全に複数回実行できるようにします。
  • 状態管理を避ける:null_resourceで外部の状態を管理しようとしないでください。外部状態の管理にはリモート状態バックエンドを使用します。
  • externalデータソースを検討する:構造化データを返す複雑な外部ロジックには、externalデータソースのほうが適した代替手段になる場合があります。

クイックチェック:Nullリソース

null_resourceとtriggersについて学びました。理解度を確認してみましょう。

まとめ:Nullとトリガー

このレッスンでは、具体的なクラウドリソースに対応付けられないカスタムコマンドやスクリプトを実行する強力なツール、Terraformのnull_resourceの柔軟性について学びました。

また、null_resource内で依存関係を定義し、その依存関係が変更されるたびにプロビジョナーを再実行できる仕組みであるtriggersについても学びました。これにより、IaCで動的かつ変化に反応するカスタム自動化を実現できます。

無料で開始

AI チューターと学ぶ DevOps Bootcamp — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
142
レッスン
568

よくある質問

「Null Resource とトリガー」レッスンは無料ですか?

はい。「Null Resource とトリガー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「Null Resource とトリガー」で何を学びますか?

実際のクラウドリソースに対応しない任意のコマンドを実行する `null_resource` と、Provisioner の実行タイミングを制御するトリガーについて学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Null Resource とトリガー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Data Sources によるデータの取得
  2. Local と Remote Exec Provisioner
  3. Null Resource とトリガー
  4. 外部データとテンプレートの利用
← DevOps Bootcampに戻る