IBM Cloud Docs
Terraform で VMware Cloud Foundation as a Service の仮想データセンターを構成する

Terraform で VMware Cloud Foundation as a Service の仮想データセンターを構成する

このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。

このチュートリアルでは、最初のインスタンス プロビジョニング後に、IBM Cloud® for VMware Cloud Foundation as a Service シングルテナントまたはマルチテナントの仮想データ センター (VDC) を運用するための基本的な手順を説明します。 このチュートリアルは、VMware Cloud Foundation as a Service インスタンスVDC がすでにプロビジョニングされていることを前提としています。 このチュートリアルでは、Terraformテンプレートの例を使いますが、必要であれば、あなたのユースケースに合わせてカスタマイズしたり修正したりすることができます。

目標

このチュートリアルでは、次のことを学びます:

  • TerraformでVDCネットワークを作る方法。
  • Terraformを使ってVDCネットワーク上に仮想マシン(VM)を作成する方法。
  • TerraformでVDCエッジゲートウェイにネットワークアドレス変換(NAT)とファイアウォール(FW)ルールを設定する方法。

次の図は、導入するソリューションの概要を示している。

" caption-side="bottom"}*の{: caption="図

  1. IBM Cloud コンソールを使用して、シングル・テナント・インスタンスに VDC を作成します。 インスタンスには1つ以上のVDCがあるかもしれないので、テスト用に専用のVDCを持つことができる。 この例のVDCは 2 IOPS/GB ストレージプールだけを使用します。
  2. VDCが作成されると、エッジ・ゲートウェイと外部ネットワークが自動的に作成される。 外部ネットワークはインターネットアクセスを提供し、6つの使用可能なパブリックIPアドレスを持つ /29 のIPアドレスブロックが提供されます。
  3. TerraformテンプレートはVDCネットワーク、VM、ファイアウォール、ネットワークアドレス変換ルールの作成に使われる。 創作は変数によって完全にコントロールされている。 Terraform は VMware Cloud Director API に対してユーザー名とパスワードで認証を行います。 アクセストークンは近い将来サポートされる予定だ。
  4. 3つのVDCネットワークが作成されます:2つのルーティングされたもの(application-network-1db-network-1)と1つの孤立したもの(isolated-network-1)です。ルーティングされたVDCネットワークはエッジゲートウェイに接続され、アイソレーションされたVDCネットワークは独立したネットワークです。 ニーズに応じてネットワークを増やすことができる。
  5. ジャンプサーバー(jump-server-1)はWindows 2022オペレーティングシステムで作成されます。 サーバーは application-network-1 に接続されています。 仮想マシンには、VMコンソール、またはエッジゲートウェイに作成したDNATルールを使用してRDPでアクセスできます。
  6. application-network-1 上に仮想マシン(application-server-1)が1つ作成されます。 application-server-1 には、例えばロギング用の追加ディスクがあります。 ニーズに応じて、さらにVMやディスクを作成することができる。
  7. ある仮想マシンの例(db-server-1)は、db-network-1isolated-network-1 に2つの別々のvnicsで作成されます。 db-server-1 には、データやロギング用に2つのディスクが追加されている。 ニーズに応じて、さらにVMやディスクを作成することができる。
  8. ソースNAT(SNAT)および宛先NAT(DNAT)ルールは、パブリックネットワークアクセス用に作成されます。 すべてのルーティングされたネットワークに対して、公衆インターネットへのSNATが設定され、アプリケーションサーバーへのアクセスにはDNATが設定されている。
  9. ファイアウォールルールは、環境へのネットワークアクセスを保護するためにプロビジョニングされる。 ファイアウォールルールを作成するには、ネットワークと個々のIPアドレスに対して静的グループとIPセットを作成します。

このチュートリアルは以下のステップに分かれている:

  1. サンプル・レポをクローンする
  2. VDCに関する必要な情報を入手する
  3. Terraformのテンプレート変数を設定する
  4. 初期設定、計画、適用
  5. VMware Cloud Director コンソールに接続します
  6. インターネット経由でVMに接続し、接続性を検証する

VMware Cloud Director Console を使用した、代替チュートリアル もあります。

開始前に

このチュートリアルでは、以下が必要です。

ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。

サンプルレポジトリをクローンする

VMware Cloud Foundation as a Service 用の Terraform テンプレート例は GitHub にあります。

ラップトップやインターネットにアクセスできる仮想サーバーなど、ローカル・マシンにサンプル・レポをクローンしてください。

例えば、GitHub CLI を使います:

gh repo clone IBM/vmwaas-terraform-examples

または、 HTTPS に次の URL を記載して使用します

https://github.com/IBM/vmwaas-terraform-examples.git

VDCに関する必要な情報を入手する

前提条件として、IBM Cloud コンソール を使用して、VMware Cloud Foundation as a Serviceシングルテナントインスタンス と、1つ以上のVDC を作成します。

インスタンスとVDCがデプロイされると、コンソールから必要な詳細とVDC IDを収集できます。

VMware Cloud Foundation as a ServiceシングルテナントインスタンスのVMware Cloud Directorコンソールにログインします:

  1. VMware Cloud Foundation as a Service テーブルで、VMware Cloud Foundation as a Service インスタンス名をクリックします。
  2. サマリー」 タブで、情報を確認する。
  3. VDC リージョンの VMware Cloud Director コンソールに初めてアクセスする場合は、管理者認証情報を設定して、初期、複雑、ランダムなパスワードを生成する必要があります。
  4. VDCの詳細ページで、VMware Cloud Director Console をクリックして、コンソールにアクセスします。
  5. admin ユーザー名とパスワードを使用して、VMware Cloud Director コンソールに初めてログインします。
  6. 管理者が VMware Cloud Director コンソールにログインした後、 VMware Cloud Director コンソールへのアクセスを許可するロールを持つ追加ユーザーを作成できます。

VMware Cloud Director Console にログインして、Terraform のデプロイに必要な情報を収集できます。 代わりに、examples リポジトリにある vmwaas.sh シェルスクリプトを使うこともできます。 スクリプトは、VMware Cloud Foundation as a Service APIを使用してこれらの値を収集します。

スクリプトを使用するには、地域とAPIキーを次のように設定します:

export IBMCLOUD_API_KEY=your-api-key-here
export IBMCLOUD_REGION=region-here

デフォルトのリージョンは us-south です。

スクリプトの使い方

% ./vmwaas.sh
USAGE : vmwaas [ ins | in | vdcs | vdc | vdcgw | tf | tfvars ]

インスタンスをリストアップする

% ./vmwaas.sh ins
Get instances.


Instances:

NAME          DIRECTOR_SITE_ID                      LOCATION    STATUS
demo          b75efs1c-35df-40b3-b569-1124be37687d  us-south-1  ReadyToUse

VDCをリストアップする:

% ./vmwaas.sh vdcs           
Get virtual datacenters.


VDCs:

NAME             ID                                    DIRECTOR_SITE_ID                      CRN
vdc-demo         5e37ed2d-54cc-4798-96cf-c363de922ab4  b75efs1c-35df-40b3-b569-1124be37687d  crn:v1:bluemix:public:vmware:us-south:...

認証用のTerraform TF_VARを取得する:

% ./vmwaas.sh tfvars vdc-demo
Get variables for Terraform in export format.


TF_VARs:

export TF_VAR_vmwaas_url="https://<your_url>.us-south.vmware.cloud.ibm.com/api"
export TF_VAR_vmwaas_org="f37f3422-e6c4-427e-b277-9fec334b99fb"
export TF_VAR_vmwaas_vdc_name="vdc-demo"

これらをシェルにエクスポートするか、tfvars オプションを使ってスクリプトの出力として terraform.tfvars ファイルに追加される terraform.tfvars 行を取得することができます。

Terraformのテンプレート変数を設定する

この例のインフラストラクチャTerraformテンプレートは、vcd-demo-infra フォルダにあります。

このデモTerraformテンプレートは、2つのルーティングされたVDCネットワークと1つの分離されたVDCネットワーク、3つのVM、SNAT、DNAT、ファイアウォールルールの例で構成される以下のインフラストラクチャの例をデプロイする。

caption-side=bottom"
基本インフラ*

Terraformは VMware Cloud Director Providerを使用し、使用した例での主なプロバイダリソースは以下の通りです:

このテンプレートの例では、作成はTerraformの変数によって完全に制御されています - 例えばネットワークやVMの数を増やしたい場合でも、実際のTerraformテンプレートを変更する必要はありません。 terraform.tfvars-example ファイルの例が提供され、値の例が説明とともに提供される。

始める前に、例えば例の terraform.tfvars-exampleterraform.tfvars にコピーしてください:

cp terraform.tfvars-example terraform.tfvars

ネットワークやVMを追加したり、NATやファイアウォールのルールをカスタマイズしたりと、ニーズに応じて使い分けることができる。

  1. インスタンスとVDCにアクセスするために、以下の共通変数を設定する。

    # Note. Variable values to access your Director instance. Use the Director portal
    # to figure our your values here.
    
    vmwaas_url = "put-your-director-url-here" # for example "https://abcxyz.us-south.vmware.cloud.ibm.com/api"
    vmwaas_org = "put-your-org-id-here"
    vmwaas_vdc_name = "put-your-vdc-name-here"
    
    vmwaas_api_token = ""                                    # Note. See VMware Docs to create API token.
    #vmwaas_user = "put-your-username-here"                  # Note. When using a username and password, create a new local user in Director for terraform.
    #vmwaas_password = "put-your-password-here"              # Note. When using a username and password, create a new local user in Director for terraform.
    

    APIトークンを作成するには、 VMware Cloud Director Docs を参照してください。

    これらの変数については、vmwaas.sh スクリプトで示したように terraform.tfvars で定義するのではなく、vmwaas_api_tokenvmwaas_uservmwaas_password に対してTF_VAR_という名前の環境変数を作成することもできます。 この場合、terraform.tfvars の中でこれらの行をコメントアウトしてください。

    認証方法を変更する場合は、コード内のプロバイダ・ブロックを変更して、別の認証方法を使用する必要があります。

  2. VDCネットワークやVMなどを識別・分離するために、共通の名前プレフィックスを設定する。

    # Note. Use a common name prefix for each item.
    
    item_name_prefix = "demo"
    
  3. VMのDNSサーバーを定義する。

    VM で IBM Cloud Public DNS サーバーを使用することも、独自のものを使用することもできます。

    # Note. IBM Cloud DNS servers listed here.
    # You may also use your own here.
    
    dns_servers = ["161.26.1.10","161.26.1.11"]
    

    ここで独自のDNSサーバーを使用する場合は、これらのサーバーにアクセスできるネットワーク接続があることを確認してください。

  4. VDCネットワークの定義

    VDCネットワークを作成するときは、マップ変数 vdc_networks を使って、これらのネットワークとIPプールを定義します。

    # Note. Create VDC networks of type `routed` or
    # `isolated`. You can define one `static_ip_pool`and one
    # `dhcp_ip_pool` for each.
    
    vdc_networks = {
       application-network-1 = {
          description = "Application network 1"
          type = "routed"
          subnet = {
                cidr = "172.26.1.0/24"
                prefix_length = 24
                gateway = "172.26.1.1"
                static_ip_pool = {
                   start_address = "172.26.1.10"
                   end_address   = "172.26.1.100"
                }
                dhcp_ip_pool = {
                   start_address = "172.26.1.101"
                   end_address   = "172.26.1.199"
                }        
          }
       },
       db-network-1 = {
          description = "DB network 1"
          type = "routed"
          subnet = {
                cidr = "172.26.2.0/24"
                prefix_length = 24
                gateway = "172.26.2.1"
                static_ip_pool = {
                   start_address = "172.26.2.10"
                   end_address   = "172.26.2.100"
                }
                dhcp_ip_pool = {
                   start_address = "172.26.2.101"
                   end_address   = "172.26.2.199"
                }        
          }
       },
       isolated-network-1 = {
          description = "Isolated network 1"
          type = "isolated"
          subnet = {
                cidr = "172.26.3.0/24"
                prefix_length = 24
                gateway = "172.26.3.1"
                static_ip_pool = {
                   start_address = "172.26.3.10"
                   end_address   = "172.26.3.100"
                }
                dhcp_ip_pool = {} # leave empty for isolated network   
          }
       },
    }
    
  5. 仮想マシン構成を定義する。

    VMを作成する際には、マップ変数 virtual_machines を使ってこれらを定義する。

    # Note. Create VMs inside your VDC.
    # You can define each one individually and attach multiple networks
    # and disks. Individual disks are created for each additional disk.
    
    # Note. Check the storage profile names and apply to your VMs / disks.
    # If left empty, default profile is used.
    
    virtual_machines = {
       app-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "RedHat-8-Template-Official"
          }
          memory          = 8192
          cpus            = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = "2 IOPS/GB"
          networks = {
                0 = {
                   name = "application-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
          }
          disks = {
                0 = {
                   name = "logDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
          }
       },
       db-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "RedHat-8-Template-Official"
          }
          memory        = 8192
          cpus          = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = ""
          networks = {
                0 = {
                   name = "db-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
                1 = {
                   name = "isolated-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = false
                   ip = ""
                },
          }
          disks = {
                0 = {
                   name = "dbDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
                1 = {
                   name = "dbLogDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
          }    
       },
       jump-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "Windows-2022-Template-Official"
          }
          memory        = 8192
          cpus          = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = ""
          networks = {
                0 = {
                   name = "application-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
          },
          disks = {}
       },
    }
    
  6. パブリックIPアドレスマップを定義する。

    各VDCは、各VDCとそのエッジ・ゲートウェイ用に6つのパブリックIPアドレスを取得する。 このTerraformテンプレートは、提供されたIPアドレスの連続リストをマップとして扱います。 次の変数 public_ips は、VDCに提供されているパブリックIPアドレスを記述しています。 キー(例えば public-ip-1)を使えば、実際のIPアドレス(例えば xx.yy.zz.56)を他の変数に指定しなくても、テンプレート内でIPアドレスを定義し、参照として使うことができます。

    # Note. Map of available 6 public IPs. You can use these names
    # in NAT rules. Do not change the map's keys here.
    
    public_ips = {
       public-ip-0 = {
          name = "public-ip-0"
          description = ""
       },
       public-ip-1 = {
          name = "public-ip-1"
          description = ""
       },
       public-ip-2 = {
          name = "public-ip-2"
          description = ""
       },
       public-ip-3 = {
          name = "public-ip-3"
          description = ""
       },
       public-ip-4 = {
          name = "public-ip-4"
          description = ""
       },
       public-ip-5 = {
          name = "public-ip-5"
          description = ""
       },
    }
    
  7. NATルールを定義する。

    変数 nat_rules は、作成するNATルールを定義します。 提供された例をチェックし、あなたのニーズに基づいて修正してください。

    # Note. You can use `vdc_networks` or `virtual_machines` keys as
    # address_targets here. Terraform will pick the IP address of
    # the specific resource and use that in the actual NAT rule.
    
    # Note. You can specify the desired actual public IP address
    # (`external_address`) in the rule, or you can use the
    # `external_address_list_index`, which will pick the IP
    # addresses from the allocated IP pool (`edge_gateway_allocated_ips`).
    
    # Note. Use Director UI to get the name for the Application
    # profiles."
    
    nat_rules = {
       dnat-to-app-1 = {
          rule_type   = "DNAT"
          description = "DNAT rule to app-server-1"
          external_address_target = "public-ip-1"
          external_address = ""
          internal_address_target = "app-server-1"
          internal_address = ""
          dnat_external_port = ""
          app_port_profile = ""
          logging = false
          priority = 90
          enabled = true
       },
       dnat-to-jump-1 = {
          rule_type   = "DNAT"
          description = "DNAT rule to jump-server-1"
          external_address_target = "public-ip-2"
          external_address = ""
          internal_address_target = "jump-server-1"
          internal_address = ""
          dnat_external_port = ""
          app_port_profile = ""
          logging = false
          priority = 90
          enabled = true
       },
       snat-to-internet-1 = {
          rule_type = "SNAT"
          description = "SNAT rule to application-network-1"
          external_address_target = "public-ip-0"
          external_address = ""  
          internal_address_target = "application-network-1"
          internal_address = ""
          snat_destination_address = ""
          logging = false
          priority = 100
          enabled = true
       },    
       snat-to-internet-2 = {
          rule_type = "SNAT"
          description = "SNAT rule to db-network-1"
          external_address_target = "public-ip-0"
          external_address = ""  
          internal_address_target = "db-network-1"
          internal_address = ""
          snat_destination_address = ""
          logging = false
          priority = 100
          enabled = true
       },  
    }  
    
  8. ファイアウォールルールの定義に必要なIPセットと静的グループを作成する。

    Terraformテンプレートは、NATルールで使用されるパブリックIPアドレスのIPセットを作成する。 また、オンプレミスネットワークやその他のプライベートまたはパブリックIPアドレスなど、追加のIPセットを定義することもできます。

    # Note. You need to create IP sets to be used in firewall rules.
    # You can use the `public_ips` keys here as address_targets,
    # but you can define IP sets using real IP addresses using a
    # list `ip_addresses`.
    
    ip_sets = {
       ip-set-on-public-ip-0 = {
          description = "Public IP 0 - used for SNAT"
          ip_addresses = []
          address_target = "public-ip-0"
       },
       ip-set-on-public-ip-1 = {
          description = "Public IP 1 - used for DNAT to app-server-1"
          ip_addresses = []
          address_target = "public-ip-1"
       },
       ip-set-on-public-ip-2 = {
          description = "Public IP 2 - used for DNAT to jump-server-1"
          ip_addresses = []
          address_target = "public-ip-2"
       },
       ip-set-on-public-ip-3 = {
          description = "Public IP 3"
          ip_addresses = []
          address_target = "public-ip-3"
       },
       ip-set-on-public-ip-4 = {
          description = "Public IP 4"
          ip_addresses = []
          address_target = "public-ip-4"
       },
       ip-set-on-public-ip-5 = {
          description = "Public IP 5"
          ip_addresses = []
          address_target = "public-ip-5"
       },
       ip-set-on-premises-networks = {
          description = "On-premises networks"
          ip_addresses = ["172.16.0.0/16",]
          address_target = ""
       },
    }
    

    また、ファイアウォールルールでスタティックグループをソースやターゲットとして使用することもできます。 この例では、ルーティングされたVDCネットワークごとに1つ、およびすべてのルーティングされたVDCネットワークを含む1つの、合計3つの静的グループを作成します。

    # Note. You need to create Static Groups to be used in firewall rules.
    # You can use `vdc_networks` as keys here.
    
    security_groups = {
       sg-application-network-1 = {
          description = "Static Group for application-network-1"
          address_targets = ["application-network-1"]
       },
       sg-db-network-1 = {
          description = "Static Group for db-network-1"
          address_targets = ["db-network-1"]
       },
       sg-all-routed-networks = {
          description = "Static Group for all VDC networks"
          address_targets = ["application-network-1", "db-network-1"]
       },
    }
    
  9. ファイアウォールルールを定義する。

    変数 firewall_rules は、作成するファイアウォールルールを定義します。 提供されている例を参照し、ニーズに応じて変更してください。

    # Note. Use "ALLOW or "DROP".
    
    # Note. Use Director UI to get the name for the Application
    # profiles."
    
    firewall_rules = {
       app-1-egress = {
          action  = "ALLOW"
          direction = "OUT"
          ip_protocol = "IPV4"
          destinations = []                                          # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = ["sg-application-network-1", "sg-db-network-1"]  # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = []
          logging = false
          enabled = true
       },
       dnat-to-app-1-ingress = {
          action  = "ALLOW"
          direction = "IN"
          ip_protocol = "IPV4"
          destinations = ["ip-set-on-public-ip-1"]                   # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = []                                               # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = ["SSH","HTTPS","ICMP ALL"]
          logging = false
          enabled = true
       },
       dnat-to-jump-1-ingress = {
          action  = "ALLOW"
          direction = "IN"
          ip_protocol = "IPV4"
          destinations = ["ip-set-on-public-ip-2"]                   # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = []                                               # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = ["RDP"]
          logging = false
          enabled = true
       },
    }
    

一般に、公衆インターネット上でRDPを使用することは推奨されない。 上記のルールはあくまで説明のためのものである。

開始、計画、適用

  1. Terraformプロジェクトを初期化するには、exampleディレクトリで terraform init コマンドを実行し、出力を見てください。

    以下に例を示します。

    % terraform init
    
    Initializing the backend...
    
    Initializing provider plugins...
    - Finding latest version of hashicorp/random...
    - Finding latest version of vmware/vcd...
    - Installing hashicorp/random v3.4.3...
    - Installed hashicorp/random v3.4.3 (signed by HashiCorp)
    - Installing vmware/vcd v3.8.2...
    - Installed vmware/vcd v3.8.2 (signed by a HashiCorp partner, key ID 8BF53DB49CDB70B0)
    
    Partner and community providers are signed by their developers.
    If you'd like to know more about provider signing, you can read about it here:
    https://www.terraform.io/docs/cli/plugins/signing.html
    
    Terraform has created a lock file .terraform.lock.hcl to record the provider
    selections it made above. Include this file in your version control repository
    so that Terraform can guarantee to make the same selections by default when
    you run "terraform init" in the future.
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
    
  2. 次に、terraform plan を実行して、何がデプロイされるかを確認することができます。

    % terraform plan
    data.vcd_resource_list.list_of_vdcs: Reading...
    data.vcd_resource_list.list_of_vdc_edges: Reading...
    data.vcd_resource_list.list_of_catalog_items: Reading...
    data.vcd_nsxt_app_port_profile.system["SSH"]: Reading...
    data.vcd_nsxt_app_port_profile.system["HTTPS"]: Reading...
    data.vcd_nsxt_app_port_profile.system["ICMP ALL"]: Reading...
    data.vcd_org_vdc.org_vdc: Reading...
    
    [output omitted]
    
    Plan: 29 to add, 0 to change, 0 to destroy.
    
  3. 計画の出力をチェックし、すべてが計画通りであれば、terraform apply を実行して実際にアセットをデプロイすることができます。

    以下に例を示します。

    % terraform apply --auto-approve
    data.vcd_resource_list.list_of_vdcs: Reading...
    data.vcd_resource_list.list_of_vdc_edges: Reading...
    data.vcd_resource_list.list_of_catalog_items: Reading...
    data.vcd_nsxt_app_port_profile.system["SSH"]: Reading...
    data.vcd_nsxt_app_port_profile.system["HTTPS"]: Reading...
    data.vcd_nsxt_app_port_profile.system["ICMP ALL"]: Reading...
    data.vcd_org_vdc.org_vdc: Reading...
    
    [output omitted]
    
    Apply complete! Resources: 29 added, 0 changed, 0 destroyed.
    
  4. 上記の例に加え、terraformではいくつかの変数を outputs として提供しています。 これらの output 値をチェックして、例えば、VMにアクセスするためのIPアドレスやその他のアクセス情報を取得します。

    例えば、terraform output created_virtual_machines を実行すると、VMへのアクセス情報を得ることができる:

    % terraform output created_virtual_machines
    {
    "app-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-app-server-1"
       "network" = [
          {
          "ip_address" = "172.26.1.10"
          "is_primary" = true
          "name" = "demo-application-network-1"
          },
       ]
    }
    "db-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-db-server-1"
       "network" = [
          {
          "ip_address" = "172.26.2.10"
          "is_primary" = true
          "name" = "demo-db-network-1"
          },
          {
          "ip_address" = "172.26.3.10"
          "is_primary" = false
          "name" = "demo-isolated-network-1"
          },
       ]
    }
    "jump-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-jump-server-1"
       "network" = [
          {
          "ip_address" = "172.26.1.11"
          "is_primary" = true
          "name" = "demo-application-network-1"
          },
       ]
    }
    }
    

    NATルールと使用されているパブリックIPアドレスを取得するには、terraform output created_nat_rules を実行します:

    % terraform output created_nat_rules
    {
    "dnat-to-app-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.19"
       "internal_address" = "172.26.1.10"
       "name" = "demo-dnat-to-app-1"
       "rule_type" = "DNAT"
       "snat_destination_address" = ""
    }
    "dnat-to-jump-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.20"
       "internal_address" = "172.26.1.11"
       "name" = "demo-dnat-to-jump-1"
       "rule_type" = "DNAT"
       "snat_destination_address" = ""
    }
    "snat-to-internet-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.18"
       "internal_address" = "172.26.1.0/24"
       "name" = "demo-snat-to-internet-1"
       "rule_type" = "SNAT"
       "snat_destination_address" = ""
    }
    "snat-to-internet-2" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.18"
       "internal_address" = "172.26.2.0/24"
       "name" = "demo-snat-to-internet-2"
       "rule_type" = "SNAT"
       "snat_destination_address" = ""
    }
    }
    

    created_fw_rulescreated_ip_sets でIPセット、created_static_groups で静的グループ、といった具合です。 以下に例を示します。

    terraform output created_fw_rules
    

プロビジョニング後、ファイアウォールルールの例をお客様の標準とニーズに従って調整してください。 これらは、sshRDP のように、あなたのVMへのパブリック・アクセスを公開する。

VMware Cloud Director コンソールに接続します

VMware Cloud Director コンソールの使用方法とアクセス方法については、代替チュートリアル を参照してください。 導入された資産とエッジゲートウェイの設定方法(FWとNATルール)を確認する。

例えばterraform output からVMのユーザー名とパスワードを取得する:

terraform output created_virtual_machines

VMware Cloud Director Consoleのコンソールで仮想マシンに接続します:

  1. Launch Web Console をクリックして、仮想マシンのローカルコンソールを開きます。
  2. Webコンソールを使用して、ユーザーIDとしてrootを使用し、前のステップでキャプチャしたパスワードを使用して仮想マシンにログインします。
  3. そうすれば、www.ibm.com のようなインターネットリソースにpingを送ることができるはずです。

インターネット経由でVMに接続し、接続性を検証する

最後のステップは、インターネットを通じて仮想マシンに接続し、デプロイメントとネットワーク接続性を検証することです。

インターネット経由で仮想マシンに接続する:

  1. ラップトップやワークステーションから、パブリックIPアドレス public-ip-1 にpingを打ったり、app-server-1 にsshを打ったりすることができるはずです。
  2. RDP を使用して、パブリック IP アドレス public-ip-2 と前の手順で収集したユーザー名とパスワードを使用して、Jump サーバー jump-server-1 に接続できるはずです。
  3. 前のステップで作成したFWルール dnat-to-app-1-ingress を無効にするには、Consoleを使ってルールとそのStateを編集し、StateをDisabled(灰色)にスライドさせるか、特定のルールのTerraform変数を Drop に変更して terraform apply --auto-approve を実行します。
  4. 前のステップで作成したFWルール dnat-to-jump-1-ingress を無効にするには、Consoleを使ってルールとそのStateを編集し、StateをDisabled(灰色)にスライドさせるか、特定のルールのTerraform変数を Drop に変更して terraform apply --auto-approve を実行します。

参照資料

VDC の管理の詳細については、次の VMware Cloud Director™ テナントポータルガイドを確認してください:

プロバイダ、リソース、データソースの詳細情報については、Terraformレジストリを確認してください: