Calendarの5日目の記事です。Language(HCL)の文法で記述されます。sourcevariableoutputの4つについて書き方と使い方を解説します。resourcewww.terraform.ioインフラのレシピを構成するコンポーネントで、記述されたresourceの定義通りにTerraformはインフラの構成に変更を加えます。resourceを新しく定義すると作成、一部を変えると変更(もしくは削除→再作成)、定義を消すと削除の操作がレシピで定義されている全てのインフラ上のリソースに対してそれぞれ行われます。]}POLICY}上のコードが書かれたレシピを適用するとmy-bucket-01というS3バケットと、それにアタッチされるS3バケットポリシーが作成されます。"{resource_name}"の形で定義されます。Azure、OpenStackなどTerraformが提供する様々なresourceを指定することができます。同様に{resource_name}には、そのresource定義で作成したリソースをTerraformで管理するために名前を付与します。ここで定義した名前は同じモジュール、resourceのタイプの中で一意になる必要がありますが、異なっていれば同じ名前を付与することも可能です。ここで定義した名前は実行時に表示されるトレース内容でそのまま使われるのでわかりにくい名前をつけないほうが良いでしょう。valueの形で列挙して定義します。APIなどにリクエストのBODYとして送信します。resourceのタイプによって必要なargumentの型や取りうる値はTerraformの公式ドキュメントを参照すれば見ることができます。aws_s3_bucket_policyのresource定義ではヒアドキュメント記法が使用されています。<<DOC...DOC上記のような形で、改行を含む文字列をそのままargumentに渡すことができます。JSONのようにPrettifiedな文字列で書けたほうが嬉しいものはヒアドキュメントを使うか、別の記事で解説するtemplate_fileを使った方法が良いでしょう。sourceはresourceと似たような振る舞いをしますが、唯一違うのはレシピ上の定義の変更がクラウド上のリソースに変更を及ぼさないことです。sourceの定義はクラウド上にリソースを作成するのではなく、指定したargumentをもとにクラウド上のリソースの実体の情報を取得して他のresourceと同じように扱います。sourceの定義でargumentに渡すIDは既存のリソースのIDです。sourceが定義された状態でrefreshコマンドを実行するとstateにその指定されたリソースの情報が反映されます。sourceが参照するリソースが指定されたものに入れ替わります。基本的には、Terraformで管理できない範囲のリソースや意図的に管理から外しているリソースを見かけ上Terraformの管理下にあるように扱うために用います。declaration."}variableは、モジュール外部からの値の注入を許容した上でその値をモジュール内のレシピから参照することができます。レシピではinteger型やboolean型の値が使えますが、varaibleのtypeとして使用可能なのは、stringlistmapの3つのみです。typeが未定義のときはdefaultの値を見て自動的に型が判別されますが、defaultも未定義のときにはstring型として扱われます。定義した変数はvar.my-variableのようにすると参照することができますが、variableの定義がされているモジュール内でしか参照ができないことに注意してください。variables.tf上のようなディレクトリ構造では、my-moduleの下のmain.tfでは同じ階層にあるvariables.tfで定義されているvariableは使えますが、my-sub-moduleの中で使うことはできません。my-sub-moduleで同じ値を使う場合には、my-sub-moduleの下のvariables.tfなどで改めてvariableを定義して値を渡す必要があります。outputwww.terraform.io同じモジュール内のresource同士は、定義されたargumentやattributeを互いに参照することができます。それがモジュールをまたいだ場合には、明示的にoutputを定義して他のモジュールに渡せるようにする必要があります。arn"}定義はvariableのものと似ていますが、typeは実際の値を見て動的に定義されます。syntaxで展開できるものなら何でもOKです。モジュールのvariableに渡す値が他のモジュールのoutputに依存している場合は、その依存が適切に解決されるような順序でモジュールが作成されますが、outputを相互参照している場合はモジュールの作成時に正しい値がvariableにセットされないので注意してください。別の記事で解説するオブジェクトストレージを利用したstate管理でterraform_remote_stateを利用する場合にも、同様にoutputを定義して参照可能な値を明示する必要があります。バイク月別アーカイブリンクPortfolioはてなブログをはじめよう!mic_psmさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。