テンプレートを使用したサンプルシステムの構築#

本構成はFJcloud-O 東日本/西日本リージョン3向けとなります。

要求事項#

仮想サーバーや仮想ネットワーク・セキュリティグループなど、何度も利用する構成を定型化し、以下に対応します。

  • システムを一括で配備したい(自動化)
  • 開発/検証/本番などの環境を同一の内容で構築したい
  • 他のシステムでも再利用できるようにしたい

本パターンでは、FJcloud-O初期構築ガイド で紹介している構成の一部を、テンプレートで自動構築します。

対応するデザインパターン概要#

1. テンプレートによる自動構築#

FJcloud-O は「オーケストレーション機能」を提供しており、IaaS環境を自動構築できます。
テンプレートは、オーケストレーション機能への操作指示で使用します。

テンプレートにIaaSの構成情報を、YAML形式のテキストで記述します。
オーケストレーション機能は、テンプレートに記載された仮想ネットワークなどのリソースを一括構築します。
また、一括構築したリソースの集合体 (固まり) を「スタック」として管理します。

2. テンプレートの書式#

テンプレートで使用されるYAMLとは構造化されたデータを表現するためのフォーマットです。
以下3つの主要セクションで構成されます。

  • parameters:
    作成/設定するリソースの入力パラメーターに関する記述
  • resources:
    作成/設定する固有のリソースに関する記述
  • outputs:
    アウトプットのパラメーターに関する記述

Note

FJcloud-Oのテンプレートは、OpenStackのHEATテンプレートに準拠しています。
以下より、サンプルテンプレートを参照いただけます。
  OpenStack Resource Types
なお、実際のサンプル利用可否は、事前に十分な検証をお願いいたします。

構造 (イメージ図)#

サンプルテンプレートを使用して、以下の構築を自動化します。
なお、各リソースの名称は括弧内の値が付与されます。
image

実装サンプル#

スタックは、IaaSポータル または APIで作成できます。
本パターンでは、はじめに 1. テンプレートファイルの作成 で、テンプレートファイルを作成します。 その後の操作は、以下より、必要な手順を参照してください。

1. テンプレートファイルの作成#

リソースを構築するためのテンプレートファイルを作成します。
実行ファイル一式を、ローカル作業環境にダウンロード・解凍してください。

実行ファイル(テンプレートファイル)

ファイル構成:

  • TEMPLATE_SAMPLE.yaml
    • テンプレートファイルです。
    • スタックの構成が定義されています。
  • run_template.sh
    • テンプレートの実行スクリプトです。
    • スタック作成時に使用できますので、必要に応じてご利用ください。

以下にテンプレートファイル(TEMPLATE_SAMPLE.yaml)を抜粋します。
(1)~(3)の説明に従い、修正してください。

  • テンプレートファイル
    #######################################################################
    ## Heat template for FJcloud-O CDP
    ##                                       Copyright 2023 FUJITSU Limited
    #######################################################################
    heat_template_version: 2017-02-24
    
    #######################################################################
    parameters:
    #######################################################################
    ## Network parameters
      fip_net:
        type: string
        default: <仮想ネットワークID> #この左の<仮想ネットワークID>を、fip-netの仮想ネットワークIDに置換
    
      service_network_name:
        type: string
        description: Virtual network name
        default: ssl-vpn-network
    
      service_subnet_name:
        type: string
        description: Subnet Name
        default: ssl-vpn-subnet
    
      service_router_name:
        type: string
        description: Router name
        default: ssl-vpn-router
    
      service_subnet_cidr:
        type: string
        description: CIDR representation of subnet
        default: 192.168.0.0/24
    
      service_subnet_gw_ip:
        type: string
        description: Gateway IP of subnet
        default: 192.168.0.1
        
      service_subnet_gw_port_name:
        type: string
        description: Gateway port name of subnet
        default: GWport
        
      sslvpn_cidr:
        type: string
        default: 192.168.246.0/24
        description: CIDR representation of ssl-vpn subnet
    
      security_group_name:
        type: string
        description: Scurity group name
        default: ssl-vpn-SG
        
      nameserver_ip1:
        type: string
        description: IP of dns nameserver1
        default: 8.8.8.8
        
      nameserver_ip2:
        type: string
        description: IP of dns nameserver2
        default: 8.8.4.4
    
    ## Server parameters
      server_port_name:
        type: string
        description: Server port name
        default: server_port
    
      key_name:
        type: string
        description: Keypair name
        default: test-keypair
    
      image:
        type: string
        description: Image ID or image name to deploy the server
        default: 9f42329b-11f7-4de3-8e4b-0d3acd53242c
    
      volume_name:
        type: string
        description: Sorage volume name
        default: rhel-system-volume
    
      flavor:
        type: string
        description: Server flavor
        default: C3-1
        
      vol_size:
        type: number
        default: 40
    
      server_name:
        type: string
        description: server name
        default: RHEL
    
    #######################################################################
    resources:
    #######################################################################
    ## Network resources
      service_network:
        type: OS::Neutron::Net
        properties:
          name: { get_param: service_network_name }
    
      service_subnet:
        type: OS::Neutron::Subnet
        properties:
          cidr: { get_param: service_subnet_cidr }
          name: { get_param: service_subnet_name }
          gateway_ip: { get_param: service_subnet_gw_ip }
          network: { get_resource: service_network }
          dns_nameservers: [{ get_param: nameserver_ip1 }, { get_param: nameserver_ip2 }]
    
      gw_port:
        type: OS::Neutron::Port
        properties:
          name: { get_param: service_subnet_gw_port_name }
          network: { get_resource: service_network }
          fixed_ips: [ {'subnet': {get_resource: service_subnet}, 'ip_address': {get_param: service_subnet_gw_ip}} ]
    
      service_router:
        type: OS::Neutron::Router
        properties:
          name: { get_param: service_router_name }
          external_gateway_info:
            network: {get_param: fip_net}
    
      service_router_interface: 
        type: OS::Neutron::RouterInterface
        properties:
          router_id: { get_resource: service_router }
          port: { get_resource: gw_port }
    
      sslvpn-security_group:
        type: OS::Neutron::SecurityGroup
        properties:
          name: { get_param: security_group_name }
          rules:
            - direction: ingress
              protocol: tcp
              remote_ip_prefix: { get_param: sslvpn_cidr }
              port_range_min: 22
              port_range_max: 22
            - direction: ingress
              protocol: tcp
              remote_ip_prefix: { get_param: sslvpn_cidr }
              port_range_min: 3389
              port_range_max: 3389
            - direction: ingress
              protocol: icmp
              remote_ip_prefix: { get_param: sslvpn_cidr }
    
    ## Server resources
      keypair_private:
        type: OS::Nova::KeyPair
        properties:
          name: { get_param: key_name }
          save_private_key: true
          
      server_port:
        type: OS::Neutron::Port
        properties:
          name: { get_param : server_port_name }
          network: { get_resource: service_network }
          security_groups: [ { get_resource: sslvpn-security_group }]
          fixed_ips:
            - subnet_id: { get_resource: service_subnet }
    
      sys-vol:
        type: OS::Cinder::Volume
        properties:
          name: { get_param: volume_name }
          size:  { get_param: vol_size }
          volume_type: M2
          image : { get_param: image }
    
      test-server:
        type: OS::Nova::Server
        properties:
          key_name: { get_resource: keypair_private }
          flavor: { get_param: flavor }
          networks:
            - port: { get_resource: server_port }
          name: { get_param: server_name }
          block_device_mapping_v2:
            - device_name: vda
              volume_id: { get_resource: sys-vol }
    
    outputs:
      private_key:
        value: { get_attr: [keypair_private, private_key] }
    

(1) 事前準備#

外部ネットワーク(fip-net)の仮想ネットワークIDを確認します。

  • IaaSポータルで「ネットワーク」⇒「仮想ネットワーク」と選択した画面で、「fip-net」を選択してください。
  • 「仮想ネットワーク詳細」画面で「仮想ネットワークID」を確認後、上記Parametersセクションの13行目(<仮想ネットワークID>)を置換してください。
    image

(2) parametersセクション内の設定項目#

各パラメーターの設定値は以下表のとおりです。
パラメーター必要に応じて修正ください。

パラメーター 設定値例                   説明                  
fip_net 5234aa88-9cd8-49bd-b613-d0006eacb87b 外部仮想ネットワーク(fip-net)の仮想ネットワークIDを指定
service_network_name ssl-vpn-network 作成する仮想ネットワークの名前を指定
service_subnet_name ssl-vpn-subnet 作成するサブネットの名前を指定
service_router_name ssl-vpn-router 作成するルータの名前を指定
service_subnet_cidr 192.168.0.0/24 作成するサブネットのCIDRを指定
service_subnet_gw_ip 192.168.0.1 サブネットのゲートウェイIPを指定
service_subnet_gw_port_name GWport サブネットのゲートウェイポートの名前を指定
sslvpn_cidr 192.168.246.0/24 SSL-VPN環境接続後、ユーザー側ネットワークに割り当てるIPアドレスの範囲(クライアントIPプール)を指定
security_group_name ssl-vpn-SG セキュリティグループの名前を指定
nameserver_ip1 8.8.8.8 サブネットに配備するサーバーが使用するDNSサーバー1のIPアドレスを指定
nameserver_ip2 8.8.4.4 サブネットに配備するサーバーが使用するDNSサーバー2のIPアドレスを指定
server_port_name server_port 作成する仮想サーバーのポート名を指定
key_name test-keypair 作成するキーペア名を指定
ここで作成するキーペアが仮想マシンの作成時に使用される
image 9f42329b-11f7-4de3-8e4b-0d3acd53242c 仮想サーバーの作成に使用するイメージIDを指定
※イメージIDは、IaaSポータルで「コンピュート」⇒「イメージ」と選択した画面で確認できます
volume_name rhel-system-volume 仮想サーバーにアタッチさせるシステムストレージのボリューム名を指定
flavor C3-1 作成する仮想サーバーのフレーバーを指定
vol_size 40 作成する仮想サーバーのストレージサイズ(容量)をGB単位で指定
server_name RHEL 作成する仮想サーバーの名前を指定

(3) resourcesセクション内の設定項目#

  • セキュリティグループ
    以下のルールを保持するセキュリティグループが作成され、仮想サーバー(RHEL)のポートに適用されます。
    必要に応じて修正ください。
ルール 方向 オープンポート ポート 接続先 セキュリティグループまたは CIDR IPバージョン
ALL ICMP 受信 - - CIDR 192.168.246.0/24 IPv4
カスタムTCPルール 受信 ポート 22 CIDR 192.168.246.0/24 IPv4
カスタムTCPルール 受信 ポート 3389 CIDR 192.168.246.0/24 IPv4

2. IaaSポータルでのスタック作成#

(1) スタックの作成#

IaaSポータルでは、以下手順でスタックを作成します。

  • 「テンプレート」⇒「スタック」と選択した画面で、画面右上の「+」ボタンをクリックします。
  • 以下を入力して「作成」をクリックすると、「スタック」画面に戻り、スタックが "CREATE_IN_PROGRESS" というステータスで作成中になります。
項目 設定値例 説明
スタック名 CDP_STACK_SAMPLE 任意のスタック名を指定
英数字と、"_"、"-"、"." のみ使用可。先頭文字は英字。
テンプレート
指定方法
YAML 以下よりテンプレートの指定方法を選択
  • URL
  • ファイル
  • YAML
  • テンプレート
    ファイル                                
    ( 1. テンプレートファイルの作成 で作成したテンプレートファイルを、コピー/ペースト) テンプレートの指定方法に合わせて、項目名が以下のように変化
  • URL
  • ファイル
  • YAML
  • タイムアウト
    (分)
    20分 任意の値を入力
    失敗時のリソース削除                 「削除する」をチェックしない テンプレート実行失敗時に、失敗するまでに作成したリソースを削除する場合はチェックをする

    Note

    既存のセキュリティグループ数やセキュリティグループルール数との合計が、プロジェクトの制限値を超える場合には、以下になる場合があります。

  • スタック作成が失敗する
  • ルールの一部が作成されない
  • しばらく時間をおいて、「スタック一覧」画面をリロードします。
    ステータスが "CREATE_COMPLETE" となれば、 スタック作成は完了です。

    (2) スタックの確認#

    (A) キーペアの保存#

    スタック一覧画面で、作成したスタックを選択します。
    画面を下にスクロールした「アウトプット」内では、作成されたキーペアの情報が出力されています。以下手順で、キーペアファイルとしてローカル作業環境に保存します。

    • -----BEGIN RSA PRIVATE KEY-----から-----END RSA PRIVATE KEY-----までを、任意のテキストエディターに貼り付け
    • さらに、文中の改行コード(\n)は実際の改行に修正
    • 保存時の名称は、任意のファイル名+拡張子.pemを指定
    (B) リソースを確認#

    テンプレートの内容で正常に構築されたことを確認します。
    IaaSポータルのコンピュート・ストレージ・ネットワークメニューから、各リソースの設定状況を確認してください。

    Note

    スタックが "CREATE_COMPLETE" となっていても、セキュリティグループのルール数が制限値を超えていて、ルールが作成されていない場合があります。

    3. IaaSポータルでのスタック削除#

    以下手順でスタックを削除できます。

    • 「テンプレート」⇒「スタック」と選択した画面で、削除したいスタックの「アクション」メニューから、「削除」をクリックします。
    • 「スタック削除の確認」ウィンドウがポップアップされます。確認して「削除」をクリックします。
      「削除」クリックすると、「スタック」画面に戻り、"DELETE_IN_PROGRESS" というステータスで削除中になります。
    • しばらく時間をおいて、「スタック」画面をリロードします。
      スタックの削除が完了すると、スタック一覧から消失します。
      スタックの削除が失敗すると、ステータスが "DELETE_FAILED" になります。

    Warning

    スタック作成中に、スタックを削除しないでください。
    "DELETE_FAILED" となって、スタックが削除できなくなる可能性があります。

    Note

    スタック作成後にSSL-VPN接続などのリソースを追加構築した場合、これらを削除しない限り、依存関係のためスタック削除に失敗します。
    以下をご確認ください。

  • 各スタックは、作成完了直後の状態であること(=あとから追加構築したリソースとの依存関係がないこと)
  • 複数のスタックを作成した場合は、作成時とは逆順でスタックを削除
  • 4. APIでのスタック作成#

    (1) トークンの取得・確認#

    APIでのスタック作成にあたり、初期構築ガイドの API実行-コマンドライン編 記載のAPI実行環境を例に説明します。
    ポータルログイン時の設定により、ご使用の環境に合わせた方法でトークンを取得してください。

    トークン取得後は、REGION_ID変数・OS_AUTH_TOKEN変数に、それぞれ、リージョン変数・トークンが格納されていることを確認してください。

    • REGION_ID変数

      • 確認例
        echo $REGION_ID
        
      • 応答例
        jp-east-3
        
    • OS_AUTH_TOKEN変数

      • 確認例
        echo $OS_AUTH_TOKEN
        
      • 応答例
        gAAAAABlYF05SDoRfU518JOt0AaK9wUCoZ98B23JHzr1ruwLEKzxY5i3b6TvKShULjhKfRXAgM9iUUDp5FrLL0nsgXESCep5wUuI88WtX2E8T9nptpQjKHZiRJ5WGsPv5s3eLTpSSHMUogHz4qktJwEty7CRZabcdefghijklmnopqrstuvwXYZ
        

    (2) スタック作成スクリプトの準備#

    スタック作成に使用するシェルスクリプトを準備します。ダウンロードしたテンプレートの実行スクリプト(run_template.sh)を、ローカル作業環境で開いてください。
    以下の設定項目とシェルスクリプト例を参考に、3行目のPROJECT_ID変数にプロジェクトIDを設定、スクリプトを完成してください。

    • 設定項目
    変数例 設定値例 内容
    $PROJECT_ID "123456789abcdefghijklmnopqrstuvwxyz" プロジェクト名を指定
    ※以下手順を参照ください
    $ORCHESTRATION "https://orchestration.${REGION_ID}.cloud.global.fujitsu.com " スタック作成に必要なORCHESTRATIONのAPIエンドポイントを指定
    $STACK_NAME "CDP_STACK_SAMPLE" スタック名を指定
    $TEMPLATE_FILE "TEMPLATE_SAMPLE.yaml" ダウンロードしたテンプレートファイルTEMPLATE_SAMPLE.yamlのパスを指定
    $TEMPLATE $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') 変数$TEMPLATE_FILEで指定したテンプレートファイルTEMPLATE_SAMPLE.yamlの改行記号を、文字列\nに変換
    • シェルスクリプト例(run_template.sh)
      #!/bin/bash
      
      export PROJECT_ID=<プロジェクトID> #この左の<プロジェクトID>を、IaaSポータルで確認したプロジェクトIDに置換
      export ORCHESTRATION=https://orchestration.${REGION_ID}.cloud.global.fujitsu.com #APIエンドポイントを設定
      export STACK_NAME=CDP_STACK_SAMPLE
      export TEMPLATE_FILE=TEMPLATE_SAMPLE.yaml
      export TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g')
      
      curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \
      -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \
      -d @- <<EOL
      {
        "stack_name": "${STACK_NAME}",
        "template": "${TEMPLATE}"
      }
      EOL
      

    プロジェクトIDは、IaaSポータルから、以下の手順で確認・設定してください。

    • IaaSポータル内で対象リージョン・プロジェクトを選択します。
    • サイドバーから [ API実行 ] をクリックします。
    • [ プロジェクトID(テナントID) ] 右側にある値で、シェルスクリプト例3行目の<プロジェクトID>を置換

    さらに、以下ファイルをリモートのAPI実行環境に転送します。

    • テンプレートファイル(TEMPLATE_SAMPLE.yaml)
    • スクリプトファイル(run_template.sh)
      リモート環境へのファイル転送方法は、初期構築ガイドの トークン取得 を参考にしてください。

    (3) スタックの作成#

    リモートのAPI実行環境で、作成したrun_template.shを実行します。

    . ./run_template.sh
    

    以下のような応答が表示されたら、スタック作成は完了です。

    応答例:

    {"stack": {"id": "b692e6e3-870c-4bb4-952a-91df71fcc065", "links": [{"href": "https://orchestration.jp-west-3.cloud.global.fujitsu.com/v1/9966efc704d149f2936
    a74c9fa1281c7/stacks/CDP_STACK_SAMPLE/b692e6e3-870c-4bb4-952a-91df71fcc065", "rel": "self"}]}}
    

    (4) スタックの確認#

    IaaSポータルから、 スタックの確認 記載の手順を実施してください。

    5. APIでのスタック削除#

    スタック削除手順を、前章で作成したスタック(CDP_STACK_SAMPLE)を例に説明します。
    前提として、トークンの取得・APIエンドポイントの設定まで終了していることを確認し、以下手順を実施してください。

    はじめに、削除するスタックの「スタック名」・「スタックID」を確認するために、以下のcurlコマンドを実行します。

    $ curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X GET \
    -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json"
    

    応答例:

    • スタック名は、1行目のstack_nameに対応する値(CDP_STACK_SAMPLE)です。
    • スタックIDは、最終行のidに対応する値(b692e6e3-870c-4bb4-952a-91df71fcc065)です。
      {"stacks": [{"description": "", "parent": null, "stack_status_reason": "Stack CREATE completed successfully", "stack_name": "CDP_STACK_SAMPLE", "stack_user_
      project_id": "9bbfbdb46d154037be06772641ea2fb5", "deletion_time": null, "creation_time": "2023-11-10T09:35:52Z", "links": [{"href": "https://orchestration.j
      p-west-3.cloud.global.fujitsu.com/v1/9966efc704d149f2936a74c9fa1281c7/stacks/CDP_STACK_SAMPLE/b692e6e3-870c-4bb4-952a-91df71fcc065", "rel": "self"}], "updat
      ed_time": null, "stack_owner": null, "stack_status": "CREATE_COMPLETE", "id": "b692e6e3-870c-4bb4-952a-91df71fcc065", "tags": null}]}
      

    スタック名・スタックIDを、それぞれ、STACK_NAME変数・STACK_ID変数に設定します。

    $ export STACK_NAME=CDP_STACK_SAMPLE
    $ export STACK_ID=b692e6e3-870c-4bb4-952a-91df71fcc065
    

    curlコマンドでスタックを削除します。正常に削除されれば、応答はありません。

    $ curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks/$STACK_NAME/$STACK_ID -X DELETE \
    -H "X-Auth-Token: $OS_AUTH_TOKEN"
    

    Note

    スタック作成後にSSL-VPN接続などのリソースを追加構築した場合、これらを削除しない限り、依存関係のためスタック削除に失敗します。
    以下をご確認ください。

  • 各スタックは、作成完了直後の状態であること(=あとから追加構築したリソースとの依存関係がないこと)
  • 複数のスタックを作成した場合は、作成時とは逆順でスタックを削除
  • (付録)パラメーターファイルを活用したファイアウォールの設定#

    4. APIでのスタック作成で作成したテンプレートファイルのParametersセクションに記載した値は、パラメーターファイルとして別ファイルでも定義できます。
    パラメーター値を別ファイルにまとめ、参照することで、大規模構成でもコードの管理・変更が容易になります。
    本章では、構築にAPIを使用し、パラメーターおよびテンプレートファイルでスタック作成します。
    なお、構築にあたっては、 実装サンプル の構成に、ファイアウォールを追加設定した構成で説明します。

    image

    • ルーターにファイアウォールを設定することで、よりセキュリティを高めることができます。
    • 特に、インターネットからのグローバル通信を受ける場合には、使用をご検討ください。
    • 一例として、SSL-VPN利用時のファイアウォールルール設定を説明します。

    1. テンプレート・パラメーターファイルの作成#

    リソース構築するためのテンプレート・パラメーターファイルを作成します。
    実行ファイル一式を、ローカル作業環境にダウンロード・解凍してください。
    実行ファイル(テンプレート+パラメーターファイル)

    • ファイル構成:
      • FW_TEMPLATE_SAMPLE_API.yaml
        • テンプレートファイルです。
        • 実装サンプル で作成した構成に加え、ルーターにファイアウォールを設定します。
      • FW_PARAMETER_SAMPLE_API.json
        • パラメーターファイルです。
        • FW_TEMPLATE_SAMPLE_API.yamlでスタックを作成するために、必要なパラメーター値を設定します。
      • FW_run_template.sh
        • テンプレートの実行スクリプトです。
        • APIでスタック作成する際に使用します。

    以下にパラメーターファイル(FW_PARAMETER_SAMPLE_API.json)を抜粋します。
    テンプレートファイル(FW_TEMPLATE_SAMPLE_API.yaml)のParametersセクションで定義したパラメーター値が、上から順に記載されています。
    (1)~(3)の説明に従い、各ファイルを修正してください。

    • パラメーターファイル(FW_PARAMETER_SAMPLE_API.json)
      {
        "fip_net": "<仮想ネットワークID>",
        "service_network_name": "ssl-vpn-network",
        "service_subnet_name": "ssl-vpn-subnet",   
        "service_router_name": "ssl-vpn-router",  
        "service_subnet_cidr": "192.168.0.0/24",
        "service_subnet_gw_ip": "192.168.0.1",
        "service_subnet_gw_port_name": "GWport",  
        "sslvpn_cidr": "192.168.246.0/24",  
        "security_group_name": "ssl-vpn-SG", 
        "nameserver_ip1": "8.8.8.8",
        "nameserver_ip2": "8.8.4.4",
        "firewall_name": "ssl-vpn-FW",
        "firewall_policy_name": "ssl-vpn-FW-Policy",
        "server_port_name": "server_port",  
        "key_name": "test-keypair",  
        "image": "9f42329b-11f7-4de3-8e4b-0d3acd53242c",
        "volume_name": "rhel-system-volume", 
        "flavor": "C3-1",
        "vol_size": "40",
        "server_name": "RHEL"
      }
      

    (1) 事前準備#

    外部ネットワーク(fip-net)の仮想ネットワークIDを確認します。

    • IaaSポータルで「ネットワーク」⇒「仮想ネットワーク」と選択した画面で、「fip-net」を選択してください。
    • 「仮想ネットワーク詳細」画面で「仮想ネットワークID」を確認後、パラメーターファイル(FW_PARAMETER_SAMPLE_API.json)の2行目(<仮想ネットワークID>)を置換してください。
      image

    (2) パラメーターファイルでの設定項目#

    パラメーターファイルでの設定値は以下表のとおりです。
    必要に応じて修正ください。

    パラメーター 設定値例                   説明                  
    fip_net 5234aa88-9cd8-49bd-b613-d0006eacb87b 外部仮想ネットワーク(fip-net)の仮想ネットワークIDを指定
    service_network_name ssl-vpn-network 作成する仮想ネットワークの名前を指定
    service_subnet_name ssl-vpn-subnet 作成するサブネットの名前を指定
    service_router_name ssl-vpn-router 作成するルータの名前を指定
    service_subnet_cidr 192.168.0.0/24 作成するサブネットのCIDRを指定
    service_subnet_gw_ip 192.168.0.1 サブネットのゲートウェイIPを指定
    service_subnet_gw_port_name GWport サブネットのゲートウェイポートの名前を指定
    sslvpn_cidr 192.168.246.0/24 SSL-VPN環境接続後、ユーザー側ネットワークに割り当てるIPアドレスの範囲(クライアントIPプール)を指定
    security_group_name ssl-vpn-SG セキュリティグループの名前を指定
    nameserver_ip1 8.8.8.8 サブネットに配備するサーバーが使用するDNSサーバー1のIPアドレスを指定
    nameserver_ip2 8.8.4.4 サブネットに配備するサーバーが使用するDNSサーバー2のIPアドレスを指定
    firewall_name ssl-vpn-FW ファイアウォール名を指定
    firewall_policy_name ssl-vpn-FW-Policy ファイアウォールポリシー名を指定
    server_port_name server_port 作成する仮想サーバーのポート名を指定
    key_name test-keypair 作成するキーペア名を指定
    ここで作成するキーペアが仮想マシンの作成時に使用される
    image 9f42329b-11f7-4de3-8e4b-0d3acd53242c 仮想サーバーの作成に使用するイメージ名を指定
    ※イメージ一覧は、IaaSポータルで「コンピュート」⇒「イメージ」と選択した画面で確認できます
    volume_name rhel-system-volume 仮想サーバーにアタッチさせるシステムストレージのボリューム名を指定
    flavor C3-1 作成する仮想サーバーのフレーバーを指定
    vol_size 40 作成する仮想サーバーのストレージサイズ(容量)をGB単位で指定
    server_name RHEL 作成する仮想サーバーの名前を指定

    (3) ファイアウォールの設定項目#

    本章で追加設定されるファイアウォールのルールとして、以下を設定します。
    必要に応じ、テンプレートファイル または テンプレートファイル の値を修正してください。

    No. ファイアウォールルール名 action IPプロトコル 接続元IPアドレス 接続元使用ポート 接続先IPアドレス 接続先使用ポート
    1 firewall_ingress_rule_allow_vpncider allow tcp 192.168.246.0/24
    (SSL-VPNクライアントIPプール)
    any 192.168.0.0/24 any
    2 firewall_ingress_rule_allow_vpnendpoint allow tcp 0.0.0.0/0 any 192.168.90.5
    (※)
    443
    3 firewall_ingress_rule_allow_localnet allow tcp 192.168.0.0/24 any 192.168.0.0/24 any
    4 firewall_egress_rule_allow_all allow any 192.168.0.0/24 any any any
    5 firewall_rule_all_deny deny any any any any any

    ※:192.168.90.5/32はSSL-VPN ConnectionリソースのIPアドレスとして利用されます。
    詳細はこちらを参照してください。

    2. スタックの作成#

    (1) トークンの取得・確認#

    以下手順を参考に、トークンを取得してください。

    (2) スタック作成スクリプトの準備#

    スタック作成に使用するシェルスクリプトを準備します。
    ダウンロードしたテンプレートの実行スクリプト(FW_run_template.sh)を、ローカル作業環境で開いてください。
    以下の設定項目とシェルスクリプト例を参考に、3行目のPROJECT_ID変数にプロジェクトIDを設定、スクリプトを完成してください。

    • 設定項目
    変数例 設定値例 内容
    $PROJECT_ID "123456789abcdefghijklmnopqrstuvwxyz" プロジェクト名を指定
    ※以下手順を参照ください
    $ORCHESTRATION "https://orchestration.${REGION_ID}.cloud.global.fujitsu.com " スタック作成に必要なORCHESTRATIONのAPIエンドポイントを指定
    $STACK_NAME "FW_CDP_STACK_SAMPLE" スタック名を指定
    $TEMPLATE_FILE "FW_TEMPLATE_SAMPLE_API.yaml" ダウンロードしたテンプレートファイルFW_TEMPLATE_SAMPLE_APIのパスを指定
    $PARAMETER_FILE "FW_PARAMETER_SAMPLE_API.json" ダウンロードしたパラメーターファイルFW_PARAMETER_SAMPLE_API.jsonのパスを指定
    $TEMPLATE $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') 変数$TEMPLATE_FILEで指定したテンプレートファイルFW_TEMPLATE_SAMPLE_API.yamlの改行記号を、文字列\nに変換
    $PARAMETER $(cat ${PARAMETER_FILE}) 変数PARAMETER_FILEには、ダウンロードしたパラメーターファイルFW_PARAMETER_SAMPLE_API.jsonのパスを指定
    • シェルスクリプト例(FW_run_template.sh)
      #!/bin/bash
      
      export PROJECT_ID=<プロジェクトID> #この左の<プロジェクトID>を、IaaSポータルで確認したプロジェクトIDに置換
      export ORCHESTRATION=https://orchestration.${REGION_ID}.cloud.global.fujitsu.com #APIエンドポイントを設定
      export STACK_NAME=FW_CDP_STACK_SAMPLE
      export PARAMETER_FILE=FW_PARAMETER_SAMPLE_API.json
      export TEMPLATE_FILE=FW_TEMPLATE_SAMPLE_API.yaml
      export TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g')    
      export PARAMETER=$(cat ${PARAMETER_FILE}) 
      
      curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \
      -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \
      -d @- <<EOL
      {
        "stack_name": "${STACK_NAME}",
        "template": "${TEMPLATE}",
        "parameters": ${PARAMETER}
      }
      EOL
      

    プロジェクトIDは、IaaSポータルから、以下の手順で確認・設定してください。

    • IaaSポータル内で対象リージョン・プロジェクトを選択します。
    • サイドバーから [ API実行 ] をクリックします。
    • [ プロジェクトID(テナントID) ] 右側にある値で、シェルスクリプト例3行目の<プロジェクトID>を置換

    さらに、以下ファイルをリモートのAPI実行環境に転送します。

    • テンプレートファイル(TEMPLATE_SAMPLE.yaml)
    • パラメターファイル(FW_PARAMETER_SAMPLE_API.json)
    • スクリプトファイル(FW_run_template.sh)
      リモート環境へのファイル転送方法は、初期構築ガイドの トークン取得 を参考にしてください。

    (3) スタックの作成#

    リモートのAPI実行環境で、作成したFW_run_template.shを実行します。

    . ./FW_run_template.sh
    

    以下のような応答が表示されたら、スタック作成は完了です。

    応答例:

    {"stack": {"id": "b692e6e3-870c-4bb4-952a-91df71fcc065", "links": [{"href": "https://orchestration.jp-west-3.cloud.global.fujitsu.com/v1/9966efc704d149f2936
    a74c9fa1281c7/stacks/FW_CDP_STACK_SAMPLE/b692e6e3-870c-4bb4-952a-91df71fcc065", "rel": "self"}]}}
    

    (4) スタックの確認#

    IaaSポータルから、 スタックの確認 記載の手順を実施してください。

    3. スタックの削除#

    5. APIでのスタック削除 を参考に、スタックを削除してください。

    メリット・効果#

    テンプレートを使用したサンプルシステムの構築 パターンを利用した場合のメリット・効果は以下のとおりです。

    • 何度も利用する構成を定型化 (=テンプレート化) することで、容易にシステムを一括配備できます(自動化)。
    • 開発/検証/本番などの環境で、同一の内容で環境構築したい場合、容易に複数環境を配備できます。
    • テンプレートを流用したり再利用することで、構築コストを低減できます。

    注意事項#

    • 本パターンは2024年5月時点のFJcloud-O 東日本/西日本リージョン3で動作検証しています。
    • テンプレートのパラメータごと詳細は、 HEATテンプレート解説書 をご確認ください。
      東日本/西日本リージョン3ではテンプレートの仕様が一部異なります。詳細は こちら を参照してください。
    • テンプレートに設定したパラメーターがプロジェクトの制限値を超えている場合、以下の可能性があります。ご注意ください。
      • スタック作成の失敗
      • スタック作成完了後の不備