この文書はTerraformでNHN Cloudを使用する方法を説明します。
Terraformはインフラを簡単に構築し、安全に変更し、効率的にインフラの形状を管理できるオープンソースのツールです。Terraformの主な特徴は次のとおりです。
NHN CloudはTerraform OpenStack providerに記載された下記のdata sourcesとresourcesをサポートします。Terraform OpenStack providerとTerraformがサポートするより詳しい機能はTerraformサイトのOpenStack Providerページを参照します。下記のリスト以外の機能を使用した場合、NHN Cloudは正常に動作することを保障しません。
TerraformダウンロードページでローカルPCのOSに合ったファイルをダウンロードします。ファイルの圧縮を解凍し、任意の場所に入れた後、次の環境設定に該当パスを追加するとインストールが完了します。
次はインストール例です。
$ wget https://releases.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip
$ unzip terraform_0.12.24_linux_amd64.zip
$ export PATH="${PATH}:$(pwd)"
$ terraform -v
Terraform v0.12.24
Terraformを使用する前に、次のようにプロバイダー設定ファイルを作成します。
プロバイダーファイルの名前は任意で設定可能で、この例ではprovider.tf
を使用します。
# Configure the OpenStack Provider
provider "openstack" {
user_name = "terraform-guide@nhncloud.com"
tenant_id = "aaa4c0a12fd84edeb68965d320d17129"
password = "difficultpassword"
auth_url = "https://api-identity.infrastructure.cloud.toast.com/v2.0"
region = "KR1"
}
プロバイダー設定ファイルがあるパスでinit
コマンドを利用してTerraformを初期化します。
$ ls
provider.tf
$ terraform init
Terraformを利用したインフラ構築は、通常下記のようなライフサイクルになります。
まず構築したいインフラの形状をtfファイルに作成します。作成されたtfファイルによる構築計画は、下記のようにplan
コマンドで確認します。
$ terraform plan
構築計画が問題なければapply
コマンドを利用してリソースを作成、修正、削除します。
$ terraform apply
次のセッションでは、この段階を例を用いて詳しく説明します。
プロバイダー設定ファイルがあるパスにtfファイルを作成します。複数のリソース設定を1つのtfファイルに集めるか、リソースごとに別々のtfファイルでも作成可能です。Terraformは作成された全体tfファイルを一度に読み込んで構築計画を立てます。
下記はinstance.tf
ファイルにインスタンスを作成するリソースを定義したtfファイルの例です。
$ ls
instance.tf provider.tf
$ cat instance.tf
resource "openstack_compute_instance_v2" "terraform-instance-01" {
name = "terraform-instance-01"
region = "KR1"
flavor_id = "da74152c-0167-4ce9-b391-8a88a8ff2754"
key_pair = "terraform-keypair"
network {
uuid = "00d5b852-cb77-4307-b6be-d81dad24eec1"
}
security_groups = ["default"]
block_device {
uuid = "6d0993b4-cd6d-4242-b59b-94258f265331"
source_type = "image"
destination_type = "volume"
boot_index = 0
volume_size = 20
delete_on_termination = true
}
}
tfファイルを通して変更されるリソースをplan
コマンドで確認できます。plan
コマンドを実行すると、Terraformが.tfファイルをロードして設定が正しいかを確認し、DBと比較してプランを作成します。プラン作成が完了すると、プランをタイプごとに集計して出力します。
$ terraform plan
作成されたプランが無効な場合、tfファイルを修正し、再度反復してplan
コマンドを実行します。plan
コマンドは実際のNHN Cloudリソースを変更しないため、インフラ変更事項を負担なく確認できます。
任意のプランでtfファイルを作成した後、apply
コマンドでリソースを作成します。
下記は、上で作成したinstance.tf
ファイルを利用してapply
コマンドを実行した結果の例です。
$ terraform apply
...
openstack_compute_instance_v2.terraform-instance-01: Creating...
openstack_compute_instance_v2.terraform-instance-01: Still creating... [10s elapsed]
...
openstack_compute_instance_v2.terraform-instance-01: Still creating... [50s elapsed]
openstack_compute_instance_v2.terraform-instance-01: Creation complete after 53s [id=8a8c5516-6762-4592-97ab-db8d3af629e6]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
...
apply
コマンドを実行すると、プラン変更履歴を記録するDBファイル(terraform.tfstate)が現在のディレクトリに作成されます。このファイルを削除しないように注意してください。
変更するリソースが定義された.tf
ファイルを開き、任意の情報を修正し、プランを適用します。変更できる仕様は一部プロパティに制限されます。もし変更できないプロパティを修正した場合、該当リソースは削除後に新たに再び作成されます。
次はインスタンスにterraform-sg
セキュリティグループをもう1つ追加する例です。上で作成したinstance.tf
ファイルを下記のように修正します。
resource "openstack_compute_instance_v2" "terraform-instance-01" {
...
security_groups = ["default", "terraform-sg"]
...
}
構築計画を確認したら、変更されたセキュリティグループ情報を整理して出力します。
$ terraform plan
...
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
~ openstack_compute_instance_v2.terraform-instance-01
security_groups.#: "1" => "2"
security_groups.3814588639: "default" => "default"
security_groups.4051241745: "" => "terraform-sg"
Plan: 0 to add, 1 to change, 0 to destroy.
...
プランを適用すると、インスタンスに新しいセキュリティグループが追加されます。
$ terraform apply
...
openstack_compute_instance_v2.terraform-instance-01: Refreshing state... (ID: 4d135bc-6a70-4c4d-b645-931570c9f6b1)
openstack_compute_instance_v2.terraform-instance-01: Modifying... (ID: 4d135bc-6a70-4c4d-b645-931570c9f6b1)
security_groups.#: "1" => "2"
security_groups.3814588639: "default" => "default"
security_groups.4051241745: "" => "terraform-sg"
openstack_compute_instance_v2.terraform-instance-01: Modifications complete after 1s (ID: 4d135bc-6a70-4c4d-b645-931570c9f6b1)
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
Terraformで作成したリソースを削除するには、該当の.tf
ファイルを削除します。
$ rm instance.tf
構築計画を通して、該当リソースが削除されることを確認できます。
$ terraform plan
...
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
- openstack_compute_instance_v2.terraform-test-01
Plan: 0 to add, 0 to change, 1 to destroy.
...
apply
コマンドを実行すると、作成されたinstanceが削除されます。
$ terraform apply
...
openstack_compute_instance_v2.terraform-test-01: Refreshing state... (ID: f4d135bc-6a70-4c4d-b645-931570c9f6b1)
openstack_compute_instance_v2.terraform-test-01: Destroying... (ID: f4d135bc-6a70-4c4d-b645-931570c9f6b1)
openstack_compute_instance_v2.terraform-test-01: Still destroying... (ID: f4d135bc-6a70-4c4d-b645-931570c9f6b1, 10s elapsed)
openstack_compute_instance_v2.terraform-test-01: Destruction complete after 11s
...
tfファイルの作成に必要なインスタンスタイプID、イメージIDなどは、コンソールを通して確認するか、Terraformが提供するdata sourcesを利用して取得できます。Data sourcesはtfファイル内に作成し、取得した情報は修正できません。参照のみ可能です。
Data sourcesは、{data sourcesリソースタイプ}.{data source名前}
で参照します。下記の例ではopenstack_images_image_v2.ubuntu_1804_20200218
で取得したイメージ情報を参照します。
data "openstack_images_image_v2" "ubuntu_1804_20200218" {
name = "Ubuntu Server 18.04.3 LTS (2020.02.18)"
most_recent = true
}
Data sources内で別のdata sourceを参照できます。
data "openstack_blockstorage_volume_v2" "volume_00"{
name = "ssd_volume1"
status = "available"
}
data "openstack_blockstorage_snapshot_v2" "my_snapshot" {
name = "my-snapshot"
volume_id = data.openstack_blockstorage_volume_v2.volume_00.id
status = "available"
most_recent = true
}
詳細なdata sources使用方法はTerraformサイトのData Sources
項目を参照します。
次のセッションでは、NHN Cloudが提供する各種リソースをdata sources機能で取得する方法を説明します。
イメージ情報を取得します。NHN Cloudが提供するパブリックイメージまたは個人イメージをサポートします。
data "openstack_images_image_v2" "ubuntu_1804_20200218" {
name = "Ubuntu Server 18.04.3 LTS (2020.02.18)"
most_recent = true
}
# 同じ名前のイメージの中から、最も古いイメージを照会
data "openstack_images_image_v2" "windows2016_20200218" {
name = "Windows 2016 STD with MS-SQL 2016 Standard (2020.02.18) KO"
sort_key = "created_at"
sort_direction = "asc"
owner = "c289b99209ca4e189095cdecebbd092d"
tag = "_AVAILABLE_"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するイメージ名 イメージ名は、NHN CloudコンソールCompute > Instanceでインスタンス作成ボタンを押すとNHN Cloudが提供するイメージリストで確認します。 イメージ名はNHN Cloudコンソールに表示された<イメージ説明>で作成する必要があります。 もし言語項目が存在する場合、上の例のように「<イメージ説明> <言語>」形式で入力する必要があります。 |
size_min | Integer | - | 照会するイメージの最小サイズ(byte) |
size_max | Integer | - | 照会するイメージの最大サイズ(byte) |
properties | Object | - | 照会するイメージのプロパティ すべてのプロパティ値が一致するイメージを照会 |
sort_key | String | - | 特定プロパティを基準に照会したイメージリストをソート デフォルト値は name |
sort_direction | String | - | 照会したイメージリストのソート方向 asc :昇順(デフォルト値) desc :降順 |
owner | String | - | 照会するイメージが属しているテナントID |
tag | String | - | 特定タグが存在するイメージを検索 |
visibility | String | - | 照会するイメージの表示プロパティ public、private、sharedのうち、いずれか1つの値のみ選択可能 省略するとすべての種類のイメージリストを返す |
most_recent | Boolean | - | true :照会したイメージリストのうち、最近作られたイメージ選択false :照会された順序でイメージ選択 |
member_status | String | - | 照会するイメージメンバーの状態 accepted 、pending 、rejected 、all のうちいずれか1つ。 |
data "openstack_blockstorage_volume_v2" "volume_00" {
name = "ssd_volume1"
status = "available"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するブロックストレージ名 |
status | String | - | 照会するブロックストレージの状態 |
metadata | Object | - | 照会するブロックストレージと関連するメタデータ |
インスタンスタイプ名はNHN CloudコンソールCompute > Instanceでインスタンス作成 > インスタンスタイプ選択ボタンを押すと確認できます。
data "openstack_compute_flavor_v2" "u2c2m4"{
name = "u2.c2m4"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するインスタンスタイプ名 |
data "openstack_blockstorage_snapshot_v2" "my_snapshot" {
name = "my-snapshot"
volume_id = data.openstack_blockstorage_volume_v2.volume_00.id
status = "available"
most_recent = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するスナップショットの名前 |
volume_id | String | - | 照会するスナップショットの原本ブロックストレージID |
status | String | - | 照会するスナップショットの状態 |
most_recent | Boolean | - | true :照会したスナップショットリストのうち、最近作られたスナップショットを選択false :照会された順序でスナップショットを選択 |
VPCネットワークのUUIDは、NHN CloudコンソールNetwork > VPCでVPCを選択して確認可能です。
data "openstack_networking_network_v2" "default_network" {
name="Default Network"
network_id = "00d5b852-cb77-4307-b6be-d81dad24eec1"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するVPCネットワーク名 |
network_id | String | - | 照会するVPCネットワークUUID |
サブネットIDは、NHN CloudコンソールNetwork > VPC > サブネットでサブネットを選択して確認可能です。
data "openstack_networking_subnet_v2" "default_subnet" {
name = "Default Network"
subnet_id = "756af037-54f3-4aa2-8c22-56c9da055553"
network_id = data.openstack_networking_network_v2.default_network.network_id
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 照会するサブネットの名前 |
subnet_id | String | - | 照会するサブネットのUUID |
network_id | String | - | 照会するサブネットが属しているネットワークUUID |
Terraform resourcesでリソースを作成、修正、削除できます。NHN Cloudでは、Terraformによる次のリソース管理をサポートします。
次のセッションでは各リソースを使用する方法を説明します。
# u2インスタンス作成
resource "openstack_compute_instance_v2" "tf_instance_01"{
name = "tf_instance_01"
region = "KR1"
key_pair = "terraform-keypair"
image_id = data.openstack_images_image_v2.centos_610_20200218.id
flavor_id = data.openstack_compute_flavor_v2.u2c1m2.id
security_groups = ["default"]
availability_zone = "kr-pub-a"
network {
name = data.openstack_networking_network_v2.default_network.name
uuid = data.openstack_networking_network_v2.default_network.id
}
block_device {
uuid = data.openstack_images_image_v2.centos_610_20200218.id
source_type = "image"
destination_type = "local"
boot_index = 0
delete_on_termination = true
volume_size = 30
}
}
# u2以外のインスタンスタイプ
# ネットワーク追加、ブロックストレージ追加されたインスタンスを作成
resource "openstack_compute_instance_v2" "tf_instance_02" {
name = "tf_instance_02"
region = "KR1"
key_pair = "terraform-keypair"
flavor_id = data.openstack_compute_flavor_v2.m2c1m2.id
security_groups = ["default","web"]
network {
name = data.openstack_networking_network_v2.default_network.name
uuid = data.openstack_networking_network_v2.default_network.id
}
network {
port = openstack_networking_port_v2.port_1.id
}
block_device {
uuid = data.openstack_images_image_v2.centos_610_20200218.id
source_type = "image"
destination_type = "volume"
boot_index = 0
volume_size = 20
delete_on_termination = true
}
block_device {
source_type = "blank"
destination_type = "volume"
boot_index = 1
volume_size = 20
delete_on_termination = true
}
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | O | 作成するインスタンスの名前 |
region | String | - | 作成するインスタンスのリージョン デフォルト値はprovider.tfに設定されたregion |
flavor_name | String | - | 作成するインスタンスのインスタンスタイプ名 flavor_idが空の時は必須 |
flavor_id | String | - | 作成するインスタンスのインスタンスタイプID flavor_nameが空の時は必須 |
image_name | String | - | インスタンス作成時に使用するイメージ名 image_idが空の時は必須 インスタンスタイプがU2の時のみ使用可能 |
image_id | String | - | インスタンス作成時に使用するイメージID image_nameが空の時は必須 インスタンスタイプがU2の時のみ使用可能 |
key_pair | String | - | インスタンス接続に使用するキーペア名 キーペアはNHN CloudコンソールのCompute > Instance > Key Pairメニューで新たに作成するか、 すでに持っているキーペアを登録して使用。 作成、登録方法は ユーザーガイド > Compute > Instance > コンソール使用ガイド を参照。 |
availability_zone | String | - | 作成するインスタンスのアベイラビリティゾーン |
network | Object | - | 作成するインスタンスに接続するVPCネットワーク情報。 コンソールのNetwork > VPC > Managementメニューで接続するVPCを選択すると、下部の詳細情報画面でネットワーク名とuuidを確認可能。 |
network.name | String | - | VPCネットワーク名。 network.name、network.uuid、network.portのうち、いずれか1つを明示 |
network.uuid | String | - | VPCネットワークID |
network.port | String | - | VPCネットワークに接続するポートのID |
security_groups | Array | - | インスタンスで使用するセキュリティグループの名前リスト コンソールのNetwork > VPC > Security Groupsメニューで使用するセキュリティグループを選択すると、下部の詳細情報画面で情報を確認可能 |
user_data | String | - | インスタンス起動後に実行するスクリプトおよび設定 base64エンコーディングされた文字列で65535バイトまで許可 |
block_device | Object | - | インスタンスに使用するイメージまたはブロックストレージ情報オブジェクト |
block_device.uuid | String | - | 作成するブロックストレージの原本のID |
block_device.uuid | String | - | ブロックストレージの原本ID ルートボリュームの場合、必ず起動可能な原本でなければならず、イメージ作成ができないWAF、MS-SQLイメージが原本のvolumeやsnapshotは使用できません。 image を除く原本は作成するインスタンスのアベイラビリティゾーンが同じである必要がある |
block_device.source_type | String | O | 作成するブロックストレージ原本のタイプimage :イメージを利用してブロックストレージ作成volume :既に作成されたボリュームで使用、 destination_typeは必ずvolumeを指定snapshot :スナップショットを利用してブロックストレージ作成、 destination_typeは必ずvolumeを指定 |
block_device.destination_type | String | - | インスタンスボリュームの位置、インスタンスタイプに応じて設定必要local :U2インスタンスタイプを利用する場合volume :U2以外のインスタンスタイプを利用する場合 |
block_device.boot_index | Integer | - | 指定したボリュームの起動順序 0の場合、ルートボリューム それ以外は追加ボリューム 数字が大きいほど起動順序が下がる |
block_device.volume_size | Integer | - | 作成するインスタンスで使用するブロックストレージサイズ 最小20GBから最大2,000GBまで設定可能(インスタンスタイプがU2の時は必須入力) インスタンスタイプに応じて設定できるvolume_sizeが異なるため、 ユーザーガイド > Compute > Instanceコンソール使用ガイド を参照 |
block_device.delete_on_termination | Boolean | - | true :インスタンス削除時にブロックデバイスも一緒に削除false :インスタンス削除時にブロックデバイスは一緒に削除しない |
# インスタンス作成
resource "openstack_compute_instance_v2" "tf_instance_01" {
...
}
# ブロックストレージ作成
resource "openstack_blockstorage_volume_v2" "volume_01" {
...
}
# ブロックストレージ接続
resource "openstack_compute_volume_attach_v2" "volume_to_instance"{
instance_id = openstack_compute_instance_v2.tf_instance_02.id
volume_id = openstack_blockstorage_volume_v2.volume_01.id
}
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
instance_id | String | - | ブロックストレージを接続する対象インスタンス |
volume_id | String | - | 接続するブロックストレージUUID |
# HDDタイプの空ブロックストレージ作成
resource "openstack_blockstorage_volume_v2" "volume_01" {
name = "tf_volume_01"
size = 10
availability_zone = "kr-pub-a"
volume_type = "General HDD"
}
# SSDタイプの空ブロックストレージ作成
resource "openstack_blockstorage_volume_v2" "volume_02" {
name = "tf_volume_02"
size = 10
availability_zone = "kr-pub-b"
volume_type = "General SSD"
}
# スナップショットでブロックストレージ作成
resource "openstack_blockstorage_volume_v2" "volume_03" {
name = "tf_volume_03"
description = "terraform create volume with snapshot test"
snapshot_id = data.openstack_blockstorage_snapshot_v2.snapshot_01.id
size = 30
}
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
name | String | O | 作成するブロックストレージ名 |
description | String | - | ブロックストレージの説明 |
size | Integer | - | 作成するブロックストレージのサイズ(GB) |
availability_zone | String | - | 作成するブロックストレージのアベイラビリティゾーン。値が存在しない場合、任意のアベイラビリティゾーン availability_zoneはコンソール Storage > Block Storage > 管理 のブロックストレージ作成ボタンを押して表示されるアベイラビリティゾーンで確認できます。 |
volume_type | String | - | ブロックストレージタイプGeneral HDD :HDDブロックストレージ(デフォルト値)General SSD :SSDブロックストレージ |
コンソールまたはAPIで作成したブロックストレージを、Terraformでインポートして管理できます。
.tf
ファイルにインポートするブロックストレージ情報を作成します。
resource "openstack_blockstorage_volume_v2" "volume_06" {
name = "volume_06"
size = 10
}
terraform import openstack_blockstorage_volume_v2.{name} {bloack storage id}
コマンドでブロックストレージをインポートします。
$ terraform import openstack_blockstorage_volume_v2.volume_06 10cf5bec-cebb-479b-8408-3ffe3b569a7a
...
openstack_blockstorage_volume_v2.volume_06: Importing from ID "10cf5bec-cebb-479b-8408-3ffe3b569a7a"...
openstack_blockstorage_volume_v2.volume_06: Import prepared!
Prepared openstack_blockstorage_volume_v2 for import
openstack_blockstorage_volume_v2.volume_06: Refreshing state... [id=10cf5bec-cebb-479b-8408-3ffe3b569a7a]
Import successful!
...
NHN CloudはTerraformを通して、下記のリソースの作成をサポートします。
これ以外のVPCリソースは、コンソールで作成する必要があります。
resource "openstack_compute_floatingip_v2" "fip_01" {
pool = "Public Network"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
pool | String | O | Floating IPを作成するIPプール コンソール Network > Floating IP でFloating IP作成 ボタンをクリックして表示されるIPプールで確認できます。 |
# インスタンス作成
resource "openstack_compute_instance_v2" "tf_instance_01" {
...
}
# Floating IP作成
resource "openstack_compute_floatingip_v2" "fip_01" {
...
}
# Floating IP接続
resource "openstack_compute_floatingip_associate_v2" "fip_associate" {
floating_ip = openstack_compute_floatingip_v2.fip_01.address
instance_id = openstack_compute_instance_v2.tf_instance_01.id
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
floating_ip | String | O | 接続するFloating IP |
instance_id | String | O | Floating IPを接続する対象インスタンスUUID |
fixed_ip | String | - | Floating IPを接続する対象の固定IP |
wait_until_associated | Boolean | - | true :Floating IPを接続するまで対象インスタンスをポーリングfalse :Floating IPを接続するまで待機しない(デフォルト値) |
resource "openstack_networking_port_v2" "port_1" {
name = "tf_port_1"
network_id = data.openstack_networking_network_v2.default_network.id
admin_state_up = "true"
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | O | 作成するポートの名前 |
description | String | O | ポートの説明 |
network_id | String | O | ポートを作成するVPCネットワークID |
tenant_id | String | O | 作成するポートのテナントID |
device_id | String | - | 作成されたポートが接続されるデバイスID |
fixed_ip | Object | - | 作成するポートの固定IP設定情報no_fixed_ip プロパティがあってはならない |
fixed_ip.subent_id | String | O | 固定IPのサブネットID |
fixed_ip.ip_address | String | - | 設定する固定IPのアドレス |
no_fixed_ip | Boolean | - | true :固定IPがないポートfixed_ip プロパティがあってはならない |
admin_state_up | Boolean | - | 管理者制御状態true :作動false :中止 |
resource "openstack_lb_loadbalancer_v2" "tf_loadbalancer_01"{
name = "tf_loadbalancer_01"
description = "create loadbalancer by terraform."
vip_subnet_id = data.openstack_networking_subnet_v2.default_subnet.id
vip_address = "192.168.0.10"
admin_state_up = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | ロードバランサーの名前 |
description | String | - | ロードバランサーの説明 |
tenant_id | String | - | ロードバランサーが作成されるテナントのID |
vip_subnet_id | String | O | ロードバランサーが使用するサブネットのUUID |
vip_address | String | - | ロードバランサーのIP指定 |
security_group_ids | Object | - | ロードバランサーに適用するセキュリティグループIDリスト セキュリティグループは必ず名前ではなくIDで指定する必要があります。 |
admin_state_up | Boolean | - | 管理者制御状態 |
# HTTPリスナー
resource "openstack_lb_listener_v2" "tf_listener_http_01"{
name = "tf_listener_01"
description = "create listener by terraform."
protocol = "HTTP"
protocol_port = 80
loadbalancer_id = openstack_lb_loadbalancer_v2.tf_loadbalancer_01.id
default_pool_id = ""
connection_limit = 2000
timeout_client_data = 5000
timeout_member_connect = 5000
timeout_member_data = 5000
timeout_tcp_inspect = 5000
admin_state_up = true
}
# Terminated HTTPSリスナー
resource "openstack_lb_listener_v2" "tf_listener_01"{
name = "tf_listener_01"
description = "create listener by terraform."
protocol = "TERMINATED_HTTPS"
protocol_port = 443
loadbalancer_id = openstack_lb_loadbalancer_v2.tf_loadbalancer_01.id
default_pool_id = ""
connection_limit = 2000
timeout_client_data = 5000
timeout_member_connect = 5000
timeout_member_data = 5000
timeout_tcp_inspect = 5000
default_tls_container_ref = "https://kr1-api-key-manager.infrastructure.cloud.toast.com/v1/containers/3258d456-06f4-48c5-8863-acf9facb26de"
sni_container_refs = null
admin_state_up = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 作成するリスナーの名前 |
description | String | - | リスナーの説明 |
protocol | String | O | 作成するリスナーのプロトコルTCP 、HTTP,HTTPS 、TERMINATED_HTTPS のうちいずれか1つ |
protocol_port | Integer | O | 作成するリスナーのポート |
loadbalancer_id | String | O | 作成するリスナーが接続されるロードバランサーのID |
default_pool_id | String | - | 作成するリスナーに接続される基本プールID |
connection_limit | Integer | - | 作成するリスナーに許可される最大接続数 |
timeout_client_data | Integer | - | クライアントが非アクティブの時のtimeout設定(ms) |
timeout_member_connect | Integer | - | メンバー接続時のtimeout設定(ms) |
timeout_member_data | Integer | - | メンバーが非アクティブの時のtimeout時間設定(ms) |
timeout_tcp_inspect | Integer | - | コンテンツチェックのために追加TCPパケットを待つ時間(ms) |
default_tls_container_ref | String | - | プロトコルがTERMINATED_HTTPS の場合は使用するTLS証明書のパス |
sni_container_refs | Array | - | SNI証明書のパスリスト |
insert_headers | String | - | バックエンドメンバーにリクエストを転送する前に追加するヘッダリスト |
admin_state_up | Boolean | - | 管理者制御状態 |
(注意) NHN Cloudは、プール作成時にloadbalancer_id
の指定をサポートしません。
resource "openstack_lb_pool_v2" "tf_pool_01"{
name = "tf_pool_01"
description = "create pool by terraform."
protocol = "HTTP"
listener_id = openstack_lb_listener_v2.tf_listener_01.id
lb_method = "LEAST_CONNECTIONS"
persistence{
type = "APP_COOKIE"
cookie_name = "testCookie"
}
admin_state_up = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | ロードバランサーの名前 |
description | String | - | プールの説明 |
protocol | String | O | プロトコルTCP 、HTTP 、HTTPS 、PROXY のうちいずれか1つ |
listener_id | String | O | 作成するプールが接続されるリスナーID |
lb_method | String | O | プールのトラフィックをメンバーに分配するロードバランシング方式ROUND_ROBIN 、LEAST_CONNECTIONS 、SOURCE_IP のいずれか1つ |
persistence | Object | - | 作成するプールのセッション持続性 |
persistence.type | String | O | セッション持続性タイプSOURCE_IP 、HTTP_COOKIE 、APP_COOKIE のうちいずれか1つロードバランシング方式が SOURCE_IP の場合は使用不可。プロトコルが HTTPS またはTCP の場合、HTTP_COOKIEとAPP_COOKIEを使用不可。 |
persistence.cookie_name | String | - | Cookie名 persistence.cookie_nameはセッション持続性タイプがAPP_COOKIEの場合にのみ使用可能。 |
admin_state_up | Boolean | - | 管理者制御状態 |
resource "openstack_lb_monitor_v2" "tf_monitor_01"{
name = "tf_monitor_01"
pool_id = openstack_lb_pool_v2.tf_pool_01.id
type = "HTTP"
delay = 20
timeout = 10
max_retries = 5
url_path = "/"
http_method = "GET"
expected_codes = "200-202"
admin_state_up = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
name | String | - | 作成するヘルスモニターの名前 |
pool_id | String | O | 作成するヘルスモニターが接続されるプールID |
type | String | O | TCP 、HTTP 、HTTPS のみサポート |
delay | Integer | O | ヘルスチェック間隔(秒) |
timeout | Integer | O | ヘルスチェックレスポンス待機時間(秒) timeoutはdelay値より小さくする必要がある。 |
max_retries | Integer | O | 最大再試行回数。1~10の値。 |
url_path | String | - | ヘルスチェックリクエストURL |
http_method | String | - | ヘルスチェックに使用するHTTP Method デフォルト値はGET |
expected_codes | String | - | 正常状態とみなすメンバーのHTTP(S)レスポンスコード expected_codesはリスト( 200,201,202 )または範囲指定(200-202 )も可能。 |
admin_state_up | Boolean | - | 管理者制御状態 |
(注意)NHN Cloudでメンバー作成時にsubnet_id
を必ず指定します。またname
はサポートしません。
resource "openstack_lb_member_v2" "tf_member_01"{
pool_id = openstack_lb_pool_v2.tf_pool_01.id
subnet_id = data.openstack_networking_subnet_v2.default_subnet.id
address = openstack_compute_instance_v2.tf_instance_01.access_ip_v4
protocol_port = 8080
weight = 4
admin_state_up = true
}
名前 | 形式 | 必須 | 説明 |
---|---|---|---|
pool_id | String | O | 作成するメンバーが属すプールID |
subnet_id | String | O | 作成するメンバーのサブネットID |
address | String | O | ロードバランサーからトラフィックを受信するメンバーのIPアドレス |
protocol_port | Integer | O | トラフィックを受信するメンバーのポート |
weight | Integer | - | プールで受信する必要があるトラフィックの重み 高いほどトラフィックをたくさん受信する。 |
admin_state_up | Boolean | - | 管理者制御状態 |
Terraform Documentation - https://www.terraform.io/docs/providers/index.html