Slide 1

Slide 1 text

Terraform v1.6.0で始める インフラ単体テスト 2023/10/30 JAWS-UG東京 ランチタイムLT会 #4 1

Slide 2

Slide 2 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに ※おことわり 念のためステマ規制に関して、企業・製品情報が多めのページには以下のアイコンを提 示させていただきます。私は一切企業と関わりはございません。 2 PR

Slide 3

Slide 3 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 3

Slide 4

Slide 4 text

自己紹介 ● ryosaan (@hr0hr57) ● 某金融系SIerでインフラ設計・構築を担当 ● 基本的にはAWSを利用中 ● 所属コミュニティ ○ AWS Community Builder(Cloud Operations) ○ Ops-JAWS運営 ○ CNDT2023運営 ○ この他クラウド系コミュニティによく出没 ● 2022-23 APN ALL AWS Certifications Engineers ● 好きなAWSサービス ○ CloudWatch 4

Slide 5

Slide 5 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 5

Slide 6

Slide 6 text

Terraformとは ● HashiCorp社が開発 ● マルチクラウドに対応したIaC (Infrastructure as Code) ツール ○ AWS CDK , AWS CloudFormation , Pulumi , Bicep , Ansible , etc.. ● 作成したいリソースをコードで定義し、数コマンドで環境が構築できる ● 宣言型モデルで作りたい環境のあるべき姿を定義 ○ cf. 命令実行モデル:作成する手順をコード化 ● 独自のHCL言語でコードを記述する ● 内部的にはGo言語で構成され、各プロバイダのSDKを呼び出すことでリソースを作 成する 6 PR

Slide 7

Slide 7 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 7

Slide 8

Slide 8 text

Terraform v1.6.0での更新内容 ● ソフトウェアライセンスを MPL2.0 から BSL 1.1 に変更 HashiCorp adopts Business Source License ● macOS のサポートを 10.15 Catalina 以降に変更 ● Windows のサポートを Windows 10 または Windows Server 2016 以降に変更 ● S3 バックエンドの設定内容を大幅に変更 ● import ブロックの id フィールドで変数を限定的に使用可能に ● terraform test コマンドを正式実装 https://github.com/hashicorp/terraform/releases/tag/v1.6.0 8 PR

Slide 9

Slide 9 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 9

Slide 10

Slide 10 text

Terraformの単体テストとは ● 単体テストとは、 「プログラムの各部分を分離し、個々の部品が正しいことを示すこと」 cf. Wiki(単体テスト) ● インフラの単体テストとは、 「インフラリソースに対して行った個々の変更が正しく設定されているかを確認するこ と」 ○ MWの設定ファイル ○ AWSリソースの設定値 ○ etc ● Terraformを利用した環境における単体テストとは、 「Terraformで構築された各リソースに対して、想定通りの設定値となっているかを確 認すること」 ○ Terratest:GoLangでテストコードを記述し、設定値を確認 ○ Jest+SDK:JavaScriptでテストコードを記述し、設定値を確認 ○ 目検:マネジメントコンソールで設定値を確認 10

Slide 11

Slide 11 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 11

Slide 12

Slide 12 text

やってみた ● 作る構成とテスト ○ 構成は右図 ■ VPC・Subnetは作成済み ■ EC2を追加する ○ テストは2種類 ■ プロビジョニングなし ■ プロビジョニングあり ● 事前準備 ○ Terraform v1.6.0以上にバージョンアップ https://developer.hashicorp.com/terraform/downloads 12

Slide 13

Slide 13 text

やってみた ● ソースコード ○ テストコードは*.tftest.hclまたは*.tftest.jsonに記載 ○ command = plan を指定するとリソースをプロビジョニングせずにテストを行う ■ デフォルトではapplyとなり、テスト用リソースがプロビジョニングされる (テスト完了後削除され る) 例)EC2のIP等プロビジョニング後にしか検証出来ないもの (known after applyの項目) ○ assert句に実際にテストしたい項目を記述 13

Slide 14

Slide 14 text

やってみた ● テスト結果(正常) 14 テストに使われたEC2は削除されている

Slide 15

Slide 15 text

やってみた ● テスト結果(エラー) 15

Slide 16

Slide 16 text

できること ● テストファイルをディレクトリにまとめる ○ -test-directory=’対象フォルダへの相対パス ’ で指定 ● 変数を設定する ○ 通常の変数と同様に、 valiables{}、TF_VAR_*、tfvarsファイルが利用可能 ● Custom Conditionsとのハイブリッド ○ v1.5.0で実装されたcheckブロック等と組み合わせて使うと尚良い(かも) ※plan/apply時に警告まで行うブロック ● outputの値を検証する ● モジュールを読み込む ● etc 16

Slide 17

Slide 17 text

目次 ● 自己紹介 ● Terraformとは ● Terraform v1.6.0での更新内容 ● Terraformの単体テストとは ● やってみた ● さいごに 17

Slide 18

Slide 18 text

さいごに ● Terraform についにtestコマンドが実装された! ● 他言語でコードを書く必要がないので学習コストは低い ● プロビジョニングせずにテストできる ○ プロビジョニングしないとテスト出来ないものを planで実行するとエラーになる ● プロビジョニングしてテストもでき、使ったリソースは削除してくれる ● 変数も使える、Custom Conditionsも使える ● S3等名前が一意でないといけないものは、applyのtestで失敗する場合がある ● v1.5.0もかなりアツいアップデートがあったので、ぜひ追ってみてください! 18

Slide 19

Slide 19 text

ご清聴ありがとうございました!! 19