Network作成 Heatテンプレート例

hello_world_Network_1.yaml, hello_world_Network_2.yaml

以下の構成のネットワークを定義するテンプレート例です。

CAUTION:

外部ネットワークに接続させるルータの作成を含むテンプレートを使用してスタックを新規に作成することはできません。外部ネットワークに接続させない状態のルータを定義したテンプレートを使用してスタック作成した後、テンプレートのルータの定義に「external_gateway_info」プロパティを追記してスタックのアップデートを実施する必要があります。

本章の「hello_world_Network_1.yaml」を使用してスタックを作成し「hello_world_Network_2.yaml」を使用してスタックをアップデートすることで外部ネットワークの接続が可能です。

なお、外部ネットからの通信が可能な「ロードバランサーサービス」や「データベースサービス」のリソースを含むHeatテンプレートの場合もスタックの作成を実施した際、エラーが発生しますが、上記同様にスタックのアップデートを行うことで正常に配備することが可能となります。

hello_world_Network_1.yaml

heat_template_version: 2013-05-23
description: Network part for service.
parameters:
  az:
    type: string
    description: Availability zone
    default: (利用するアベイラビリティゾーン 例:jp-east-1a)
  service_network1_name:
    type: string
    description: Name of the service network
    default: (任意のネットワーク名)
  service_subnet1_name:
    type: string
    description: Name of the service subnetwork.
    default: (任意のサブネット名)
  service_router1_name:
    type: string
    description: Name of the service vrouter.
    default: (任意のルータ名)
  service_subnet1_cidr:
    type: string
    description: CIDR representation of the service subnet.
    default: (任意のCIDR)
  service_subnet1_gw_ip:
    type: string
    description: Gateway IP of Subnet
    default: (サブネットに設定するGWアドレス)
  service_subnet1_gw_port_name:
    type: string
    description: Gateway port name of Subnet
    default: (任意のポート名)
  security_group_name:
    type: string
    description: Security Group name
    default: (任意のセキュリティグループ名)
  nameserver_ip1:
    type: string
    description: IP of the dns nameserver1.
    default: (サブネットに配備するサーバが使用するDNSサーバ1のIPアドレス)
  nameserver_ip2:
    type: string
    description: IP of the dns nameserver2.
    default: (サブネットに配備するサーバが使用するDNSサーバ2のIPアドレス)
  firewall1_name:
    type: string
    description: Name of the firewall1
    default: (任意のFW名)
  firewall1_policy_name:
    type: string
    description: Name of the firewall1 Policy
    default: (任意のFWポリシー名)

resources:
  service_network1:
    type: OS::Neutron::Net
    properties:
      availability_zone: {get_param: az }
      name: { get_param: service_network1_name }
  service_subnet1:
    type: OS::Neutron::Subnet
    properties:
      availability_zone: { get_param: az }
      cidr: { get_param: service_subnet1_cidr }
      name: { get_param: service_subnet1_name }
      gateway_ip: { get_param: service_subnet1_gw_ip }
      network_id: { get_resource: service_network1 }
      dns_nameservers: [{ get_param: nameserver_ip1 }, { get_param: nameserver_ip2 }]
  gw_port1:
    type: OS::Neutron::Port
    properties:
      availability_zone: { get_param: az }
      network_id: { get_resource: service_network1 }
      fixed_ips: [{"ip_address": {get_param: service_subnet1_gw_ip }, "subnet_id": {get_resource: service_subnet1 }}]
      name: { get_param: service_subnet1_gw_port_name }
  service_router1:
    type: OS::Neutron::Router
    properties:
      availability_zone: { get_param: az }
      name: { get_param: service_router1_name }
  service_router_interface1:
    depends_on: service_router1
    type: OS::Neutron::RouterInterface
    properties:
      router_id: { get_resource: service_router1 }
      port_id: { get_resource: gw_port1 }
  security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: test Security groups rule
      name: { get_param: security_group_name }
      availability_zone: {get_param: az}
      rules: [{"direction": ingress, "port_range_max": 22, "port_range_min": 22, "protocol": tcp, "remote_ip_prefix": 192.168.0.0/16 },
              {"direction": ingress, "protocol": icmp, "remote_ip_prefix": 192.168.0.0/16 }]
  firewall1:
    type: OS::Neutron::Firewall
    properties:
      description: test Firewall
      name: { get_param: firewall1_name }
      availability_zone: {get_param: az }
      firewall_policy_id: {get_resource: firewall1_policiy }
# 東日本第1 / 西日本第1 / 西日本第2 リージョンの場合、以下のコメントアウト"#"を
# はずしてください。
#      router_id: {get_resource: service_router1 }
# 東日本第2 リージョンの場合、以下のコメントアウト"#"をはずしてください。
#      value_specs: {"router_ids": [{get_resource: service_router1}]}
  firewall1_policiy:
    type: OS::Neutron::FirewallPolicy
    properties:
      audited: true
      description: test Firewall Policy
      firewall_rules: [{ get_resource: firewall_rule1 },{ get_resource: firewall_rule2 }]
      name: { get_param: firewall1_policy_name }
      availability_zone: {get_param: az }
  firewall_rule1:
    type: OS::Neutron::FirewallRule
    properties:
      description: test Firewall rule
      destination_port: "80"
      protocol: tcp
      source_ip_address: {get_param: service_subnet1_cidr}
      availability_zone: {get_param: az }
      action: allow
  firewall_rule2:
    type: OS::Neutron::FirewallRule
    depends_on: firewall_rule1
    properties:
      description: test Firewall rule2
      source_port: "53"
      protocol: udp
      source_ip_address: {get_param: service_subnet1_cidr}
      destination_ip_address: {get_param: nameserver_ip1}
      availability_zone: {get_param: az}
      action: allow

hello_world_Network_2.yaml

heat_template_version: 2013-05-23
description: Network part for service.
parameters:
  az:
    type: string
    description: Availability zone
    default: (利用するアベイラビリティゾーン 例:jp-east-1a)
  service_network1_name:
    type: string
    description: Name of the service network
    default: (任意のネットワーク名)
  service_subnet1_name:
    type: string
    description: Name of the service subnetwork.
    default: (任意のサブネット名)
  service_router1_name:
    type: string
    description: Name of the service vrouter.
    default: (任意のルータ名)
  service_subnet1_cidr:
    type: string
    description: CIDR representation of the service subnet.
    default: (任意のCIDR)
  service_subnet1_gw_ip:
    type: string
    description: Gateway IP of Subnet
    default: (サブネットに設定するGWアドレス)
  service_subnet1_gw_port_name:
    type: string
    description: Gateway port name of Subnet
    default: (任意のポート名)
  security_group_name:
    type: string
    description: Security Group name
    default: (任意のセキュリティグループ名)
  nameserver_ip1:
    type: string
    description: IP of the dns nameserver1.
    default: (サブネットに配備するサーバが使用するDNSサーバ)
  nameserver_ip2:
    type: string
    description: IP of the dns nameserver2.
    default: (サブネットに配備するサーバが使用するDNSサーバ)
  firewall1_name:
    type: string
    description: Name of the firewall1
    default: (任意のFW名)
  firewall1_policy_name:
    type: string
    description: Name of the firewall1 Policy
    default: (任意のFWポリシー名)
  ext-net: 
    type: string
    default:  (利用する外部ネットワーク名 例:inf_az1_ext-net01)

resources:
  service_network1:
    type: OS::Neutron::Net
    properties:
      availability_zone: {get_param: az }
      name: { get_param: service_network1_name }
  service_subnet1:
    type: OS::Neutron::Subnet
    properties:
      availability_zone: { get_param: az }
      cidr: { get_param: service_subnet1_cidr }
      name: { get_param: service_subnet1_name }
      gateway_ip: { get_param: service_subnet1_gw_ip }
      network_id: { get_resource: service_network1 }
      dns_nameservers: [{ get_param: nameserver_ip1 }, { get_param: nameserver_ip2 }]
  gw_port1:
    type: OS::Neutron::Port
    properties:
      availability_zone: { get_param: az }
      network_id: { get_resource: service_network1 }
      fixed_ips: [{"ip_address": {get_param: service_subnet1_gw_ip }, "subnet_id": {get_resource: service_subnet1 }}]
      name: { get_param: service_subnet1_gw_port_name }
  service_router1:
    type: OS::Neutron::Router
    properties:
# 以下の1行を追記しStack をUpdate することで、ルータに外部ネットワークを
# 接続することが可能です。
      external_gateway_info: {"network": {get_param: ext-net} }
      availability_zone: { get_param: az }
      name: { get_param: service_router1_name }
  service_router_interface1:
    depends_on: service_router1
    type: OS::Neutron::RouterInterface
    properties:
      router_id: { get_resource: service_router1 }
      port_id: { get_resource: gw_port1 }
  security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: test Security groups rule
      name: { get_param: security_group_name }
      availability_zone: {get_param: az}
      rules: [{"direction": ingress, "port_range_max": 22, "port_range_min": 22, "protocol": tcp, "remote_ip_prefix": 192.168.0.0/16 },
              {"direction": ingress, "protocol": icmp, "remote_ip_prefix": 192.168.0.0/16 }]
  firewall1:
    type: OS::Neutron::Firewall
    properties:
      description: test Firewall
      name: { get_param: firewall1_name }
      availability_zone: {get_param: az }
      firewall_policy_id: {get_resource: firewall1_policiy }
# 東日本第1 / 西日本第1 / 西日本第2 リージョンの場合、以下のコメントアウト"#"を
# はずしてください。
#      router_id: {get_resource: service_router1 }
# 東日本第2 リージョンの場合、以下のコメントアウト"#"をはずしてください。
#      value_specs: {"router_ids": [{get_resource: service_router1}]}
  firewall1_policiy:
    type: OS::Neutron::FirewallPolicy
    properties:
      audited: true
      description: test Firewall Policy
      firewall_rules: [{ get_resource: firewall_rule1 },{ get_resource: firewall_rule2 }]
      name: { get_param: firewall1_policy_name } 
      availability_zone: {get_param: az }
  firewall_rule1:
    type: OS::Neutron::FirewallRule
    properties:
      description: test Firewall rule
      destination_port: "80"
      protocol: tcp
      source_ip_address: {get_param: service_subnet1_cidr}
      availability_zone: {get_param: az }
      action: allow
  firewall_rule2:
    type: OS::Neutron::FirewallRule
    depends_on: firewall_rule1
    properties:
      description: test Firewall rule2
      source_port: "53"
      protocol: udp
      source_ip_address: {get_param: service_subnet1_cidr}
      destination_ip_address: {get_param: nameserver_ip1}
      availability_zone: {get_param: az}
      action: allow