PostTwitterFacebookねずみさん家。技術的な内容から日常まで。思ったこと感じたことを書いていきます。readTwitterFacebookみなさんこんにちは!インフラエンジニアのねずみさん家です。今回はTerraformのModuleを作成してAWSのVPCを作成します。投稿なので初回セットアップの部分も書いてみたいと思います。Terraformは非常に便利なツールなので是非利用してみてくださいー。TerraformのインストールMacを利用していてbrewが利用できる方は以下でインストール可能です。terraformTerraformはGolangで開発されているためこちらからバイナリファイルをダウンロードすることも可能です。インストールできたらバージョンを確認してみましょう。version今回はバージョン0.12.18を利用します。古いバージョンの0.11ではサポートされていない記述も含まれているためご注意ください。クレデンシャルの用意Terraformの処理でAWSのAPIを実行することになるためクレデンシャルを用意します。用意したらTerraformから読み込むために環境変数に登録します。変数名の頭にTF_VARとつけることでTerraformから読み込むことができるようになります。ARN]terraform.tfvarsに記載しても良いですがGitに誤って上げてしまって不正アクセスを受けたという記事が散見されるため基本的にはファイルに直接認証情報を記載しないのが良いと思います。今回はTerraformからAssumeRoleを行うため適切な権限を付与したIAMロールも用意しておきます。HCLの記述ここからHCLを記載していきます。Languageの略でTerraformのコードを書いていくときに利用する独自言語を指します。今回記載したVPCのモジュールの階層構造は以下のようになっています。variables.tftfstateをローカルで管理していますが実際に使う場合はbackendでS3などで管理するようにするのが定石です。provider.tfを書いていきましょう。}}providerではAWSにアクセスするために必要な認証情報を指定します。Terraformではvariableで変数を定義してvar.変数名で変数の値を取得することが可能です。variables.tfの中身を見てみましょう。"ap-northeast-1"}variableで変数を定義しています。この変数には先ほど環境変数に指定した値が自動で代入されます。ここまで書けたらいよいよVPCの作成部分を書いていきましょう。network.tfの中身を見てみます。}}sourceに読み込むModuleの処理を記載した.tfが存在するディレクトリの相対パスを記載します。Module側で必要な値を変数化するためvpc_configという名前で変数を作成してModule側に渡しています。Module側を見ていきます、まずはvariables.tfから見ていきましょう。ここでnetwork.tfから渡された変数を受け取っています。})}Terraform0.12からobjectという便利なタイプが追加されています。0.11まではmap型でも同じ型の値しか格納することができませんでしたがobjectを利用するとstringとboolといった異なる型の値を同時に扱うことができます。次にmain.tfを見ていきましょう。ここでVPCを作成するためにaws_vpcリソースを記述しています。}}ここでも値が変数化されていますがvpc_configという名前で呼び出し側から値を受け取っているためvar.変数名.オブジェクトキーというように指定すると値を参照することができます。ここまでくればもう一息です。最後にリソースが作成された後の情報を参照できるようにoutputを書いておきましょう。outputs.tfを見ていきます。aws_vpc.this}ここも0.12から追加された記述を利用しています。0.11までは1つのoutputに対して1つの値しか扱うことができませんでしたが0.12からは複数の値を扱うことができるようになります。aws_vpc.リソース名とするとvpc_idやcidr_blockなどの複数の値がmap型でまとめて出力されます。ここまで書いたらVPCを作成することが可能です。ドライランを実行してみましょう。plan成功すると以下のように結果が返ってきます。エラーが出た場合はHCLに記述ミスがある可能性があるので書き直しましょう。apply)ドライランは問題ないようですので実際に反映してみましょう。apply反映されたら作成されたVPCの情報を参照したいためModule側で指定したoutputを呼び出し側で受け取り内容を確認します。呼び出し元のoutputs.tfを確認します。module.vpc.vpc.id}ここで記述するのはmodule.モジュール名.参照する値となり今回はVPCのIDを確認したいためmodule.vpc.vpc.idとなります。applyを実行します。vpc-XXXXXXXXXXXXXXXXX正常に実行されるとこのようにVPCのIDを確認することができます。これでVPCのモジュールは完成です。作成したリソースが不要になったら以下のコマンドで消してくださいね。destroy次回VPCを作成したので次はサブネットの作成を行います。2019Categorieslife3terraform1About大阪在住でインフラエンジニアをやってます。ニックネームはねずみさん家。クラウドチョットデキル。