リソースとは
リソースとは、Terraform コードを使用して設定するインフラストラクチャ要素です。例えば、Elastic Compute Service (ECS) インスタンス、Object Storage Service (OSS) バケット、Virtual Private Cloud (VPC) ネットワーク、その他のクラウドオブジェクトなどが該当します。Terraform は、各 Alibaba Cloud サービスの API を呼び出して、ECS インスタンス、ECS インスタンスのデプロイテンプレート、セキュリティグループ、VPC ネットワーク、ファイアウォールルール、VPN、ルートテーブル、データベース、Server Load Balancer (SLB) などのリソースを作成および管理します。
リソース宣言の構文
.tf ファイルでリソースを定義します。同じタイプのリソースは同じフォルダに配置し、main.tf で宣言します。
この例では、main.tf がルート設定ファイルです。
-
resource
resourceキーワードは、単一のインフラストラクチャオブジェクトを宣言します。 -
resource_type
resource_typeは、作成するリソースのタイプを識別します。利用可能なタイプは、Terraform のプロバイダーブロックで宣言されたプロバイダーから提供されます。プロバイダーは、一連のリソースタイプを公開するプラグインです。 -
resource_name
resource_nameは、現在の設定フォルダ内でのリソースの論理識別子であり、クラウド上に作成される実際のインフラストラクチャオブジェクトの名前ではありません。resource_nameは、現在のフォルダ内の同じタイプのリソースの中ですべて一意である必要があります。 -
リソースパラメーター
リソースパラメーターは、式を使用してリソースのプロパティを宣言します。一部のパラメーターは作成時に必須ですが、他のパラメーターはオプションであり、高度な機能の設定に使用できます。
1 つの Terraform 設定ファイルには、同じタイプまたは異なるタイプの複数のリソースを含めることができ、それらのリソースは複数のプロバイダーにまたがることができます。
この例では、最初のリソースブロックが VPC ネットワークを宣言し、2 番目のリソースブロックが vSwitch を宣言しており、両方とも同じ main.tf ファイル内にあります。VPC リソースのタイプは alicloud_vpc で、名前は main-vpc です。vSwitch リソースのタイプは alicloud_vswitch で、名前は main-vswitch です。
alicloud_vpc ブロック内のすべてのパラメーターはオプションです。例えば、cidr_block はデフォルト値を持つためオプションです。これを省略した場合、プロバイダーまたは VPC サービスのバックエンドが自動的に値を生成します。
alicloud_vswitch の場合、vpc_id、cidr_block、および zone_id は必須ですが、他のすべてのパラメーターはオプションです。
リソースパラメーターは各リソースタイプに固有であり、タイプによって大きく異なります。例えば、alicloud_vpc は vpc_name と cidr_block を受け入れますが、alicloud_vswitch は vswitch_name、cidr_block、zone_id、および vpc_id を受け入れます。
属性パラメーター参照
別のリソースブロックからリソースのプロパティを参照するには、<resource_type>.<resource_name>.<attribute> というフォーマットを使用します。
上記の例では、alicloud_vswitch は作成時に VPC ID を必要とします。VPC ID は VPC の作成時にサーバーによって生成されるため、alicloud_vswitch は alicloud_vpc ブロックから alicloud_vpc.main_vpc.id を使用して参照します。
リソース間の参照は、関連するリソースが同じルート設定フォルダ内のファイルで定義されている場合にのみ機能します。
リソース定義の注意事項
リソースブロックを定義する際は、以下のルールに留意してください。
-
リソース名は一意である必要があります
各リソースは、現在の設定フォルダ内でそのタイプと名前によって識別されます。リソース名は、そのフォルダ内の同じタイプのリソースの中ですべて一意である必要があります。
-
リソースタイプはカスタマイズできません
リソースタイプは、プロバイダーに紐づく固定のキーワードです。例えば、OSS バケットは
alicloud_oss_bucketというキーワードを使用する必要があります。他の識別子を使用すると、terraform planおよびterraform applyは失敗します。 -
すべての設定パラメーターはリソースブロックの本文内で宣言する必要があります
リソースのすべてのインフラストラクチャプロパティは、リソースブロック内、つまり波括弧
{}の間で宣言する必要があります。Terraform コマンドを実行すると、次のようなエラーが表示されます。
Error: Argument or block definition required on main.tf line 4: 4: storage_class An argument or block definition is required here. -
すべての必須パラメーターを設定する必要があります
必須パラメーターを省略すると、
terraform planおよびterraform applyは失敗します。Terraform コマンドを実行すると、次のようなエラーが表示されます。
Error: Missing required argument on main.tf line 1, in resource "alicloud_vswitch" "main_vswitch": 1: resource "alicloud_vswitch" "main_vswitch" { The argument "vpc_id" is required, but no definition was found.