- OpenTofu 言語
- リソース
- リソースの振る舞い
リソースの振る舞い
resource
ブロックは、特定の設定を持つ特定のインフラストラクチャオブジェクトが存在することを宣言します。初めて新しい構成を作成する場合、その構成で定義されたリソースは、構成内のみに存在し、ターゲットプラットフォームの実際のインフラストラクチャオブジェクトをまだ表していません。
OpenTofu の構成を適用するとは、構成の設定と一致するように、実際のインフラストラクチャオブジェクトを作成、更新、および破棄するプロセスです。
OpenTofu が構成を適用する方法
OpenTofu が resource
ブロックで表される新しいインフラストラクチャオブジェクトを作成すると、その実際のオブジェクトの識別子が OpenTofu の状態に保存され、将来の変更に応じて更新および破棄できるようになります。すでに状態にインフラストラクチャオブジェクトが関連付けられているリソースブロックの場合、OpenTofu はオブジェクトの実際の構成と構成で指定された引数を比較し、必要に応じて構成と一致するようにオブジェクトを更新します。
要約すると、OpenTofu の構成を適用すると、次のようになります。
- 構成内には存在するが、状態内の実際のインフラストラクチャオブジェクトに関連付けられていないリソースを作成します。
- 状態には存在するが、構成にはもはや存在しないリソースを破棄します。
- 状態には存在するが、構成にはもはや存在せず、構成内の
removed
ブロックで参照されているリソースを忘却します。 - 引数が変更されたリソースをインプレースで更新します。
- 引数が変更されたが、リモート API の制限によりインプレースで更新できないリソースを破棄して再作成します。
この一般的な振る舞いは、タイプに関係なく、すべてのリソースに適用されます。リソースを作成、更新、または破棄することの意味の詳細は、リソースタイプごとに異なりますが、この標準的な動詞のセットはすべてに共通です。
以下のセクションで説明されている resource
ブロック内のメタ引数を使用すると、この標準的なリソースの振る舞いの詳細をリソースごとにカスタマイズできます。
リソース属性へのアクセス
OpenTofu モジュール内の式は、同じモジュール内のリソースに関する情報にアクセスでき、その情報を使用して他のリソースを構成できます。式でリソース属性を参照するには、<RESOURCE TYPE>.<NAME>.<ATTRIBUTE>
構文を使用します。
構成で指定された引数に加えて、リソースはリモート API から取得した情報を含む読み取り専用属性を提供することがよくあります。これには、リソースの一意のランダム ID のように、リソースが作成されるまで不明なものも含まれることがよくあります。
多くのプロバイダーには、情報検索のみに使用される特別なタイプのリソースであるデータソースも含まれています。
リソースまたはデータソースタイプが提供する属性のリストについては、ドキュメントを参照してください。これらは通常、構成可能な引数のリストの下にある 2 番目のリストに含まれています。
式でのリソース属性の参照の詳細については、「式: リソース属性への参照」を参照してください。
リソースの依存関係
構成内のほとんどのリソースには特定の関係がなく、OpenTofu は複数の関連性のないリソースの変更を並行して行うことができます。
ただし、一部のリソースは他の特定のリソースの後に処理する必要がある場合があります。これは、リソースの動作方法による場合もあれば、リソースの構成が別のリソースによって生成された情報を必要とする場合もあります。
ほとんどのリソースの依存関係は自動的に処理されます。OpenTofu は resource
ブロック内の式を解析して他のオブジェクトへの参照を検出し、リソースの作成、更新、または破棄時にそれらの参照を暗黙的な順序付け要件として扱います。他のリソースに動作上の依存関係があるほとんどのリソースも、それらのリソースのデータを参照するため、リソース間の依存関係を手動で指定する必要は通常ありません。
ただし、構成で暗黙的に認識できない依存関係もあります。たとえば、OpenTofu がアクセス制御ポリシーを管理する必要があり、かつ、それらのポリシーが存在することを必要とするアクションを実行する必要がある場合、アクセスポリシーとその作成が依存するリソースの間には隠れた依存関係があります。このようなまれなケースでは、depends_on
メタ引数を使用して依存関係を明示的に指定できます。
また、replace_triggered_by
メタ引数を使用して、通常は独立しているリソース間に依存関係を追加することもできます。これにより、参照されているリソースまたはリソース属性に変更があった場合に、OpenTofu は親リソースを強制的に置き換えます。
ローカルのみのリソース
ほとんどのリソースタイプは、リモートネットワーク API を介して管理されるインフラストラクチャオブジェクトタイプに対応していますが、OpenTofu 自体でのみ動作し、結果を計算して将来の使用のために状態に保存する、特定の特殊なリソースタイプが存在します。
たとえば、秘密鍵の生成、自己署名 TLS 証明書の発行、さらにはランダム ID の生成などのローカルのみのリソースタイプが存在します。これらのリソースタイプは、「実際の」インフラストラクチャオブジェクトを管理するものよりも周辺的な目的を持つことが多いですが、他のリソースを接続するのに役立つ接着剤として役立ちます。
ローカルのみのリソースの動作は他のすべてのリソースと同じですが、その結果データは OpenTofu の状態内にのみ存在します。このようなリソースを「破棄」するということは、状態から削除し、そのデータを破棄することを意味します。