Terratestを使用したAWSインフラストラクチャテストの自動化

AWS上でインフラストラクチャをコードとして採用する組織は、インフラストラクチャが正しくプロビジョニングされているだけでなく、展開後も意図した通りに機能していることを保証することに苦労することがよくあります。わずかな設定ミスでも、高額なダウンタイムやセキュリティの脆弱性、パフォーマンスの問題を引き起こす可能性があります。

従来のテスト方法 — リソースを手動で検査することや静的コード分析にのみ依存することなど — は、運用環境に対して十分な信頼性を提供しません。変更が本番環境に反映される前に、AWSインフラストラクチャの変更を検証するための自動化された信頼できる方法が切実に求められています。

解決策

Terratestは、Goで書かれた自動テストフレームワークで、AWSのような実際のクラウド環境でインフラコードをテストするために特別に設計されています。プログラム的にリソースをデプロイ、検証、破棄することで、TerratestはIaCを書くこと(例:Terraform)と信頼を持って変更を出荷することとのギャップを埋めます。以下はその仕組みです:

以下は、Terraformを使用してTerratestでAWSインフラストラクチャテストを達成するための詳細なガイドであり、Goのサンプルコードスニペットも含まれています。このワークフローは、AWSリソースをプロビジョニングし、それらが意図した通りに機能することを確認するためにテストを実行し、その後すべてを自動的に破棄するのに役立ちます。

前提条件

Terraformをインストール

Terraformを公式サイトからダウンロードしてインストールします。

Goをインストール

TerratestはGoで書かれているため、Goがインストールされている必要があります。Goを公式サイトからダウンロードしてください。

AWSクレデンシャルを設定

AWSクレデンシャルが設定されていることを確認します(例:~/.aws/credentialsまたはAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYのような環境変数を使用)。

Goモジュールを初期化

プロジェクトディレクトリで以下を実行します:

Shell

 

Terratestを追加go.mod

プロジェクト/リポジトリディレクトリで以下を実行します:

Shell

 

サンプルTerraform構成

AWS EC2インスタンスを起動するシンプルなTerraform構成を作成します。以下のファイルをaws_ec2_example(またはお好みの名前)のディレクトリに配置します。

参照用にmain.tfとして保存します。

Shell

 

次に、variables.tf:

Shell

 

Terratestコードスニペット

testという名前のディレクトリにGoテストファイルを作成します(他の名前でも構いませんが、testが一般的です)。例えば、aws_ec2_test.go:

Shell

 

このテストが行うこと

  • Terraformの設定を初期化し、適用します ../aws_ec2_example で。
  • 指定されたAMIを使用してus-east-1にEC2インスタンスをデプロイします
  • Terraformの出力としてinstance_idをキャプチャします
  • Testifyのアサートライブラリを使用して、インスタンスIDが空でないことを検証します
  • テストの最後にリソースを破棄して、継続的なコストが発生しないようにします

テストの実行

  • Goのテストファイル(例:テストディレクトリ)が含まれているディレクトリに移動します
  • 次のコマンドを実行します
Shell

 

  • 出力を確認します
    • AWSインフラストラクチャの初期化と適用が行われるのを確認できます
    • テストのアサーションが通過すると、Terraformはリソースを破棄します

結論

これらの手順に従うことで、TerratestをAWS IaCワークフローに統合し、

  • AWSリソースをTerraformを使用してプロビジョニングします
  • それらをGoベースのテストでプログラム的にテストします
  • インフラストラクチャが正しく構成され、期待通りに機能していることを検証します
  • ティアダウンを自動化して、不要なAWSコストをかけずに繰り返しテストを実行するためのクリーンな環境を維持します。

Source:
https://dzone.com/articles/terratest-for-aws