テンプレートを使用したサンプルシステムの構築#
本構成は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
なお、実際のサンプル利用可否は、事前に十分な検証をお願いいたします。
構造 (イメージ図)#
サンプルテンプレートを使用して、以下の構築を自動化します。
なお、各リソースの名称は括弧内の値が付与されます。
実装サンプル#
スタックは、IaaSポータル または APIで作成できます。
本パターンでは、はじめに 1. テンプレートファイルの作成 で、テンプレートファイルを作成します。
その後の操作は、以下より、必要な手順を参照してください。
- IaaSポータルでの操作
- CLIでのAPI実行操作
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>)を置換してください。
(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 | 以下よりテンプレートの指定方法を選択 |
テンプレート ファイル |
( 1. テンプレートファイルの作成 で作成したテンプレートファイルを、コピー/ペースト) | テンプレートの指定方法に合わせて、項目名が以下のように変化 |
タイムアウト (分) |
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実行環境を例に説明します。
ポータルログイン時の設定により、ご使用の環境に合わせた方法でトークンを取得してください。
- 「パスワード認証、または、ワンタイムパスワード+パスワード認証」を設定している場合:
3.2 パスワード認証、または、ワンタイムパスワード+パスワード認証 でのトークン取得 - 「クライアント証明書+パスワード認証」を設定している場合:
3.3 クライアント証明書+パスワード認証でのトークン取得
トークン取得後は、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を使用し、パラメーターおよびテンプレートファイルでスタック作成します。
なお、構築にあたっては、 実装サンプル の構成に、ファイアウォールを追加設定した構成で説明します。
- ルーターにファイアウォールを設定することで、よりセキュリティを高めることができます。
- 特に、インターネットからのグローバル通信を受ける場合には、使用をご検討ください。
- 一例として、SSL-VPN利用時のファイアウォールルール設定を説明します。
1. テンプレート・パラメーターファイルの作成#
リソース構築するためのテンプレート・パラメーターファイルを作成します。
実行ファイル一式を、ローカル作業環境にダウンロード・解凍してください。
実行ファイル(テンプレート+パラメーターファイル)
- ファイル構成:
- FW_TEMPLATE_SAMPLE_API.yaml
- テンプレートファイルです。
- 実装サンプル で作成した構成に加え、ルーターにファイアウォールを設定します。
- FW_PARAMETER_SAMPLE_API.json
- パラメーターファイルです。
- FW_TEMPLATE_SAMPLE_API.yamlでスタックを作成するために、必要なパラメーター値を設定します。
- FW_run_template.sh
- テンプレートの実行スクリプトです。
- APIでスタック作成する際に使用します。
- FW_TEMPLATE_SAMPLE_API.yaml
以下にパラメーターファイル(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>)を置換してください。
(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ではテンプレートの仕様が一部異なります。詳細は こちら を参照してください。 - テンプレートに設定したパラメーターがプロジェクトの制限値を超えている場合、以下の可能性があります。ご注意ください。
- スタック作成の失敗
- スタック作成完了後の不備