カスタム検索
表示順:
Relevance
Relevance
Date
ウェブ
 
 
 

構成ファイルの通りにインフラは立ち上がったのか? インフラ自動テストツール「Terratest」がオープンソースで公開

2018年5月17日


クラウドの利用において、インフラの構成をコードで記述することは一般的になってきました。インスタンスのサイズや台数を指定し、仮想マシンのイメージを指定し、ネットワーク構成を指定する、といった内容を記述したファイルを用意し、ChefやAnsible、Terraform、あるいはAWS CloudFormationといったインフラ構成ツールで実行することで、つねに同じ構成のインフラを立ち上げることができます。

インフラの構成を変更する際にもGitHubのようなバージョン管理システムでインフラの構成コードを管理できるため、いつ誰がどのようにインフラを変更したのか、履歴の管理が可能になると同時に、問題が発生した場合には以前の状態に戻すこともできます。

オープンソースで公開された「Terratest」は、こうしたインフラ構成のためのコードが、管理者が想定したとおりにインフラを構成できたのか、自動的にテストを行えるツールです。

HashiCorpのTerraformやPacker、Docker、AWSなどの環境に対応しています。

説明に使われているサンプルを引用して機能を紹介しましょう。例えば、下記はTerraformを用いてAWSのインスタンスを立ち上げ、Webサーバのindex.hmlでHello Worldを返す機能を持つインフラを立ち上げるスクリプトです。

provider "aws" {
  region = "us-east-1"
}
resource "aws_instance" "web_server" {
  ami                    = "ami-43a15f3e" # Ubuntu 16.04
  instance_type          = "t2.micro"
  vpc_security_group_ids = ["${aws_security_group.web_server.id}"]
  # Run a "Hello, World" web server on port 8080
  user_data = <<-EOF
              #!/bin/bash
              echo "Hello, World" > index.html
              nohup busybox httpd -f -p 8080 &
              EOF  
}
# Allow the web app to receive requests on port 8080
resource "aws_security_group" "web_server" {
  ingress {
    from_port   = 8080
    to_port     = 8080
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
output "url" {
  value = "http://${aws_instance.web_server.public_ip}:8080"
}

インフラが正常に立ち上がったかどうかをチェックするには、最後のURLにアクセスして確認します。

Terratestで下記のようなスクリプトを書くことで、上記のスクリプトを実行し、結果を確認し、破棄するまでの作業を自動的に行ってくれます。

func TestWebServer(t *testing.T) {
  terraformOptions := &terraform.Options {
    // The path to where your Terraform code is located
    TerraformDir: "../web-server",
  }

  // At the end of the test, run `terraform destroy`
  defer terraform.Destroy(t, terraformOptions)

  // Run `terraform init` and `terraform apply`
  terraform.InitAndApply(t, terraformOptions)

 // Run `terraform output` to get the value of an output variable
  url := terraform.Output(t, terraformOptions, "url")

 // Verify that we get back a 200 OK with the expected text. It
 // takes ~1 min for the Instance to boot, so retry a few times.
  status := 200
  text := "Hello, World"
  retries := 15
  sleep := 5 * time.Second

 http_helper.HttpGetWithRetry(t, url, status, text, retries, sleep)
}

上記のTerratestのスクリプトでは、まず読み込むTerraformのスクリプトを指定し、処理が終わったら破棄(destroy)することを指定、そして実行します。

確認すべきURLを読み込み、確認する内容を指定し、実行が終わった時点で確認を実行する、という内容になっています。

テストを実行すると、実行の様子と最終結果がコンソール上に表示されるわけです。

TerratestはGo言語で記述されており、開発元のGruntworkでは合計で25万行ものTerraformやGo、Python、Bashなどで記述されたインフラ構成コードのテストに役立ててきたとのことです。

follow us in feedly

カテゴリ 運用ツール / システム運用
タグ  AWS , DevOps , HashiCorp


前の記事
Google Cloud、最大メモリ4TB/160vCPUの大型マシンタイプ「n1-ultramem」提供を発表


カテゴリ



Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

人気記事ランキング

  1. REST API仕様からAPIクライアントやスタブサーバを自動生成する「OpenAPI Generator」オープンソースで公開。Swagger Codegenからのフォーク
  2. [速報]AIが人間と自然な会話をし、電話で美容院やレストランを予約。Googleがデモを公開。Google I/O 2018
  3. Angular 6が正式リリース。コンポーネントのDOMエレメント化、PWA対応など新機能。ng-conf 2018
  4. 2018年第1四半期、クラウドインフラ市場でAWSのシェアは揺るがず33%前後、マイクロソフト、Googleが追撃、IBMは苦戦中。Synergy Research
  5. 次世代Angularレンダリングエンジン「Ivy」発表、さらに小型化し高速になる実行とコンパイル。ng-conf 2018
  6. App Engineが軽量コンテナのgVisorを実行環境として採用、スタンダード環境でNode.jsをサポート開始
  7. [速報]ChromebookがLinuxの実行を正式サポート。Android Studioも実行可能に。Google I/O 2018
  8. Twitter、数万台のHadoopクラスタとコールドストレージをGoogle Cloud Platformへ移行すると発表
  9. マイクロソフト、AzureでトレーニングさせたAIモデルをDockerコンテナでパッケージ、Windows、Linux、ラズパイ、ドローンなどへデプロイ可能に。Build 2018
  10. モバイルネイティブアプリ開発ツールのFUSE、製品全体を「Fuse Open」としてオープンソースで公開。UXをマークアップで迅速に開発可能


新着記事 10本


PR - Books


fig

fig

fig