Terraform組み込み関数の一般的な使用例に精通している

Terraformを使用して、このIaCツールの数値、文字列、日付、時刻など、さまざまな種類の組み込み関数を学習して適用するための簡単なチュートリアル。







ITチームは、HashiCorpのTerraformを使用して、クラウドおよびオンプレミスのリソースを展開および管理できます。ツールの使用を最適化するには、Terraformの機能を学習してインストールします。







管理者は、組み込みのTerraform関数を使用して、展開に関連するさまざまな計算を実行したり、タイムスタンプのエンコードとデコード、キャプチャと表示などの操作を実行したりできますTerraformは組み込み関数のみをサポートします; 特別な機能やユーザー定義の機能は利用できません。







このTerraformチュートリアルを使用して、機能の基本と、エンタープライズ展開でそれらを使用するいくつかの一般的な方法を学習します。







構文から始めましょう



Terraform関数の構文は、関数名で始まり、その後に0から複数の引数を含む括弧がコンマで区切られます。







name(arg-1, arg-2, … arg-n)
      
      





たとえば、タイムスタンプを取得するには、関数timestamp()



使用して現在の日付と時刻を確認します。







> timestamp()
2019-12-07T07:44:12Z
      
      





指定されたパスにあるファイルからコンテンツを読み取り、そのコンテンツを文字列として返すには、関数file()



を使用し、ファイルパスを引数として指定します。













Terraform関数の補間サポート



Terraform構成言語は補間をサポートしているため、管理者は関数を文字列として渡してさまざまな操作を実行できます。$ {builtinfunction ()}



次の例に示すように、これらの補間は特別な構文ラップされます







resource "myinstance" "web" {
    tags = ["${var.env == "prod" ? var.prod_subnet : var.dev_subnet}"]
}
      
      





Terraform, . Terraform, .







. Terraform environment



, production, AWS (AZs). availzone



, , , us-east-1a



, us-east-1b



us-east-1c



. , , :







variable "environment" {
default = {
    "test" = "us-east-1"
    "prod" = "us-west-2"
  }
}

variable "availzone" {
  description = "Availability Zones Mapping"
  default = {
    "us-east-1" = "us-east-1a,us-east-1b,us-east-1c"
    "us-west-2" = "us-west-2a,us-west-2b,us-east-1c"
  }
}
      
      





AZ, lookup()



, , , (,)



split()



.







, element()



. AZ . $ {}



, , Terraform , .







output "availabiltyzones" {
  value = "${element(split(",", lookup(var.availzone,var.environment.prod)), 1)}"
}
      
      





, :













Terraform



Terraform .













, , , / , :



















Terraform . , title()



, lower()



upper()



:













- , :



















Terraform. , timestamp()



:













formatdate()



, :



















Terraform , . , base64encode('string')



Base64, Azure, Base64 . file()



, Base64encode()



:







resource "azurerm_virtual_machine_extension" "Example" {
  name                 = "MyVM"
  location             = "${azurerm_resource_group.test.location}"
  resource_group_name  = "${azurerm_resource_group.test.name}"
  virtual_machine_name = "${azurerm_virtual_machine.test.name}"
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"
  settings = <
      
      





(Collections)







Terraform , , :







length([1,12,31,14,5,2])
length("this is a string")
      
      





, , :














All Articles