本文へスキップ

OpenTofu言語ドキュメント

これは、OpenTofuの設定言語に関するドキュメントです。OpenTofu CLITACOS(TF Automation and Collaboration Software)のユーザーにとって関連性があります。OpenTofuの言語は、その主要なユーザーインターフェースです。OpenTofu言語で記述する設定ファイルは、OpenTofuにインストールするプラグイン、作成するインフラストラクチャ、および取得するデータを指示します。OpenTofu言語を使用すると、リソース間の依存関係を定義し、単一の設定ブロックから複数の類似リソースを作成することもできます。

OpenTofu言語について

OpenTofu言語の主な目的は、インフラストラクチャオブジェクトを表すリソースを宣言することです。その他の言語機能はすべて、リソースの定義をより柔軟で便利にするためだけに存在します。

OpenTofu設定とは、OpenTofuに特定のインフラストラクチャのコレクションの管理方法を指示する、OpenTofu言語による完全なドキュメントです。設定は、複数のファイルとディレクトリで構成できます。

OpenTofu言語の構文は、いくつかの基本要素だけで構成されています。

コードブロック
resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
  • ブロックは他のコンテンツのコンテナであり、通常はリソースのような何らかのオブジェクトの設定を表します。ブロックにはブロックタイプがあり、0個以上のラベルを持つことができ、本文には任意の数の引数とネストされたブロックが含まれます。OpenTofuの機能のほとんどは、設定ファイルの上位レベルのブロックによって制御されます。
  • 引数は、名前に値を割り当てます。ブロック内に表示されます。
  • は、文字通り、または他の値を参照および組み合わせることによって値を表します。引数の値として、または他の式内で表示されます。

OpenTofu言語は宣言型であり、目標に到達するための手順ではなく、意図された目標を記述します。ブロックの順序とそれらが編成されているファイルは、一般的に重要ではありません。OpenTofuは、操作の順序を決定する際に、リソース間の暗黙的および明示的な関係のみを考慮します。

次の例は、Amazon Web Servicesの単純なネットワークトポロジーを示しており、OpenTofu言語の全体的な構造と構文の概要を示しています。同様の設定は、他の仮想ネットワークサービスに対して、他のプロバイダーによって定義されたリソースタイプを使用して作成できます。また、実用的なネットワーク設定には、ここに示されていない追加要素が含まれることがよくあります。

コードブロック
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 1.0.4"
}
}
}

variable "aws_region" {}

variable "base_cidr_block" {
description = "A /16 CIDR range definition, such as 10.1.0.0/16, that the VPC will use"
default = "10.1.0.0/16"
}

variable "availability_zones" {
description = "A list of availability zones in which to create subnets"
type = list(string)
}

provider "aws" {
region = var.aws_region
}

resource "aws_vpc" "main" {
# Referencing the base_cidr_block variable allows the network address
# to be changed without modifying the configuration.
cidr_block = var.base_cidr_block
}

resource "aws_subnet" "az" {
# Create one subnet for each given availability zone.
count = length(var.availability_zones)

# For each subnet, use one of the specified availability zones.
availability_zone = var.availability_zones[count.index]

# By referencing the aws_vpc.main object, OpenTofu knows that the subnet
# must be created only after the VPC is created.
vpc_id = aws_vpc.main.id

# Built-in functions and operators can be used for simple transformations of
# values, such as computing a subnet address. Here we create a /20 prefix for
# each subnet, using consecutive addresses for each availability zone,
# such as 10.1.16.0/20 .
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 4, count.index+1)
}