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