Skip to content

Latest commit

 

History

History
66 lines (47 loc) · 5.33 KB

File metadata and controls

66 lines (47 loc) · 5.33 KB

ステップ5 モジュール化

モジュールはいくつかのTerraformコードをまとめたものです。

step5ディレクトリを作成、移動して実施ください。以降のプラクティスはすべてstep5ディレクトリ内で行う想定です。versions.tfを作成しておいてください。必要に応じてmain.tfvaribales.tfoutput.tfterraform.tfvarsも作成してください。すべてのリソースにはStep=step5のタグを設定します。ファイルはステップ内で同じものを続けて使ったください。

5-1. リソース群をモジュールにする

モジュールにすると複数のリソースをまとめてデプロイできます。Terraformコードをモジュール化する方法は、モジュール化したいコード群を1つのディレクトリにまとめるだけです。モジュールはmoduleブロックを使って呼び出します。呼び出し元をルートモジュール、呼び出されるモジュールを子モジュールと言います。

子モジュールは呼び出されるモジュールであるため、versions.tfterraform.tfvarsなどは不要です。ルートモジュールから値を設定したり、モジュールで作成したリソースの値をルートモジュールに返すにはvariables.tfoutput.tfが必要です。

プラクティス

  • step5ディレクトリ配下にnetworkディレクトリを作成し、以下のコードを作成してください。
    • vpcを作成します。
      • cidrは変数で設定します。
    • subnetを作成します。
      • cidrは変数で設定します。変数はリスト型にし、変数の値の数だけサブネットを作ります。
    • vpcのidとsubentのidをルートモジュールに返します。
  • step5ディレクトリ直下に以下のコードを作成します。
    • networkモジュールをデプロイ。ソースのパスは相対パス(./network)で指定します。
      • networkに必要な変数を設定します。(値は変数で指定してもいいし、直接指定してもいいです。)
    • networkで作成したvpcとsubnetのidを表示するようにします。(モジュールの値はmodule.<モジュール名>.<変数名>で参照できます。)
  • initしてplanしてapplyします。

5-2. モジュールを使いまわして複数デプロイする

モジュールは何度も呼び出せます。

プラクティス

  • step5ディレクトリ直下に以下のコードを作成します。
    • 追加でもう1つnetworkモジュールをデプロイします。ソースのパスは相対パス(./network)で指定します。
      • networkに必要な変数を設定します。(値は変数で指定してもいいし、直接指定してもいいです。1つ目と値を変えても変えなくてもいいです)
    • 追加のnetworkで作成したvpcとsubnetのidも表示するようにします。
  • initしてplanしてapplyします。

5-3. モジュールの値を参照する

モジュールで作成した値を別モジュールで参照もできます。なお、ルートモジュールから呼び出す子モジュールを追加する場合、再度initが必要です。

プラクティス

  • step5ディレクトリ配下にcomputeディレクトリを作成し、以下のコードを作成してください。
    • ec2を作成します。
      • amiはそのリージョンの最新のAmazonLinux2を指定します。
        • amiのidは変数にして入力してもいいし、dataで引っ張ってきてもいいです。dataで読み込む場合、こちらにある通り、SSMパラメーターで取得できます。データの取得はaws_ssm_parameterを使います。
      • インスタンスタイプは変数で指定します。
      • subnetは変数で指定します。
  • step5ディレクトリ直下に以下のコードを作成します。
    • computeモジュールをデプロイします。
      • インスタンスタイプはt3.microを設定します。
      • サブネットのIDは1つ目のnetworkモジュールで作成した0番目のサブネットIDを指定します。
  • initしてplanしてapplyします。

後片付け

  • destroyします。またはmain.tfをすべてコメントアウトしてapplyします。