サンプルシステム構成 Heatテンプレート例

Heat_template_sample.yaml

以下のリソースを作成するテンプレート例です。

Heat_template_sample.yaml

#
# This is a hello world HOT template just defining a single compute
# server.
#
heat_template_version: 2013-05-23

description: >
  This HOT template that just defines a single server and network.
  Contains just base features to verify base HOT support.

parameters:
  az:
    type: string
    description: availability zone
    default: jp-east-1a
    
  network_name:
    type: string
    description: name of network
    default: sample_network
    
  subnet_name:
    type: string
    description: name of subnet
    default: sample_subnet
    
  subnet_cidr:
    type: string
    description: subnet CIDR
    default: 192.168.0.0/24
    
  port_name:
    type: string
    description: name of vm
    default: sample_port
    
  sg_name:
    type: string
    description: security group
    default: sample_sg
    
  key_name:
    type: string
    description: name of keypair
    default: sample_key
    
  image:
    type: string
    description: Image ID or image name to use for the server
    default: 383ed3f8-0773-4b14-96c8-feb387dd3935
    
  volume_name:
    type: string
    description: name of volume
    default: sample_volume
    
  flavor:
    type: string
    description: Flavor for the server to be created
    default: T-1
    
  vm_name:
    type: string
    description: name of vm
    default: sample_vm
  

resources:
  network:
    type: OS::Neutron::Net
    properties:
      name: { get_param : network_name }
      availability_zone: { get_param : az }

  subnet:
    type: OS::Neutron::Subnet
    properties:
      name: { get_param : subnet_name }
      network_id: { get_resource : network }
      availability_zone: { get_param : az }
      cidr: { get_param : subnet_cidr }

  port:
    type: OS::Neutron::Port
    properties:
      name: { get_param : port_name }
      network_id: { get_resource: network }
      availability_zone: { get_param: az }
      security_groups:
        - {get_resource: sg }
      fixed_ips:
        - subnet_id: { get_resource: subnet }

  sg:
    type: OS::Neutron::SecurityGroup
    properties:
      name: { get_param : sg_name }
      rules:
        # HTTP
        - { direction: egress, ethertype: IPv4, port_range_min: 80, port_range_max: 80, protocol: tcp, remote_ip_prefix: 0.0.0.0/0 }
        # HTTPS
        - { direction: egress, ethertype: IPv4, port_range_min: 443, port_range_max: 443, protocol: tcp, remote_ip_prefix: 0.0.0.0/0 }
        # DNS
        - { direction: egress, ethertype: IPv4, port_range_min: 53, port_range_max: 53, protocol: tcp, remote_ip_prefix: 0.0.0.0/0 }
        - { direction: egress, ethertype: IPv4, port_range_min: 53, port_range_max: 53, protocol: udp, remote_ip_prefix: 0.0.0.0/0 }

  key:
    type: OS::Nova::KeyPair
    properties:
      name: { get_param: key_name }
      save_private_key: true
      availability_zones: [{ get_param: az }]

  sys-vol:
    type: OS::Cinder::Volume
    properties:
      name: { get_param: volume_name }
      size: 30
      volume_type: "M1"
      availability_zone: { get_param: az }
      image : { get_param: image }

  server:
    type: OS::Nova::Server
    properties:
      key_name: { get_resource: key }
      image: { get_param: image }
      flavor: { get_param: flavor }
      networks: ["port": {get_resource: port} ]
      name: { get_param: vm_name }
      block_device_mapping:
      - device_name: vda
        volume_id: {get_resource: sys-vol}
        
outputs:
  private_key:
    description: private key of created key pair
    value: { get_attr: [key, private_key] }

本テンプレートではシステム構成上、仮想ネットワークと仮想サーバを同一スタック内に作成していますが、可読性を上げる為、リソース同士の依存に影響しない範囲で分割することを推奨致します。

また、テンプレートを分割する事によりエラー時の影響範囲を狭めることもできます。

仮想ネットワークと仮想サーバのテンプレート例については、以降を参照してください。